Endgültiges Modell aus der Kreuzvalidierung von Zeitreihen


10

Ich habe bereits Erfahrungen mit der "normalen" K-fachen Kreuzvalidierung für die Modelloptimierung gesammelt und bin durch die Anwendung in Zeitreihenmodellen leicht verwirrt.

Nach meinem Verständnis ist die Folge für die Kreuzvalidierung für Zeitreihenmodelle das von Hyndman beschriebene Verfahren des "Rolling Forward Origin" . Dies ist für mich sehr sinnvoll und der folgende Code demonstriert die Verwendung der tsCVFunktion in R aus Hydmans Blog , um zu zeigen, wie sich die Fehler vom Lebenslauf im Vergleich zum gesamten Datensatz auf einmal unterscheiden.

library(fpp)
e <- tsCV(dj, rwf, drift=TRUE, h=1)
sqrt(mean(e^2, na.rm=TRUE))
## [1] 22.68249
sqrt(mean(residuals(rwf(dj, drift=TRUE))^2, na.rm=TRUE))
## [1] 22.49681

In diesem Link oben wird nun erwähnt, dass der Driftparameter bei jedem neuen Prognoseursprung neu geschätzt wird. Im "normalen" Lebenslauf hätte ich ein Raster von Parametern, die ich für jede Falte auswerten würde, damit ich einen Durchschnitt erhalten könnte, um die besten zu verwendenden Parameter zu bestimmen. Ich würde dann diese 'besten' Parameter verwenden, um sie an den vollständigen Trainingssatz anzupassen, und diese als mein endgültiges Modell verwenden, um meinen zuvor durchgeführten Testsatz zu bewerten. Beachten Sie, dass dies eine verschachtelte Kreuzvalidierung ist, sodass ich zu keinem Zeitpunkt an meinem Testsatz trainiere.

Dies ist eindeutig nicht der Fall mit dem ‚rollend nach vorn Ursprung‘ Verfahren , bei dem die Parameter für jeden Falte optimiert sind (zumindest für die R - Methoden wie bats, tbats, auto.arima, etc.). Irre ich mich, über diese Methode bei der Optimierung von Modellparametern nachzudenken, oder wie würde ich die Zeitreihenmodellparameter auswählen, die für das endgültige Modell festgelegt werden sollen, das verwendet werden soll? Oder ist die Parameteroptimierung kein Problem bei Zeitreihenmodellen, bei denen die Optimierung Teil der Modellanpassung zu sein scheint und das Ergebnis des Lebenslaufs darin besteht, nur zu sagen, wie gut jedes Modell insgesamt abschneidet? Und dass das endgültige Modell, das am Ende mit den meisten Daten erstellt wurde, das Modell ist, das ich verwenden würde?

Mir ist klar, dass dies in einer noch einfacheren Frage umformuliert werden kann. Nach der Kreuzvalidierung ("Rolling Forward Origin") verwende ich nur das zuletzt gebaute Modell (mit der größten Obermenge als endgültig angepasstem Modell? Oder was wird vorgeschlagen?


Vor der tsCV-Funktion habe ich eine ähnliche Funktion erstellt, die während der Kreuzvalidierung nichts neu trainiert oder neu geschätzt hat. Neugierig, ob das, was ich getan habe, falsch war oder nicht.
DataJack

Antworten:


1

Sie können den rollierenden Vorwärtsursprung mit der k-fachen Kreuzvalidierung kombinieren (auch bekannt als Backtesting mit Kreuzvalidierung). Bestimmen Sie die Falten einmal im Voraus und durchlaufen Sie bei jeder Rollzeit die k Falten, trainieren Sie auf k-1 und testen Sie auf k. Durch die Vereinigung aller durchgehaltenen Testfalten erhalten Sie eine vollständige Abdeckung des gesamten Datensatzes zu diesem Zeitpunkt, und die Zugfalten decken den Datensatz zu diesem Zeitpunkt k-1 Mal ab, die Sie auf jede geeignete Weise aggregieren können (z. B. Mittelwert) ). Bewerten Sie dann Zug und Test separat, wie Sie es normalerweise tun würden, um die separaten Zug- / Testergebnisse zu diesem Zeitpunkt zu erhalten.

Erstellen Sie beim Optimieren von Parametern zuerst einen separaten Holdout-Satz und führen Sie dann die soeben beschriebene Kreuzvalidierung nur für die verbleibenden Daten durch. Für jeden zu optimierenden Parameter müssen Sie entscheiden, ob dieser Parameter zeitunabhängig (damit Sie die Optimierung über alle Rollzeiten durchführen können) oder zeitabhängig ist (sodass der Parameter zu jedem Zeitpunkt separat optimiert wird). In letzterem Fall können Sie den Parameter als Funktion der Zeit (möglicherweise linear) darstellen und dann die zeitunabhängigen Koeffizienten dieser Funktion über alle Zeiten optimieren.


0

Wenn Sie die Parameter für die Testdaten optimiert haben, passen Sie Ihre Daten teilweise an Testdaten an, anstatt an Trainingsdaten. Sie möchten wissen, welche Methode am besten für zurückgehaltene Daten geeignet ist, nicht beispielsweise, auf was ein Gamma in einem Holt Winters-Modell eingestellt werden soll.


Sie haben Recht, aber Ihr Kommentar lässt mich erkennen, dass ich nicht gesagt habe, dass diese Situation eine verschachtelte Kreuzvalidierung wäre, sodass die Modelle nicht auf dem Hold-Out-Test-Set trainiert werden. Ich spreche sowohl von der Parameteroptimierung an sich (z. B. einer einzelnen Methode) als auch von der verschachtelten Optimierung / Modellauswahl.
Determin

Angenommen, ich habe die Kreuzvalidierung abgeschlossen und Holt Winters hat gewonnen. Passe ich den vollständigen Datensatz erneut an, um das Gamma für das endgültige Modell zu erhalten?
Cdeterman
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.