Frage: Ich möchte sicher sein, ob die Verwendung der k-fachen Kreuzvalidierung mit Zeitreihen unkompliziert ist oder ob man vor der Verwendung besondere Aufmerksamkeit schenken muss.
Hintergrund: Ich modelliere eine 6-Jahres-Zeitreihe (mit Semi-Markov-Kette) mit einer Datenerfassung alle 5 Minuten. Um mehrere Modelle zu vergleichen, verwende ich eine 6-fache Kreuzvalidierung, indem ich die Daten in 6 Jahre trenne, sodass meine Trainingssätze (zur Berechnung der Parameter) eine Länge von 5 Jahren und die Testsätze eine Länge von 1 haben Jahr. Da ich die Zeitreihenfolge nicht berücksichtige, sind meine verschiedenen Sets:
- Falte 1: Training [1 2 3 4 5], Test [6]
- Falte 2: Training [1 2 3 4 6], Test [5]
- Falte 3: Training [1 2 3 5 6], Test [4]
- Falte 4: Training [1 2 4 5 6], Test [3]
- Falte 5: Training [1 3 4 5 6], Test [2]
- Falte 6: Training [2 3 4 5 6], Test [1].
Ich gehe davon aus, dass jedes Jahr unabhängig voneinander sind. Wie kann ich das überprüfen? Gibt es Hinweise auf die Anwendbarkeit der k-fachen Kreuzvalidierung mit Zeitreihen?
quelle
Antworten:
Zeitreihen (oder andere in sich geordnete Daten) können für die Kreuzvalidierung problematisch sein. Wenn ein Muster in Jahr 3 auftaucht und für die Jahre 4 bis 6 erhalten bleibt, kann Ihr Modell es aufgreifen, obwohl es nicht Teil der Jahre 1 und 2 war.
Ein Ansatz, der für Zeitreihen mitunter mehr Prinzipien verfolgt, ist die Vorwärtsverkettung, bei der Sie folgendermaßen vorgehen würden:
Dadurch wird die Situation, die Sie zum Vorhersagezeitpunkt sehen, genauer modelliert, wobei Sie frühere Daten und zukunftsgerichtete Daten als Vorhersagen verwenden. Es vermittelt Ihnen auch ein Gefühl für die Abhängigkeit Ihrer Modellierung von der Datengröße.
quelle
Die Methode, die ich zur Kreuzvalidierung meines Zeitreihenmodells verwende, ist die rollierende Kreuzvalidierung. Beginnen Sie mit einer kleinen Datenmenge für Trainingszwecke, prognostizieren Sie sie für die späteren Datenpunkte und überprüfen Sie dann die Genauigkeit für die prognostizierten Datenpunkte. Die gleichen prognostizierten Datenpunkte werden dann als Teil des nächsten Trainingsdatensatzes einbezogen und nachfolgende Datenpunkte werden prognostiziert.
Um die Dinge intuitiv zu machen, hier ein Bild dafür:
Ein äquivalenter R-Code wäre:
quelle
Die "kanonische" Möglichkeit, eine zeitreihenübergreifende Validierung durchzuführen (zumindest wie von @Rob Hyndman beschrieben), besteht darin, den Datensatz zu "durchlaufen".
dh:
Grundsätzlich sollte Ihr Trainingssatz keine Informationen enthalten, die nach dem Testsatz auftreten.
quelle
Damit die Kreuzvalidierung als Modellauswahl-Tool funktioniert, benötigen Sie eine ungefähre Unabhängigkeit zwischen dem Training und den Testdaten. Das Problem bei Zeitreihendaten besteht darin, dass benachbarte Datenpunkte häufig stark abhängig sind, sodass die standardmäßige Kreuzvalidierung fehlschlägt. Hier Abhilfe schaffen Sie, indem Sie zu beiden Seiten des Prüflings eine Lücke zwischen Prüfling und Trainingsmuster lassen . Der Grund, warum Sie auch eine Lücke vor dem Prüfling auslassen müssen, ist, dass die Abhängigkeit symmetrisch ist, wenn Sie sich zeitlich vorwärts oder rückwärts bewegen (denken Sie an die Korrelation).
Wo das h anzeigt, dass h Beobachtungen der Trainingsprobe auf dieser Seite gelöscht werden.
quelle
Wie von @thebigdog kommentiert, "Zur Verwendung der Kreuzvalidierung für die Bewertung von Zeitreihenprädiktoren" von Bergmeir et al. Erläutert die Kreuzvalidierung im Kontext stationärer Zeitreihen und stellt fest, dass die (von anderen Antwortenden vorgeschlagene) Vorwärtsverkettung nicht hilfreich ist. Beachten Sie, dass die Vorwärtsverkettung in diesem Artikel als Last-Block-Evaluierung bezeichnet wird:
" Evaluierung von Zeitreihen-Prognosemodellen: Eine empirische Studie zu Leistungsschätzungsmethoden " von Cerqueira et al. stimmt dieser Einschätzung zu. Für instationäre Zeitreihen wird jedoch empfohlen, stattdessen eine Hold-Out-Variation mit der Bezeichnung Rep-Holdout zu verwenden. In Rep-Holdout wird ein Punkt
a
in der Zeitreihe ausgewähltY
, um den Beginn der Testdaten zu markieren. Der Punkta
soll sich innerhalb eines Fensters befinden. Dies ist in der folgenden Abbildung dargestellt:Diese vorgenannte Veröffentlichung ist lang und testet fast alle anderen in den Antworten auf diese Frage genannten Methoden ausführlich mit öffentlich verfügbarem Code . Dies beinhaltet den Anspruch von @Matthias Schmidtblaicher, Lücken vor und nach den Testdaten zu schließen. Außerdem habe ich nur das Papier zusammengefasst. Der eigentliche Abschluss der Arbeit beinhaltet einen Entscheidungsbaum zur Bewertung von Zeitreihenmodellen!
quelle