Scikit-learn: Implementieren Sie den WalkForward-Kreuzvalidator für Zeitreihendaten.

Erstellt am 15. Juli 2019  ·  23Kommentare  ·  Quelle: scikit-learn/scikit-learn

Beschreibung


Implementieren Sie den Walk-Forward-Cv für Zeitreihendaten mit einer Lücke zwischen dem Zugverband und dem Testsatz.

erwartete Ergebnisse


image

Erweitern
image

Needs Decision New Feature

Hilfreichster Kommentar

Ich denke, dass das Hinzufügen einer besseren Zeitreihen-Kreuzvalidierung im Umfang liegt.

Alle 23 Kommentare

@saninstein Warum die Lücke?

@clstaudt Gap ist ein nützliches Feature für die

Ich denke, unsere übliche Position zu zeitreihenbezogenen Funktionen ist, dass sie (zumindest im Moment) nicht für Sklearn geeignet sind. Und für mich wäre es sinnvoll, die Angelegenheit noch einmal zu prüfen, sobald wir Beispieleigenschaften wie den Zeitstempel an die Daten angehängt haben.

Ich hätte gerne mindestens eine andere Meinung von @scikit-learn/core-devs dazu, aber meine Stimme ist vorerst eine "wird nicht behoben".

@adrinjalali sklearn hat schon die vielen guten Modelle für Zeitreihen,

Welche?

@adrinjalali gibt es TimeSeriesSplit welche bereits in sklearn implementiert sind :)

TimeSeriesSplit ist ein spezieller Fall des vorgeschlagenen WalkForwardCV (kann mit gap=0, expanding=True args erreicht werden), tatsächlich kann TimeSeriesSplit leicht durch WalkForwardCV ersetzt werden (setze einfach die Standardargumente, wie ich zuvor erwähnt habe).

Ich bin Teil des ML-Teams für den Aktienhandel und wir verwenden erfolgreich verschiedene sklearn-Funktionen und sklearn-kompatible Bibliotheken. Es fehlte ein richtiger CV-Splitter und wir haben uns entschieden, ihn wieder an sklearn beizutragen, aber wenn dies nicht der Fall ist, werden wir ihn intern verwenden :)

TimeSeriesSplit ist ein spezieller Fall der vorgeschlagenen WalkForwardCV (kann mit gap=0, expand=True args erreicht werden), tatsächlich kann TimeSeriesSplit leicht durch WalkForwardCV ersetzt werden (setze einfach die Standardargumente, wie ich zuvor erwähnt habe).

Fair, aber dann würde ich wahrscheinlich versuchen, TimeSeriesSplit abwärtskompatibel zu patchen, um die benötigte Funktion hinzuzufügen. Das hat auch eine höhere Chance, von der Community akzeptiert zu werden.

Zeitreihenvorhersage ist nicht der einzige Fall für WalkForwardCV. Dies ist nützlich, wenn die Datensatzbeobachtung zeitlich geordnet ist und die Validierung auf die gleiche Weise erfolgen muss.

Eine unserer Aufgaben besteht zum Beispiel darin, das Filterklassifizierungsproblem von Trades zu verlieren, wenn wir versuchen, die bestehende Handelsstrategie mit dem ml-Modell zu verbessern, das "die Erlaubnis zum Handel erteilt".


Fair, aber dann würde ich wahrscheinlich versuchen, TimeSeriesSplit abwärtskompatibel zu patchen, um die benötigte Funktion hinzuzufügen. Das hat auch eine höhere Chance, von der Community akzeptiert zu werden.

Ich glaube, es wäre die beste Lösung.

Ich bin Data Scientist und arbeite an Zeitreihenprognosemodellen. Ich ging davon aus, dass zeitreihenspezifische Dinge für scikit-learn nicht in Frage kommen, also begann ich, meinen eigenen Validierungscode zu implementieren, der sich leicht von der in diesem Thread beschriebenen Methode unterscheidet.

Später erfuhr ich von der Existenz von TimeSeriesSplit und fragte mich, ob ich damit begonnen habe, das Rad neu zu erfinden. Ich würde es vorziehen, den Validierungscode zu einem bestehenden, etablierten Projekt beizutragen.

Da es eindeutig einen Bedarf für diese Art der Modellbewertung gibt, frage ich mich immer noch, wo das hingehört.

Es gibt viele Muster, die für die Vorhersage von Zeitreihen benötigt werden. ich
würde zum Beispiel denken, dass ein Transformator, der Wavelet-Features erstellt,
sehr nützlich sein.

Diese liegen jedoch außerhalb des Rahmens von scikit-learn. Es wäre nützlich
ein Paket zu erstellen, das all dies in einer konsistenten Weise umsetzt. Es
würde wohl Fahrt aufnehmen.

Es wäre sinnvoll, ein Paket zu erstellen, das all dies auf konsistente Weise implementiert. Es würde wahrscheinlich Fahrt aufnehmen.

Jawohl. Melden Sie mich an.

Wir würden uns freuen, ein solches Paket in https://github.com/scikit-learn-contrib/ zu haben.

Schließe diese dann :)

Ich denke, dass das Hinzufügen einer besseren Zeitreihen-Kreuzvalidierung im Umfang liegt.

Siehe auch #13666 #13204 #6322 #13761

In Bezug auf den Umfang stimme ich

Aber wie @amueller auch

Sicher, aber ich bin vorsichtig mit Fällen, in denen der tatsächliche Zeitstempel der Daten bei der Aufteilung eine Rolle spielen sollte (was IMO sollte) und nicht die bloße Anzahl der Zeilen. Ich glaube nicht, dass wir so schnell mit den Zeitstempeln umgehen werden, oder?

In den 5 Jahren, seit ich dies zum ersten Mal in https://github.com/scikit-learn/scikit-learn/issues/3202 vorgeschlagen habe, ist diese Frage mindestens 50 Mal in Gesprächen zum Unterrichten oder Bewerben aufgetaucht. @saninstein , haben Sie sich entschieden, ob Sie hier auf die Aufnahme drängen oder -contrib? Ich würde gerne helfen, wenn Sie Hilfe benötigen, um dies (irgendwo) über die Linie zu bringen.

Ich möchte auch gerne dazu beitragen. Hat in einer anderen Ausgabe darüber geschrieben und möchte TimeSeriesSplit erweitern oder an der Erstellung eines weiteren Pakets dafür mitarbeiten. Ich bin der Meinung, dass dies etwas mit Aufspaltungen im Lebenslauf zu tun hat und in sklearn sein sollte.
Um ehrlich zu sein, bin ich jedoch völlig verwirrt, wohin ich gehen und was ich jetzt tun soll, da ich einen Beitrag leisten möchte. Ich achte auf meine Zeit und möchte sie für die Gemeinschaft richtig nutzen.

@mjbommar Ich denke, wie ich und @jnothman oben gesagt haben, sind wir ziemlich offen für die

Ich denke, #13204 scheint am ausgereiftesten zu sein, also ist es vielleicht am sinnvollsten, von dort aus zu gehen? Ich bin mir nicht sicher, ob @kykosic angesichts der Verzögerung unserer Antwort noch daran arbeitet?

Hm, obwohl #13204 WalkForward nicht implementiert... Wollen wir #13204 zuerst zusammenführen und dann WalkForward später implementieren?
Sollte das ein separates CV-Objekt sein?

@amueller Ich hatte #13204 vergessen, bis dieser Beitrag auftauchte. Ich werde die Rezensionen dazu in der nächsten Woche ansprechen und sehen, ob es noch passt.

@kykosic super , danke!

Neugierig, warum dieses Problem geschlossen wurde, weil #13204 fertiggestellt wurde. Ich dachte, dass #13204 eine Voraussetzung dafür ist.

13204 fügte gap zu TimeSeriesSplit , was die von diesem Problem angeforderte Funktion war.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen