SPSS Previsiones mediante análisis predictivo con preparación de datos de series temporales en cuadernos

La preparación de datos para series temporales (TSDP) ofrece la funcionalidad necesaria para convertir datos temporales sin procesar (en formato multidimensional aplanado, que incluye datos basados en transacciones [eventos] y datos basados en columnas) en datos de series temporales estándar (en formato compacto basado en filas), tal y como requieren los métodos de análisis de series temporales posteriores.

La función principal de TSDP es generar series temporales a partir de la combinación de cada valor único de los campos de dimensión con los campos de métrica. Además, ordena los datos según la marca de tiempo, extrae los metadatos de las variables temporales, transforma las series temporales con otra granularidad temporal (intervalo) mediante la aplicación de una función de agregación o distribución, comprueba la calidad de los datos y gestiona los valores perdidos si es necesario.

Python código de ejemplo:

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 es la API del conversor de fecha y hora que se utiliza para proporcionar algunas de las funcionalidades del conversor de fecha y hora integrado en TSDP, de modo que las aplicaciones puedan utilizarlas. Hay dos casos de uso para este componente:

  • Calcula los puntos temporales entre una hora de inicio y una hora de fin especificadas. En este caso, tanto la hora de inicio como la de finalización se producen después de la primera observación de la salida del TSDP anterior.
  • Calcula los puntos temporales entre un índice inicial y un índice final tomando como referencia la última observación de la salida del TSDP anterior.

Modelización causal temporal

El modelado causal temporal (TCM) hace referencia a un conjunto de métodos que tratan de descubrir relaciones temporales clave en datos de series temporales mediante una combinación de la causalidad de Granger y algoritmos de regresión para la selección de variables.

Python código de ejemplo:

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 autorregresivo causal temporal

Los modelos autorregresivos (AR) se diseñan para calcular previsiones fuera de la muestra para series predictoras que no son series objetivo. A continuación, estas previsiones de los predictores se utilizan para calcular las previsiones fuera de la muestra de la serie objetivo.

Modelo creado por TemporalCausal

TemporalCausal resultados de las exportaciones:

  • un archivo JSON que contiene información sobre el modelo « TemporalCausal »
  • un archivo XML que contiene un modelo con varias series

Python código de ejemplo:

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()

Detección de valores atípicos causales temporales

Una de las ventajas de crear modelos TCM es la capacidad de detectar valores atípicos basados en el modelo. La detección de valores atípicos se refiere a la capacidad de identificar los puntos temporales de la serie objetivo cuyos valores se alejan demasiado de los valores esperados (ajustados) según los modelos TCM.

Análisis temporal de las causas fundamentales

El análisis de las causas fundamentales se refiere a la capacidad de explorar el gráfico causal de Granger con el fin de analizar los valores clave o fundamentales que dieron lugar al valor atípico en cuestión.

Análisis de escenarios causales temporales

El análisis de escenarios se refiere a la capacidad de los modelos TCM para «simular» las repercusiones que tiene el establecimiento artificial del valor de una serie temporal. Un escenario es el conjunto de previsiones que se obtienen sustituyendo los valores de una serie temporal original por un vector de valores sustitutivos.

Resumen causal temporal

El resumen de TCM selecciona los N mejores modelos basándose en un indicador de calidad de los modelos. Existen cinco medidas de calidad del modelo: el error cuadrático medio (RMSE), el error porcentual cuadrático medio (RMSPE), el criterio de información bayesiano (BIC), el criterio de información de Akaike (AIC) y la R cuadrada (RSQUARE). Tanto N como la medida de calidad del modelo pueden ser configuradas por el usuario.

Exploración de series temporales

La exploración de series temporales analiza las características de los datos de series temporales basándose en una serie de estadísticas y pruebas, con el fin de obtener una visión preliminar de las series temporales antes de proceder a su modelización. No solo abarca métodos analíticos para usuarios expertos (como la agrupación de series temporales, la prueba de raíz unitaria y las correlaciones), sino que también ofrece un proceso de exploración automática basado en un sencillo método de descomposición de series temporales para usuarios empresariales.

Python código de ejemplo:

from spss.ml.forecasting.timeseriesexploration import TimeSeriesExploration

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

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

Preparación inversa de datos para series temporales

La preparación inversa de datos para datos de series temporales (RTSDP) proporciona una funcionalidad que convierte el formato compacto basado en filas (CRB) generado por TimeSeriesDataPreperation (TSDP) o TemporalCausalModel (TCM Score) de nuevo al formato multidimensional plano (FMD).

Python código de ejemplo:

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)