Kreuzvalidierung für Zeitreihendaten mit Regression

8

Ich bin mit der "regulären" Kreuzvalidierung vertraut, aber jetzt möchte ich Zeitreihenvorhersagen treffen, während ich die Kreuzvalidierung mit einer einfachen linearen Regressionsfunktion verwende. Ich schreibe ein einfaches Beispiel auf, um meine beiden Fragen zu klären: eine zum Zug / Test-Split, eine Frage zum Trainieren / Testen von Modellen, wenn das Ziel darin besteht, für verschiedene n mit n den Vorhersageschritten in vorherzusagen voraus.

(1) Die Daten

Angenommen, ich habe Daten für die Zeitpunkte 1, ..., 10 wie folgt:

timeseries = [0.5,0.3,10,4,5,6,1,0.4,0.1,0.9]

(2) Umwandlung der Daten in ein Format, das für überwachtes Lernen nützlich ist

Soweit ich weiß, können wir "Verzögerungen" verwenden, dh Verschiebungen in den Daten, um einen Datensatz zu erstellen, der für überwachtes Lernen geeignet ist:

input = [NaN,0.5,0.3,10,4,5,6,1,0.4,0.1]
output/response = [0.5,0.3,10,4,5,6,1,0.4,0.1,0.9]

Hier habe ich einfach die Zeitreihen um eins verschoben, um den Ausgabevektor zu erstellen. Soweit ich weiß, könnte ich jetzt die Eingabe als Eingabe für ein lineares Regressionsmodell und die Ausgabe für die Antwort verwenden (das NaN könnte durch einen zufälligen Wert ersetzt werden).

(3) Frage 1: Kreuzvalidierung ("Backtesting")

Angenommen, ich möchte jetzt 2-Splits durchführen. Muss ich sowohl den Zug als auch die Testsätze verschieben?

Dh so etwas wie:

Zugset:

Unabhängige Variable: [NaN, 0,5,0,3,10,4,5]

Ausgabe- / Antwortvariable: [0,5,0,3,10,4,5,6]

Test-Set:

Unabhängige Variable: [1,0.4,0.1]

Ausgabe- / Antwortvariable: [0,4,0,1,0,9]

(ii) Frage 2: Vorhersage verschiedener Verzögerungen im Voraus :

Wie offensichtlich, habe ich mich abhängig von unabhängigen Variablen um 1 verschoben. Angenommen, ich möchte jetzt ein Modell trainieren, das 5 Zeitschritte im Voraus vorhersagen kann - kann ich diese Verzögerung von eins beibehalten und das Modell dennoch verwenden, um n + 1 vorherzusagen , ..., n + 5, ... oder ändere ich die Verschiebung von unabhängiger zu abhängiger Variable auf 5? Was genau ist der Unterschied?

Ferdi
quelle
2
Traditionell würden Sie Zeitreihenmodelle mithilfe eines rollierenden Fensters innerhalb der Stichprobe gegenseitig validieren. In jüngerer Zeit wurden jedoch auch einige andere Ansätze entwickelt. siehe Rob J. Hyndmans Blog-Beitrag "Kreuzvalidierung für Zeitreihen" . Übrigens kann Ihre Frage ein Duplikat einer der früheren Fragen zur Kreuzvalidierung von Zeitreihen sein - siehe diese .
Richard Hardy
Ich verstehe das, aber das rollende Fenster wird sowohl in A als auch in B verwendet. Meine Frage ist eher, ob ich sowohl Zug- als auch Testsätze und Eingabe und einen (verschobenen) Ausgabevektor benötigen würde
Ich glaube nicht, dass meine Frage ein Duplikat ist - zumindest habe ich die Antwort auf meine Frage noch nicht gefunden

Antworten:

11

Für die erste Frage gibt es, wie Richard Hardy betont, einen ausgezeichneten Blog-Beitrag zu diesem Thema. Es gibt auch diesen Beitrag und diesen Beitrag, den ich sehr hilfreich gefunden habe.

Bei der zweiten Frage müssen Sie die beiden grundlegenden Ansätze für die mehrstufige Zeitreihenprognose berücksichtigen: Rekursive Prognose und direkte Prognose:

  • Bei der rekursiven Prognose (auch als iterierte Prognose bezeichnet) trainieren Sie Ihr Modell nur für Prognosen mit einem Schritt voraus. Nach Abschluss des Trainings wenden Sie Ihr endgültiges Modell rekursiv an, um 1 Schritt voraus, 2 Schritte voraus usw. vorherzusagen, bis Sie das gewünschte Ergebnis erreicht habennSchritte prognostizieren Horizont. Dazu geben Sie die Prognose von jedem nachfolgenden Schritt zurück in das Modell, um den nächsten Schritt zu generieren. Dieser Ansatz wird von herkömmlichen Prognosealgorithmen wie ARIMA und Exponential Smoothing-Algorithmen verwendet und kann auch für Prognosen verwendet werden, die auf maschinellem Lernen basieren (siehe diesen Beitrag für ein Beispiel und diesen Beitrag für einige Diskussionen).
  • Direkte Vorhersage ist, wenn Sie für jeden Schritt ein separates Modell trainieren (also versuchen Sie, das "direkt" vorherzusagen nth Schritt voraus anstatt zu erreichen nSchritte rekursiv. Siehe Ben Taied et al. für eine Diskussion über direkte Prognosen und komplexere kombinierte Ansätze.

Beachten Sie, dass Hyndmans Blogbeitrag zur Kreuzvalidierung für Zeitreihen sowohl einen Schritt voraus als auch direkte Prognosen umfasst.


Um die rekursive Vorhersage zu verdeutlichen (basierend auf den Kommentaren):

  1. Zuerst trainierst du dein Modell.
  2. Sobald das Training abgeschlossen ist, nehmen Sie [Y1,Y2,....Yt] berechnen Y^t+1 (Dies ist Ihre Prognose für einen Schritt voraus),
  3. dann benutzt du [Y2,...,Yt,Y^t+1] berechnen Y^t+2, dann [Y3,...,Yt,Y^t+1,Y^t+2] berechnen Y^t+3und so weiter ... bis Sie erreichen Y^t+n.

(Hier Y sind Istwerte und Y^ sind Prognosewerte.)

Skander H.
quelle
Danke auch für die Links! Noch einige Fragen: (1) Wenn ich verstehe, ist die iterative Prognose Verzögerung n = 1, während die direkte Prognose Verzögerung n> 1 ist. Ist das richtig? Wenn ich mein Modell trainiere / teste, bestimmt dies praktisch, wie viel ich in einem überwachten Problem die Zeitreihe verschieben muss (z. B. wenn ich eine Voraussage in 5 Schritten machen möchte, verwende ich die Zeitstempel t-5, um vorherzusagen t)? (2) Sie erwähnen die Verwendung der Vorhersagen zur iterativen Aktualisierung des Modells. Ich denke, dies muss sowohl für die Verzögerung n = 1, n> 5 der Fall sein. Wenn wir jedoch das Modell anwenden, gehe ich davon aus, dass echte eingehende Daten verwendet werden können.
@TestGuest "(1) Wenn ich verstehe, ist die iterative Prognose Verzögerung n = 1, während die direkte Prognose Verzögerung n> 1 ist. Ist dies korrekt? Wenn ich mein Modell trainiere / teste, bestimmt dies praktisch, wie viel ich habe um in einem überwachten Problem die Zeitreihen zu verschieben (z. B. wenn ich eine Voraussage in 5 Schritten machen möchte, verwende ich die Zeitstempel t-5, um t vorherzusagen)? " - Ja richtig .
Skander H.
@TestGuest "(2) Sie erwähnen die Verwendung der Vorhersagen zur iterativen Aktualisierung des Modells. Ich denke, dies muss sowohl für die Verzögerung n = 1, n> 5 der Fall sein. Sobald wir das Modell anwenden, gehe ich jedoch davon aus, dass echte eingehende Daten verwendet werden können ? " - ** Nicht genau. Das Modell wurde in diesem Fall bereits geschult und muss nicht mehr aktualisiert werden. Sie wenden ein bereits trainiertes Modell an - Sie geben die Ausgaben des Modells einfach rekursiv zurück ... [Fortsetzung]
Skander H.
Also zuerst du [Y1,Y2,....Yt] berechnen Y^t+1 (Dies ist Ihre 1-Schritt-Voraus-Prognose), dann verwenden Sie [Y2,...,Yt,Y^t+1] berechnen Y^t+2, dann [Y3,...,Yt,Y^t+1,Y^t+2] berechnen Y^t+3und so weiter, bis Sie erreichen Y^t+n (Hier Y sind Istwerte und Y^sind Prognosewerte.
Skander H.
Vielen Dank! Es erscheint mir jedoch seltsam, die Vorhersagen nicht durch reale Werte zu ersetzen, sobald diese verfügbar sind - wenn das Ziel darin besteht, die bestmöglichen Ergebnisse zu erzielen. Warum ist das so?