2016-10-19 4 views
0

Bei der Modellparameterauswahl führen wir immer eine Gittersuche mit Kreuzvalidierung durch, um zu testen, welche Parameter besser sind als andere.Modellparameterauswahl für Zeitreihendaten

Es ist richtig für allgemeine Trainingsdaten, wie this one, aber wenn Daten Zeit Beziehung miteinander hat, wie verkauft über Tage oder Lager über Tage, ist das falsch, Kreuzvalidierung direkt zu tun?

Als Kreuzvalidierung wird kFold verwendet, die zufällig in Trainingsdaten aufgeteilt wird, was bedeutet, dass für Zeitreihendaten die letzten Tage für das Training an alten Tagen verwendet werden.

Meine Frage ist, wie Parameterauswahl oder Kreuzvalidierung auf Zeitreihendaten zu tun?

Antwort

0

Ja, es ist üblicher, Backtesting oder Rolling Forecasting zu verwenden, in dem Sie entweder die vorherigen N Zeiträume oder alle Zeiträume bis N trainieren und dann die Periode N + k (k> = 1) testen) oder möglicherweise sogar eine Reihe zukünftiger Perioden testen. (z. B. in den letzten 60 Monaten der Daten trainieren und dann die nächsten 12 Monate vorhersagen). Aber die Details hängen wirklich von den Modellen, die Sie verwenden, und der Problemdomäne ab. Rob Hyndman gibt a concrete example, und Sie können viel mehr finden, indem Sie nach "Kaggle Contest Zeitreihen Daten Kreuz Validierung."

In einigen Fällen ist es sinnvoll, einen zufälligen Split stratifiziert nach Zeit durchzuführen. Führen Sie dann das Rollentraining und die CV-Auswertung wie oben beschrieben auf dem Zugsplit durch und führen Sie separat eine Rolltest-Auswertung auf dem Holdout-Test durch.

In einigen Fällen können Sie mit der Durchführung gewöhnlicher zufällig CV weg, wo die Zeit nur ein weiterer Merkmalswert (oft so viele engineered Zeit Funktionen codiert, wie cos(hour_of_day % 24), sin(hour_of_day % 24), cos(hour_of_week % 168), etc.). Dies funktioniert mit Modellen wie XGBoost besser, sodass das Modell die Zeitabhängigkeiten in den Daten erkennen kann, anstatt sie im Zug/Test-Schema zu codieren.

+0

vielen Dank :) Ich frage mich für den zweiten und dritten Absatz: Denkst du manchmal, wir könnten Datumsinformationen ignorieren und direkt cv, obwohl einige Trainingsdaten von Datum hinter Testdatum kommen können? dann in welchen szenarien könnte ich das machen und trotzdem glauben, cv ergebnis? – linpingta

+0

Ich denke, es ist sicher, dies zu tun, wenn alle Beobachtungen vollständig unabhängig sind (aber dann ist es nicht viel von einer Zeitreihe, nur Daten, die zufällig ein Datum-Attribut haben). Wenn die aktuelle Beobachtung in irgendeiner Weise mit früheren Daten in Zusammenhang steht oder davon beeinflusst wird, führt das Ignorieren der Daten zu einem Leck. –