回帰を伴う時系列データの相互検証


8

「通常の」相互検証に精通していますが、単純な線形回帰関数で相互検証を使用しながら時系列予測を行いたいと思います。2つの質問を明確にするために簡単な例を書き留めます。1つはトレーニング/テストの分割について、もう1つは目的が異なるnについて予測することである場合にモデルをトレーニング/テストする方法について1つの質問で、nの予測ステップで、前進。

(1)データ

次のように、タイムポイント1、...、10のデータがあるとします。

timeseries = [0.5,0.3,10,4,5,6,1,0.4,0.1,0.9]

(2)教師あり学習に役立つ形式にデータを変換する

私が理解している限り、「ラグ」、つまりデータのシフトを使用して、教師あり学習に適したデータセットを作成できます。

input = [NaN,0.5,0.3,10,4,5,6,1,0.4,0.1]
output/response = [0.5,0.3,10,4,5,6,1,0.4,0.1,0.9]

ここでは、出力ベクトルを作成するために、時系列を1つずつシフトしています。私が理解している限り、線形回帰モデルの入力として入力を使用し、応答の出力を使用できます(NaNは、ランダムな値に置き換えて近似できます)。

(3)質問1:相互検証(「バックテスト」)

今2スプリットを実行したいのですが、テストセットだけでなく列車もシフトする必要がありますか?

つまり次のようなものです:

列車セット:

独立変数:[NaN、0.5,0.3,10,4,5]

出力/応答変数:[0.5,0.3,10,4,5,6]

テストセット:

独立変数:[1,0.4,0.1]

出力/応答変数:[0.4,0.1,0.9]

(ii)質問2:異なるラグを事前に予測する

明らかなように、従属変数への従属変数を1だけシフトしました。ここで、5つのタイムステップを事前に予測できるモデルをトレーニングしたいとします。このラグを1に保ちながら、モデルを使用してn + 1を予測できます。 、...、n + 5、...または、独立変数から従属変数へのシフトを5に変更しますか?違いは何ですか?


2
従来は、サンプル内のローリングウィンドウを使用して時系列モデルを交差検証していました。しかし、最近、他のいくつかのアプローチも開発されました。Rob J. Hyndmanのブログ投稿「時系列のクロス検証」を参照してください。ところで、あなたの質問は、時系列相互検証に関する以前の質問の1つと重複している可能性があります。これらを参照してください
Richard Hardy

私はそれを理解しますが、ローリング・ウィンドウには、AとBの私の質問の両方で使用されているというである私は電車やテスト・セットと入力し、(シフト)出力ベクトルの両方のために必要ならば

私の質問は重複しているとは思わない-少なくとも私の質問に対する答えはまだ見つかりませんでした

回答:


11

最初の質問については、Richard Hardyが指摘しているように、このトピックに関する優れたブログ投稿があります。あり、この記事この記事、私は非常に役立つ発見しました。

2番目の質問では、複数ステップの時系列予測に対する2つの基本的なアプローチを考慮する必要があります。再帰的予測と直接予測:

  • 再帰的予測(反復予測とも呼ばれる)では、モデルを1ステップ先の予測のみにトレーニングします。トレーニングが完了したら、最終モデルを再帰的に適用して、1ステップ先、2ステップ先などを予測します。nステップは地平線を予測します。これを行うには、連続する各ステップからの予測をモデルにフィードバックして、次のステップを生成します。このアプローチは、(参照ARIMAと指数平滑化アルゴリズムのような伝統的な予測アルゴリズムによって使用され、また、機械学習ベースの予測のために使用することができるこの記事を、例えば、そしてこの後、いくつかの議論のため)。
  • 直接予測とは、ステップごとに個別のモデルをトレーニングすることです(そのため、「直接」予測を試みます nth 到達する代わりに一歩先を行く n再帰的にステップします。Ben Taied et al。を参照してください直接予測とより複雑な組み合わせアプローチについての議論。

時系列の相互検証に関するHyndmanのブログ投稿は、一歩先を行くものと直接予測の両方をカバーしています。


(コメントに基づいて)再帰的予測を明確にするには:

  1. まず、モデルをトレーニングします。
  2. トレーニングが終了したら、 [Y1,Y2,....Yt] 計算する Y^t+1 (これはあなたの一歩先の予測です)、
  3. それからあなたは使う [Y2,...,Yt,Y^t+1] 計算する Y^t+2、その後 [Y3,...,Yt,Y^t+1,Y^t+2] 計算する Y^t+3、など...到達するまで Y^t+n

(ここに Y 実際の値であり、 Y^ は予測値です。)


リンクもありがとう!それでもいくつかの質問:(1)私が理解している場合、反復予測はラグn = 1ですが、直接予測はラグn> 1です。これは正しいですか?実際には、モデルをトレーニング/テストするときに、監視対象の問題で時系列をどれだけシフトする必要があるかを決定します(たとえば、5段階の予測を前もって予測する場合は、タイムスタンプt-5を使用して予測しますt)?(2)モデルを繰り返し更新するために予測を使用することについて言及しましたが、これはラグn = 1、n> 5の両方に当てはまるはずです。しかし、モデルを適用すると、実際の入力データを使用できると思いますか?

@TestGuest "(1)私が理解している場合、反復予測はラグn = 1であり、直接予測はラグn> 1です。これは正しいですか?実際に、モデルをトレーニング/テストしているとき、これはどれだけ持っているかを決定します監視対象の問題を時系列にシフトするには(たとえば、5段階の予測を行いたい場合は、タイムスタンプt-5を使用してtを予測します)?」- はい、正解です。
Skander H.

@TestGuest "(2)モデルを繰り返し更新するために予測を使用することについて言及しましたが、これはラグn = 1、n> 5の両方に当てはまるはずです。しかし、モデルを適用すると、実際の入力データを使用できると想定します? " -**正確ではありません。この場合、モデルはすでにトレーニングされており、更新する必要はありません。既にトレーニング済みのモデルを適用しています-モデルの出力を再帰的にフィードバックするだけです... [続き]
Skander H.

だからまずあなた [Y1,Y2,....Yt] 計算する Y^t+1 (これはあなたの一歩先の予測です)、それからあなたは [Y2,...,Yt,Y^t+1] 計算する Y^t+2、その後 [Y3,...,Yt,Y^t+1,Y^t+2] 計算する Y^t+3、などに到達するまで Y^t+n (ここに Y 実際の値であり、 Y^は予測値です。
Skander H.

ありがとうございました!ただし、可能な限り最良の結果を得ることを目的とする場合、予測が利用可能になり次第、予測を実際の値に置き換えないのは奇妙に思えます。では、なぜですか?再度ありがとう..
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.