時系列モデルの選択にk分割交差検証を使用する


70

質問: 何かを確認したいのですが、時系列でk分割交差検証を使用するのは簡単ですか、それとも使用する前に特別な注意を払う必要がありますか?

背景: 5年ごとにデータサンプルを使用して、6年の時系列(セミマルコフチェーン)をモデリングしています。複数のモデルを比較するために、6年でデータを分離することにより6倍の交差検証を使用しているため、(パラメーターを計算するための)トレーニングセットの長さは5年、テストセットの長さは1です年。私は時間の順序を考慮していないので、私の異なるセットは次のとおりです。

  • フォールド1:トレーニング[1 2 3 4 5]、テスト[6]
  • フォールド2:トレーニング[1 2 3 4 6]、テスト[5]
  • フォールド3:トレーニング[1 2 3 5 6]、テスト[4]
  • フォールド4:トレーニング[1 2 4 5 6]、テスト[3]
  • フォールド5:トレーニング[1 3 4 5 6]、テスト[2]
  • フォールド6:トレーニング[2 3 4 5 6]、テスト[1]。

毎年独立しているという仮説を立てています。どうすればそれを確認できますか?時系列とのk分割交差検証の適用性を示す参考文献はありますか。


私はhelfulたこの記事で、見てくださいfrancescopochetti.com/...を
Henok S Mengistuは

回答:


69

時系列(またはその他の本質的に順序付けられたデータ)は、相互検証に問題があります。3年目に何らかのパターンが出現し、4年目から6年目まで続く場合、モデルは1年目と2年目の一部ではありませんが、それを拾うことができます。

時系列でより原則的なアプローチは、フォワードチェーンです。この場合、手順は次のようになります。

  • フォールド1:トレーニング[1]、テスト[2]
  • フォールド2:トレーニング[1 2]、テスト[3]
  • フォールド3:トレーニング[1 2 3]、テスト[4]
  • フォールド4:トレーニング[1 2 3 4]、テスト[5]
  • フォールド5:トレーニング[1 2 3 4 5]、テスト[6]

これにより、予測時に表示される状況がより正確にモデル化され、過去のデータをモデル化し、将来のデータを予測します。また、モデリングがデータサイズに依存しているという感覚も得られます。


1
ありがとう。ザックが言ったように、それはそれを行うための標準的な方法だと理解しています。そして、私はその理由を理解しています。それに伴う問題は、データサイズの変動を考慮に入れるという事実です。したがって、モデルの「真の」一般化エラーは発生しません。しかし、混合エラー:一般化とデータサイズ。時系列で相互検証を処理する他の参照(M.Hyndman以外)を知っていますか?誤解しないでください。あなたが言っていることやM.ハインドマンが言っていることを信用していないわけではありません。私は単純に問題についていくつかの視点を持っているのが好きです
ミカエルS

私はそのような参照を知らないのではないかと思うが、誰かがそれを知っているなら、私はそれを見たいと思うだろう。
ケンウィリアムズ

1
@ウェイン、私はこのソリューションが各フォールドでますます長年のトレーニングデータを使用することを意味します。私のデータでは、年によって間違いなく違いがありますが、明らかな傾向や季節性はありません。
ミカエルS

3
@Mickael:fold 1を使用できます:train [1 2] test [3]; フォールド2:トレーニング[2 3]テスト[4]; フォールド3:各フォールドでより多くのデータを使用することが心配な場合は、トレーニング[3 4]テスト[5]など。私の推測では、セミMCテクニックでは、トレンドがなくても何年もスクランブルすることはできません。
ウェイン

3
@MickaëlS:この論文をsciencedirect.com/science/article/pii/S0020025511006773で見つけて、興味があると思いました。彼らは、この「標準的な」アプローチを他の2つの方法と比較しています-「ブロックブーストラップ」と「除外」アプローチ。
thebigdog

26

時系列モデルの相互検証に使用する方法は、ローリングベースの相互検証です。トレーニング目的のデータの小さなサブセットから始め、後のデータポイントを予測し、予測されたデータポイントの精度を確認します。次に、同じ予測データポイントが次のトレーニングデータセットの一部として含まれ、後続のデータポイントが予測されます。

物事を直感的にするために、同じ画像を示します:

ここに画像の説明を入力してください

同等のRコードは次のとおりです。

i <- 36    #### Starting with 3 years of monthly training data 
pred_ets <- c()
pred_arima <- c()
while(i <= nrow(dt)){
  ts <- ts(dt[1:i, "Amount"], start=c(2001, 12), frequency=12)

  pred_ets <- rbind(pred_ets, data.frame(forecast(ets(ts), 3)$mean[1:3]))
	  pred_arima <- rbind(pred_arima, data.frame(forecast(auto.arima(ts), 3)$mean[1:3]))

  i = i + 3
}
names(pred_arima) <- "arima"
names(pred_ets) <- "ets"

pred_ets <- ts(pred_ets$ets, start=c(2005, 01), frequency = 12)
	pred_arima <- ts(pred_arima$arima, start=c(2005, 01), frequency =12)

accuracy(pred_ets, ts_dt)
accuracy(pred_arima, ts_dt)

Rを使用したロジスティック回帰などの方法でこれを行う方法はありますか?
hlyates

1
@hlyates、私の理解では、上記のコードを少し変更するだけで可能です。pred_lr(ロジスティック回帰による予測)を含め、それに応じて列の名前を変更します。
ジャティンガーグ

22

(少なくとも@Rob Hyndmanによって説明れているように)時系列の相互検証を行う「標準的な」方法は、データセットを「ロール」することです。

すなわち:

  • フォールド1:トレーニング[1]、テスト[2]
  • フォールド2:トレーニング[1 2]、テスト[3]
  • フォールド3:トレーニング[1 2 3]、テスト[4]
  • フォールド4:トレーニング[1 2 3 4]、テスト[5]
  • フォールド5:トレーニング[1 2 3 4 5]、テスト[6]

基本的に、トレーニングセットにはテストセットの後に発生する情報を含めないでください。


13

ほとんどの場合、時系列の相互検証に「将来の」データのブロックを使用しても問題はありません。ほとんどの場合、定常データのモデルを参照します。これは通常使用するモデルです。あなたが合うときなどはと、シリーズには、あなたが取るシリーズの違いを残差に静止したデータのためのモデルに適合します。d > 0 dARIMA(p,d,q)d>0d

クロス検証がモデル選択ツールとして機能するためには、トレーニングとテストデータの間のおおよその独立性が必要です。時系列データの問題は、多くの場合、隣接するデータポイントが非常に依存しているため、標準の相互検証が失敗することです。これに対する解決策は、テストサンプルの両側で、テストサンプルとトレーニングサンプルの間にギャップ残すことです。また、テストサンプルの前にギャップを残す必要があるのは、時間を前後に移動するときに依存関係が対称的であるためです(相関関係を考える)。

このアプローチはクロスバリデーションと呼ばれ(除外し、テストサンプルのいずれかの側で観測値を削除します)、このホワイトペーパーで説明します。あなたの例では、これは次のようになります。v hhvvh

  • フォールド1:トレーニング[1 2 3 4 5h]、テスト[6]
  • フォールド2:トレーニング[1 2 3 4h h6]、テスト[5]
  • フォールド3:トレーニング[1 2 3h h5 6]、テスト[4]
  • フォールド4:トレーニング[1 2h h4 5 6]、テスト[3]
  • フォールド5:トレーニング[1h h3 4 5 6]、テスト[2]
  • フォールド6:トレーニング[h2 3 4 5 6]、テスト[1]

hは、トレーニングサンプルのh個の観測がその側で削除されることを示します。


3

@thebigdogがコメントしたように、「時系列予測子評価のための交差検証の使用について」Bergmeir et al。定常時系列のコンテキストでの交差検証について説明し、(他の回答者によって提案された)フォワードチェーンが役に立たないと判断します。このペーパーでは、フォワードチェーンは最終ブロック評価と呼ばれます。

標準の5倍交差検証を使用しても、最終的なエラーが過小評価されているか過大評価されているかに関して、データ内の依存関係の実際的な効果は見つかりませんでした。それどころか、最後のブロック評価では、交差検証やブロック交差検証よりも堅牢なエラー測定値が得られない傾向があります。

時系列予測モデルの評価:性能推定方法に関する実証的研究」Cerqueira et al。この評価に同意します。ただし、非定常時系列の場合は、Rep-Holdoutと呼ばれるホールドアウトのバリエーションを代わりに使用することをお勧めします。Rep-Holdoutでは、テストデータの開始を示すポイントaが時系列で選択されYます。ポイントaはウィンドウ内にあると判断されます。これを次の図に示します。

担当者ホールドアウトの図

この前述の論文は長く、この質問への回答で言及された他のほとんどすべてのメソッドを公的に利用可能なコードで徹底的にテストします。これには、テストデータの前後にギャップを含めるという@Matthias Schmidtblaicherの主張が含まれます。また、私は論文を要約しただけです。論文の実際の結論には、時系列モデルを評価するための決定木が含まれます!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.