Previsão de análise preditiva do SPSS usando preparação de dados para dados de série temporal em blocos de notas

A preparação de dados para dados de série temporal (TSDP) fornece a funcionalidade para converter dados de tempo bruto (em formato multidimensional comprimido, que inclui (evento) transacional com base em dados baseados em coluna) em dados de série temporal regulares (em formato compacto baseado em linha) exigidos pelos métodos de análise de série temporal subsequentes.

A principal tarefa do TSDP é gerar séries temporais em termos de combinação de cada valor exclusivo nos campos de dimensão com campos de métrica. Além disso, ele classifica os dados com base no registro de data e hora, extrai metadados de variáveis de tempo, transforma séries temporais com outra granularidade (intervalo) de tempo aplicando uma função de distribuição ou agregação, verifica a qualidade dos dados e manipula valores ausentes, se necessário.

Exemplo de código Python:

from spss.ml.forecasting.timeseriesdatapreparation import TimeSeriesDataPreparation

tsdp = TimeSeriesDataPreparation(). \
    setMetricFieldList(["Demand"]). \
    setDateTimeField("Date"). \
    setEncodeSeriesID(True). \
    setInputTimeInterval("MONTH"). \
    setOutTimeInterval("MONTH"). \
    setQualityScoreThreshold(0.0). \
    setConstSeriesThreshold(0.0)

tsdpOut = tsdp.transform(data)

TimeSeriesDataPreparationConvertor

Esta é a API do conversor de data/hora que é usada para fornecer algumas funcionalidades do conversor de data/hora dentro do TSDP para uso das aplicações. Há dois casos de uso para esse componente:

  • Calcular o tempo entre um horário de início e um horário de encerramento especificado. Nesse caso, os horários de início e de encerramento ocorrem após a primeira observação na saída do TSDP anterior.
  • Calcular o tempo entre um índice de início e um índice de encerramento para a última observação na saída do TSDP anterior.

Modelagem causal temporal

Modelagem causal temporal (TCM) refere-se a um conjunto de métodos que tentam descobrir os principais relacionamentos temporais nos dados da série temporal usando uma combinação de causalidade Granger e algoritmos de regressão para seleção de variáveis.

Exemplo de código Python:

from spss.ml.forecasting.timeseriesdatapreparation import TimeSeriesDataPreparation
from spss.ml.common.wrapper import LocalContainerManager
from spss.ml.forecasting.temporalcausal import TemporalCausal
from spss.ml.forecasting.params.predictor import MaxLag, MaxNumberOfPredictor, Predictor
from spss.ml.forecasting.params.temporal import FieldNameList, FieldSettings, Forecast, Fit
from spss.ml.forecasting.reversetimeseriesdatapreparation import ReverseTimeSeriesDataPreparation

tsdp = TimeSeriesDataPreparation().setDimFieldList(["Demension1", "Demension2"]). \
    setMetricFieldList(["m1", "m2", "m3", "m4"]). \
    setDateTimeField("date"). \
    setEncodeSeriesID(True). \
    setInputTimeInterval("MONTH"). \
    setOutTimeInterval("MONTH")
tsdpOutput = tsdp.transform(changedDF)

lcm = LocalContainerManager()
lcm.exportContainers("TSDP", tsdp.containers)

estimator = TemporalCausal(lcm). \
    setInputContainerKeys(["TSDP"]). \
    setTargetPredictorList([Predictor(
    targetList=[["", "", ""]],
    predictorCandidateList=[["", "", ""]])]). \
    setMaxNumPredictor(MaxNumberOfPredictor(False, 4)). \
    setMaxLag(MaxLag("SETTING", 5)). \
    setTolerance(1e-6)

tcmModel = estimator.fit(tsdpOutput)
transformer = tcmModel.setDataEncoded(True). \
    setCILevel(0.95). \
    setOutTargetValues(False). \
    setTargets(FieldSettings(fieldNameList=FieldNameList(seriesIDList=[["da1", "db1", "m1"]]))). \
    setReestimate(False). \
    setForecast(Forecast(outForecast=True, forecastSpan=5, outCI=True)). \
    setFit(Fit(outFit=True, outCI=True, outResidual=True))

predictions = transformer.transform(tsdpOutput)
rtsdp = ReverseTimeSeriesDataPreparation(lcm). \
    setInputContainerKeys(["TSDP"]). \
    setDeriveFutureIndicatorField(True)

rtsdpOutput = rtsdp.transform(predictions)
rtsdpOutput.show()

Modelo Autorregressivo Casual Temporal

Os modelos autorregressivos (AR) são construídos para computar previsões fora da amostra para séries de preditor que não sejam séries de destino. Essas previsões de preditor são então usadas para calcular previsões fora da amostra para a série de destino.

Modelo produzido por TemporalCausal

TemporalCausal exporta saídas:

  • um arquivo JSON que contém informações de modelo TemporalCausal
  • um arquivo XML que contém um modelo multisséries

Exemplo de código Python:

from spss.ml.common.wrapper import LocalContainerManager
from spss.ml.forecasting.temporalcausal import TemporalCausal, TemporalCausalAutoRegressiveModel
from spss.ml.forecasting.params.predictor import MaxLag, MaxNumberOfPredictor, Predictor
from spss.ml.forecasting.params.temporal import FieldNameList, FieldSettingsAr, ForecastAr

lcm = LocalContainerManager()
arEstimator = TemporalCausal(lcm). \
    setInputContainerKeys([tsdp.uid]). \
    setTargetPredictorList([Predictor(
        targetList = [["da1", "db1", "m2"]],
        predictorCandidateList = [["da1", "db1", "m1"],
                                  ["da1", "db2", "m1"],
                                  ["da1", "db2", "m2"],
                                  ["da1", "db3", "m1"],
                                  ["da1", "db3", "m2"],
                                  ["da1", "db3", "m3"]])]). \
    setMaxNumPredictor(MaxNumberOfPredictor(False, 5)). \
    setMaxLag(MaxLag("SETTING", 5))

arEstimator.fit(df)

tcmAr = TemporalCausalAutoRegressiveModel(lcm).\
    setInputContainerKeys([arEstimator.uid]).\
    setDataEncoded(True).\
    setOutTargetValues(True). \
    setTargets(FieldSettingsAr(FieldNameList(
        seriesIDList=[["da1", "db1", "m1"],
                      ["da1", "db2", "m2"],
                      ["da1", "db3", "m3"]]))).\
    setForecast(ForecastAr(forecastSpan = 5))

scored = tcmAr.transform(df)
scored.show()

Detecção de Valores Discrepantes Casuais Temporais

Uma das vantagens de construir modelos TCM é a capacidade de detectar valores discrepantes baseados em modelo. A detecção de valores discrepantes refere-se à capacidade de identificar os momentos na série de destino com valores que se afastam muito dos valores esperados (ajustados) com base nos modelos TCM.

Análise de Causa Raiz Causal Temporal

A análise de causa raiz refere-se à capacidade de explorar o gráfico causal Granger para analisar os valores chave/raiz que resultaram no valor discrepante em questão.

Análise de Cenário Causal Temporal

A análise de cenário refere-se a uma capacidade dos modelos TCM para "reproduzir" as repercussões de configurar artificialmente o valor de uma série temporal. Um cenário é o conjunto de previsões feitas através da substituição de valores de uma série temporal raiz por um vetor de valores substitutos.

Resumo Causal Temporal

O Resumo de TCM seleciona os N principais modelos com base em uma medida de qualidade de modelo. Há cinco medidas de qualidade de modelo: Raiz do Erro Quadrático Médio (RMSE), Raiz do Erro de Porcentagem Quadrático Médio (RMSPE), Critério de Informações Bayesiano (BIC), Critério de Informações Akaike (AIC) e R squared (RSQUARE). Tanto N quanto a medida de qualidade de modelo podem ser configurados pelo usuário.

Exploração de séries temporais

A Exploração de Séries Temporais explora as características de dados de séries temporais com base em algumas estatísticas e testes para gerar insights preliminares sobre as séries temporais antes da modelagem. Ela cobre não apenas os métodos analíticos para usuários especialistas (incluindo armazenamento em cluster de séries temporais, teste de raiz da unidade e correlações), mas também fornece um processo de exploração automática com base em um método de decomposição de série temporal simples para usuários de negócios.

Exemplo de código Python:

from spss.ml.forecasting.timeseriesexploration import TimeSeriesExploration

tse = TimeSeriesExploration(). \
    setAutoExploration(True). \
    setClustering(True)

tseModel = tse.fit(data)
predictions = tseModel.transform(data)
predictions.show()

Preparação de Dados Reversos para dados de série temporal

A preparação de Dados Reversos para dados de série temporal (RTSDP) fornece uma funcionalidade que converte o formato baseado em linha compacta (CRB) que é gerado pelo TimeSeriesDataPreperation (TSDP) ou TemporalCausalModel (TCM Score) novamente para o formato multidimensional (FMD) siomples.

Exemplo de código Python:

from spss.ml.common.wrapper import LocalContainerManager
from spss.ml.forecasting.params.temporal import GroupType
from spss.ml.forecasting.reversetimeseriesdatapreparation import ReverseTimeSeriesDataPreparation
from spss.ml.forecasting.timeseriesdatapreparation import TimeSeriesDataPreparation

manager = LocalContainerManager()
tsdp = TimeSeriesDataPreparation(manager). \
    setDimFieldList(["Dimension1", "Dimension2", "Dimension3"]). \
    setMetricFieldList(
    ["Metric1", "Metric2", "Metric3", "Metric4", "Metric5", "Metric6", "Metric7", "Metric8", "Metric9", "Metric10"]). \
    setDateTimeField("TimeStamp"). \
    setEncodeSeriesID(False). \
    setInputTimeInterval("WEEK"). \
    setOutTimeInterval("WEEK"). \
    setMissingImputeType("LINEAR_INTERP"). \
    setQualityScoreThreshold(0.0). \
    setConstSeriesThreshold(0.0). \
    setGroupType(
    GroupType([("Metric1", "MEAN"), ("Metric2", "SUM"), ("Metric3", "MODE"), ("Metric4", "MIN"), ("Metric5", "MAX")]))

tsdpOut = tsdp.transform(changedDF)
rtsdp = ReverseTimeSeriesDataPreparation(manager). \
    setInputContainerKeys([tsdp.uid]). \
    setDeriveFutureIndicatorField(True)

rtdspOut = rtsdp.transform(tsdpOut)