Scikit-learn: 時系列データのWalkForwardクロスバリデーターを実装します。

作成日 2019年07月15日  ·  23コメント  ·  ソース: scikit-learn/scikit-learn

説明


トレインセットとテストセットの間にギャップがある時系列データのウォークフォワードcvを実装します。

推測される結果


image

拡大する
image

Needs Decision New Feature

最も参考になるコメント

より良い時系列交差検定を追加することは範囲内だと思います。

全てのコメント23件

@saninsteinなぜギャップなのか?

@clstaudtギャップは、株式取引におけるモデル評価に役立つ機能です。 価格予測では、モデルがトレーニングセットの直後にデータに対して非常に良好に機能し、時間の経過とともに劣化する場合が非常に一般的です。 したがって、場合によっては、トレーニングセットの後に発生した少量の「適切な」データをスキップすると便利なことがあります。

時系列関連の機能に関する私たちの通常の立場は、それがsklearnの範囲外であるということだと思います(少なくとも今のところ)。 そして私にとっては、タイムスタンプなどのサンプルプロパティがデータに添付されたら、問題を再検討することは理にかなっています。

これについて@ scikit-learn / core-devsから少なくとも1つの意見を聞きたいのですが、私の投票は今のところ「修正されない」解決策です。

@adrinjalali sklearnには、

どれ?

@adrinjalalisklearnにすでに実装されているTimeSeriesSplitがあります:)

TimeSeriesSplitは、提案されたWalkForwardCVの特定のケースです( gap=0, expanding=True引数で実現できます)。実際、TimeSeriesSplitはWalkForwardCVに簡単に置き換えることができます(前述のようにデフォルトの引数を設定するだけです)。

私は株取引MLチームの一員であり、さまざまなsklearn機能とsklearn互換ライブラリを正常に使用しています。 適切なCVスプリッターが不足していたため、sklearnに戻すことにしましたが、そうでない場合は、内部で使用します:)

TimeSeriesSplitは、提案されたWalkForwardCVの特定のケースです(gap = 0、expanding = True argsで実現できます)。実際、TimeSeriesSplitはWalkForwardCVに簡単に置き換えることができます(前述のようにデフォルトの引数を設定するだけです)。

公平ですが、必要な機能を追加するために、下位互換性のある方法でTimeSeriesSplitにパッチを適用しようと思います。 また、コミュニティに受け入れられる可能性も高くなります。

WalkForwardCVの場合は、時系列予測だけではありません。 データセットの観測が時間内に順序付けられ、検証を同じ方法で実行する必要がある場合に役立ちます。

たとえば、私たちのタスクの1つは、取引に「許可を与える」mlモデルを使用して既存の取引戦略を改善しようとするときに、取引フィルタリング分類の問題を失うことです。


公平ですが、必要な機能を追加するために、下位互換性のある方法でTimeSeriesSplitにパッチを適用しようと思います。 また、コミュニティに受け入れられる可能性も高くなります。

それが最善の解決策になると思います。

私は時系列予測モデルに取り組んでいるデータサイエンティストです。 時系列固有のものはscikit-learnの範囲外であると想定したため、このスレッドで説明されている方法とは少し異なる独自の検証コードの実装を開始しました。

その後、 TimeSeriesSplitの存在を知り、車輪の再発明を始めたかどうか疑問に思いました。 検証コードを既存の確立されたプロジェクトに提供したいと思います。

このようなモデル評価の需要は明らかなので、どこに当てはまるのだろうか。

時系列の予測に必要なパターンはたくさんあります。 私
たとえば、ウェーブレット機能を作成するトランスフォーマーは
とても便利です。

ただし、これらはscikit-learnの範囲外です。 それは役に立つでしょう
これらすべてを一貫した方法で実装するパッケージを作成します。 それ
おそらく勢いを増すでしょう。

これらすべてを一貫した方法で実装するパッケージを作成すると便利です。 それはおそらく勢いを増すでしょう。

はい。 サインアップしてください。

このようなパッケージをhttps://github.com/scikit-learn-contrib/に用意できれば幸いです

これを閉じてから:)

より良い時系列交差検定を追加することは範囲内だと思います。

#13666#13204#6322#13761も参照してください

スコープに関しては、これを一般的なユースケースに拡張することを受け入れるべきであるという

しかし、 @ amuellerも指摘しているように、実際には、既存のプルリクエストで会話を継続し、それらを快適な状態に移行する必要があります。

もちろんですが、データの実際のタイムスタンプが、単なる行数ではなく、分割(どのIMOである必要があるか)で重要になる場合には注意が必要です。 タイムスタンプをすぐに処理するつもりはないと思いますよね?

https://github.com/scikit-learn/scikit-learn/issues/3202で最初にこれを提案してから5年間で、この質問は、教育や応募の会話で少なくとも50回出てきました。 @saninstein 、ここに含めるか、-contribをプッシュするかを決定しましたか? これを(どこかで)乗り越えるために支援が必要なことがあれば、私は助けたいと思います。

私も貢献したいと思います。 これに関する別の問題を書き、TimeSeriesSplitを拡張するか、そのための別のパッケージの作成に協力したいと考えています。 これはCVドメインの分割に関連するものであり、sklearnに含める必要があると思います。
正直なところ、貢献したいので、どこに行けばいいのか、今何をしたらいいのか、完全に混乱しています。 私は自分の時間を心に留めており、コミュニティのために正しい方法でそれを使用したいと思います。

@mjbommar上記の私と@jnothmanが言っているように、私たちは前進することに非常にオープンであり、いくつかの既存のPR、特に#13761と#13204があり、2つのAPIに関するフィードバックをいただければ幸いです。

#13204が最も成熟しているように見えるので、そこから行くのが最も理にかなっていると思いますか? 応答が遅れていることを考えると、 @ kykosicがまだ作業中であるかどうかは

うーん、#13204はWalkForwardを実装していません...最初に#13204をマージしてから、後でWalkForwardを実装しますか?
それは別のCVオブジェクトである必要がありますか?

@amuellerこの投稿が出るまで、私は#13204について忘れていました。 私は来週にわたってそれに関するレビューに取り組み、それがまだ収まるかどうかを確認します。

@kykosic素晴らしい、ありがとう!

#13204が終了したため、なぜこの問題が解決されたのか知りたい。 #13204がこれの前提条件だと思いました。

13204は、この問題で要求された機能であるgapTimeSeriesSplit追加しました。

このページは役に立ちましたか?
0 / 5 - 0 評価