La preparación de datos para los datos de series temporales (TSDP) proporciona la función para convertir datos temporales sin formato (en formato multidimensional simplificado, que incluye datos basados en transacciones (sucesos) y basados en columnas) en datos de series de temporales regulares (en formato compacto basado en filas) que son necesarios para los métodos de análisis de series temporales posteriores.
El trabajo principal de TSDP es generar series temporales relativos a la combinación de cada valor exclusivo de los campos de dimensiones con los campos de métricas. Además, clasifica los datos en función de la indicación de fecha y hora, extrae metadatos de variables de tiempo, transforma series temporales con otra granularidad de tiempo (intervalo) aplicando una función de agregación o distribución, comprueba la calidad de los datos y maneja los valores que faltan, si es necesario.
Código de ejemplo de 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 es la API de conversor de fecha/hora que se utiliza para proporcionar algunas funcionalidades del conversor de fecha/hora dentro de TSDP para que las utilicen las aplicaciones. Hay dos casos de uso para este componente:
- Calcular los puntos temporales entre una hora de inicio y finalización especificadas. En este caso, la hora de inicio y de finalización se generan después de la primera observación en la salida del TSDP anterior.
- Calcular los puntos temporales entre un índice de inicio y un índice final que hacen referencia a la última observación de la salida del TSDP anterior.
Modelado causal temporal
El modelado causal temporal (TCM) se refiere a un conjunto de métodos que intentan descubrir las relaciones temporales clave en los datos de series temporales utilizando una combinación de causalidad de Granger y algoritmos de regresión para la selección de variables.
Código de ejemplo de 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 autorregresivo causal temporal
Los modelos autorregresivos (AR) se crean para calcular previsiones fuera de muestra para series de predictor que no son series de destino. A continuación, estas previsiones de predictor se utilizan para calcular previsiones fuera de la muestra para la serie de destino.
Modelo generado por TemporalCausal
Salidas de las exportaciones TemporalCausal:
- un archivo JSON que contiene información del modelo TemporalCausal
- un archivo XML que contiene un modelo de varias series
Código de ejemplo de 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()
Detección de valores atípicos Causales temporales
Una de las ventajas de crear modelos TCM es la posibilidad de detectar valores atípicos basados en modelos. La detección de valores atípicos hace referencia a la función de identificar los puntos temporales de la serie de destino con valores que se alejan demasiado de sus valores previstos (ajustados), en función de los modelos TCM.
Análisis de causa raíz causal temporal
El análisis de causa raíz hace referencia a la función de exploración del gráfico causal de Granger con el fin de analizar los valores de clave/raíz que han generado el valor atípico en cuestión.
Análisis de escenarios causales temporales
El análisis de escenarios hace referencia a una capacidad de los modelos de TCM para "reproducir" las repercusiones de establecer artificialmente el valor de una serie temporal. Un escenario es el conjunto de previsiones que se realizan sustituyendo los valores de una serie temporal raíz por un vector de valores de sustitución.
Resumen de causal temporal
El resumen de TCM selecciona los N modelos principales en función de una medida de calidad de modelo. Hay cinco medidas de calidad de modelo: Error cuadrático promedio raíz (RMSE), Error de porcentaje de cuadrático promedio raíz (RMSPE), Criterio de información bayesiano (BIC), Criterio de información de Akaike (AIC) y R cuadrado (RSQUARE). El usuario puede establecer tanto N como la medida de calidad del modelo.
Exploración de series temporales
La Exploración de series temporales explora las características de los datos de series temporales basándose en algunas estadísticas y pruebas para generar conocimientos preliminares sobre las series temporales antes del modelado. No solo abarca los métodos analíticos para los usuarios expertos (incluida la agrupación en clústeres de series temporales, la prueba de raíz unitaria y las correlaciones), sino que también proporciona un proceso de exploración automática basado en un método de descomposición de series temporales simples para usuarios empresariales.
Código de ejemplo de Python:
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 de datos inversos para datos de series temporales
La preparación de datos inversos para datos de series temporales (RTSDP) proporciona una funcionalidad que convierte el formato basado en fila compacta (CRB) generado por TimeSeriesDataPreperation (TSDP) o TemporalCausalModel (Puntuación de TCM) de nuevo al formato de multidimensional simplificado (FMD).
Código de ejemplo de 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)
import com.ibm.spss.ml.forecasting.traditional.TimeSeriesForecastingModelReEstimate
val tsdp = TimeSeriesDataPreparation().
setDimFieldList(Array("da", "db")).
setMetricFieldList(Array("metric")).
setDateTimeField("date").
setEncodeSeriesID(false).
setInputTimeInterval("MONTH").
setOutTimeInterval("MONTH")
val lcm = LocalContainerManager()
lcm.exportContainers("k", tsdp.containers)
val reestimate = TimeSeriesForecastingModelReEstimate(lcm).
setForecast(ForecastEs(outForecast = true, forecastSpan = 4, outCI = true)).
setFitSettings(Fit(outFit = true, outCI = true, outResidual = true)).
setOutInputData(true).
setInputContainerKeys(Seq("k"))
val rtsdp = ReverseTimeSeriesDataPreparation(tsdp.manager).
setInputContainerKeys(List(tsdp.uid)).
setDeriveFutureIndicatorField(true)
val pipeline = new Pipeline().setStages(Array(tsdp, reestimate, rtsdp))
val scored = pipeline.fit(data).transform(data)
scored.show()
Tema principal: SPSS algoritmos de análisis predictivo