SPSS Prognosen mittels Predictive Analytics unter Verwendung von Datenaufbereitung für Zeitreihendaten in Notebooks

Die Datenaufbereitung für Zeitreihendaten (TSDP) bietet die Möglichkeit, Rohzeitdaten (im abgeflachten mehrdimensionalen Format, das sowohl transaktions- (ereignis-)basierte als auch spaltenbasierte Daten umfasst) in reguläre Zeitreihendaten (im kompakten zeilenbasierten Format) umzuwandeln, wie sie für die nachfolgenden Zeitreihenanalysemethoden erforderlich sind.

Die Hauptaufgabe von TSDP besteht darin, Zeitreihen zu generieren, indem die einzelnen Werte in den Dimensionsfeldern mit den Metrikfeldern kombiniert werden. Darüber hinaus sortiert es die Daten anhand des Zeitstempels, extrahiert Metadaten zu Zeitvariablen, wandelt Zeitreihen durch Anwendung einer Aggregations- oder Verteilungsfunktion in eine andere Zeitauflösung (Intervall) um, überprüft die Datenqualität und behandelt bei Bedarf fehlende Werte.

Python Beispielcode:

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

Dies ist die API für die Datums- und Zeitkonvertierung, die dazu dient, bestimmte Funktionen des Datums- und Zeitkonverters innerhalb von TSDP für Anwendungen bereitzustellen. Es gibt zwei Anwendungsfälle für diese Komponente:

  • Berechne die Zeitpunkte zwischen einer angegebenen Start- und Endzeit. In diesem Fall liegen sowohl die Start- als auch die Endzeit nach der ersten Beobachtung in der Ausgabe des vorherigen TSDP.
  • Berechne die Zeitpunkte zwischen einem Startindex und einem Endindex unter Bezugnahme auf die letzte Beobachtung in der Ausgabe des vorherigen TSDP.

Zeitliche Kausalmodellierung

Unter zeitlicher Kausalmodellierung (TCM) versteht man eine Reihe von Methoden, die darauf abzielen, wichtige zeitliche Zusammenhänge in Zeitreihendaten aufzudecken, indem sie eine Kombination aus Granger-Kausalität und Regressionsalgorithmen zur Variablenselektion nutzen.

Python Beispielcode:

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

Zeitliches kausales autoregressives Modell

Autoregressive (AR-)Modelle dienen dazu, Prognosen außerhalb der Stichprobe für Erklärungsvariablen zu erstellen, die nicht die Zielvariablen sind. Diese Vorhersagen der Prädiktoren werden anschließend zur Berechnung von Out-of-Sample-Prognosen für die Zielreihe verwendet.

Modell erstellt von TemporalCausal

TemporalCausal Ausgabe:

  • eine JSON-Datei, die Informationen zum Modell „ TemporalCausal “ enthält
  • eine XML-Datei, die ein Modell mit mehreren Serien enthält

Python Beispielcode:

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

Erkennung zeitlicher kausaler Ausreißer

Einer der Vorteile der Erstellung von TCM-Modellen ist die Möglichkeit, modellbasierte Ausreißer zu erkennen. Unter Ausreißererkennung versteht man die Fähigkeit, jene Zeitpunkte in der Zielreihe zu identifizieren, deren Werte zu stark von den auf der Grundlage der TCM-Modelle erwarteten (angepassten) Werten abweichen.

Zeitliche kausale Ursachenanalyse

Die Ursachenanalyse bezeichnet die Fähigkeit, den Granger-Kausalgraphen zu untersuchen, um die Schlüssel- bzw. Grundwerte zu analysieren, die zu dem betreffenden Ausreißer geführt haben.

Zeitliche Kausalitätsanalyse

Unter Szenarioanalyse versteht man die Fähigkeit von TCM-Modellen, die Auswirkungen einer künstlichen Festlegung des Wertes einer Zeitreihe zu simulieren. Ein Szenario ist die Menge der Prognosen, die durch Ersetzen der Werte einer Basiszeitreihe durch einen Vektor von Ersatzwerten erstellt werden.

Zeitliche Kausalübersicht

TCM Summary wählt die besten N Modelle auf der Grundlage eines Maßstabs für die Modellqualität aus. Es gibt fünf Kennzahlen zur Modellqualität: der quadratische Mittelwertfehler (RMSE), der prozentuale quadratische Mittelwertfehler (RMSPE), das Bayes'sche Informationskriterium (BIC), das Akaike-Informationskriterium (AIC) und das R-Quadrat (RSQUARE). Sowohl N als auch der Maßstab für die Modellqualität können vom Benutzer festgelegt werden.

Erforschung von Zeitreihen

Bei der Zeitreihenanalyse werden die Eigenschaften von Zeitreihendaten anhand verschiedener statistischer Verfahren und Tests untersucht, um vor der Modellierung erste Erkenntnisse über die Zeitreihe zu gewinnen. Es umfasst nicht nur Analysemethoden für erfahrene Anwender (einschließlich Zeitreihen-Clustering, Unit-Root-Tests und Korrelationen), sondern bietet auch einen automatisierten Erkundungsprozess auf Basis einer einfachen Zeitreihenzerlegungsmethode für Geschäftsanwender.

Python Beispielcode:

from spss.ml.forecasting.timeseriesexploration import TimeSeriesExploration

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

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

Umgekehrte Datenaufbereitung für Zeitreihendaten

Die Funktion „Reverse Data Preparation for Time Series Data“ (RTSDP) bietet Funktionen, mit denen das kompakte zeilenbasierte Format (CRB), das von „ TimeSeriesDataPreperation “ (TSDP) oder „ TemporalCausalModel “ (TCM Score) generiert wird, wieder in das abgeflachte multidimensionale Format (FMD) konvertiert werden kann.

Python Beispielcode:

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)