機械学習を使用した複数の期間の予測


9

私は最近、時系列の知識を要約しましたが、機械学習はほとんど一歩先の予測しか与えないことに気付きました。

一段先の予測我々は時間単位のデータを持っている場合は、午前12時などの予測午前11時と11時まで午前10時からのデータを使用して、例えば、I平均予測

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

機械学習の方法でh-steps-aheadの予測を作成できますか?h-step-ahead予測では、たとえば、毎時のデータを想定して、午前10時からのデータを使用して7-step-ahead予測を行い、11、12、13、14、15、16、17の推定値を取得します。 o時計。

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

私の主な質問に関連して私は思います:

  • h-ahead-ahead予測を行うために機械学習を使用している人を見かけない理由は何ですか?
  • 機械学習を使用する方法がある場合、それはARIMAよりも正確ですか?

回答:


7

(これの一部は以前の私の投稿から取られたものです まず、マルチステップ時系列予測を実行する2つの異なる方法を区別する必要があります:再帰的予測と直接予測:

  • n
  • nthn

次に、主な質問に答えます。

機械学習の方法でh-steps-aheadの予測を作成できますか?

はいMLメソッドは可能であり、再帰的および直接的なマルチステップ予測の両方を使用して、hステップ先予測を生成できます。それだけでなく、直接の多段階予測では、ARIMAや指数平滑法などの従来のモデルよりも実際に適しています。ただし、直接マルチステップ予測の場合は、予測するh-ステップを事前に指定し、それに応じてモデルをトレーニングする必要があります。再帰的予測の場合は、必要な将来の任意の数のステップにモデルを使用できます。 。

さらに、Chevillon&Hendryは、直接的なマルチステップ予測が再帰的予測よりも正確である場合があると主張しています。これは、MLが従来の方法よりも正確であることを意味します。

その他の質問:

  • h-ahead-ahead予測を行うために機械学習を使用している人を見かけない理由は何ですか?

多くの人がマルチステップ予測にMLを使用しています。特にニューラルネットワークを使用しています。RForecastパッケージで利用可能なHyndmanのnnetarメソッド、Kourentzesのnnfor Rパッケージ、AmazonのDeepARモデルなどです。

XGBoostは、いくつかのKaggleタイムシリーズコンテストでも使用されています。

Bontempi らを参照してください一般的な議論のために。

  • 機械学習を使用する方法がある場合、それはARIMAよりも正確ですか?

それは未解決の問題であり、明らかに予測対象のデータとアプリケーションに依存します。


1

私は過去数か月間、異常検出のために時系列で遊んでおり、私の経験をあなたと共有できます。

私が扱ってきた時系列は、2つの季節性(毎日と毎週)が特徴で、傾向はなく、日中の多くのピークがありました。

私はいくつかの実験を行った後、LSTMニューラルネットに基づくモデルを選択しました。私の場合、それは有馬よりも優れていたためですが、もちろん統計上のすべてのものとして、一般的な解決策はありません。

ニューラルネットで将来の複数のタイムステップを予測することは非常に簡単です。1つではなくN個の値を出力する必要があり、そのN個の出力が実際のN個の観測値と比較されます。

私の経験から、低いN(たとえば1)を使用することで、モデルは季節性を実際に「学習」することなく、過去のいくつかのタイムステップを厳密に使用して新しいタイムステップを予測することがわかります。一方、Nを大きくすると、季節性が学習されますが、全体的な精度は低下します。

私の分析では、N = 4(2時間後)が適切な妥協案であることがわかりました。


1

より一般的な用語で質問に答えるために、機械学習を使用してh-steps-ahead予測を予測することができます。トリッキーな部分は、データをその中にあるマトリックスに再形成しなければならないことです。観測ごとに、観測の実際の値と定義された範囲の時系列の過去の値です。実際にARIMAモデルをパラメーター化する場合と同様に、時系列の予測に関連すると思われるデータの範囲を手動で定義する必要があります。マトリックスの幅/水平線は、マトリックスが取る次の値を正しく予測するために重要です。地平線が制限されている場合、季節性の影響を見逃す可能性があります。

これを実行したら、hステップ先を予測するには、最後の観測に基づいて最初の次の値を予測する必要があります。次に、ARIMAモデルと同様に、予測を「実際の値」として保存する必要があります。これを使用して、タイムシフトによって2番目の次の値を予測します。h-steps-aheadを取得するには、プロセスをh回繰り返す必要があります。各反復は前の予測に依存します。

Rコードを使用した例は次のようになります。

library(forecast)
library(randomForest)

# create a daily pattern with random variations
myts <- ts(rep(c(5,6,7,8,11,13,14,15,16,15,14,17,13,12,15,13,12,12,11,10,9,8,7,6), 10)*runif(120,0.8,1.2), freq = 24)
myts_forecast <- forecast(myts, h = 24) # predict the time-series using ets + stl techniques
pred1 <- c(myts, myts_forecast1$mean) # store the prediction

# transform these observations into a matrix with the last 24 past values
idx <- c(1:24)
designmat <- data.frame(lapply(idx, function(x) myts[x:(215+x)])) # create a design matrix
colnames(designmat) <- c(paste0("x_",as.character(c(1:23))),"y")

# create a random forest model and predict iteratively each value
rfModel <- randomForest(y ~., designmat)
for (i in 1:24){
  designvec <- data.frame(c(designmat[nrow(designmat), 2:24], 0))
  colnames(designvec) <- colnames(designmat)
  designvec$y <- predict(rfModel, designvec)
  designmat <- rbind(designmat, designvec)
}
pred2 <- designmat$y

#plot to compare predictions
plot(pred1, type = "l")
lines(y = pred2[216:240], x = c(240:264), col = 2)

明らかに、時系列モデルと機械学習モデルのどちらがより効率的かを決定する一般的なルールはありません。機械学習モデルの場合、計算時間は長くなる可能性がありますが、一方で、それらを使用して時系列を予測するために、任意のタイプの追加機能を含めることができます(たとえば、数値または論理機能だけでなく)。一般的なアドバイスは、両方をテストし、最も効率的なモデルを選択することです。


あなたがタイムシフトと呼んでいるのは、実際には標準的な有馬が行っていることであると述べたいかもしれませんが。そのため、有馬予測は非常に線形になる傾向があります。
5

はい、正確に。このステップを明確にするために、回答を編集します。
AshOfFire 2018年

1
時系列モデルでは、追加の機能を含めることもできます。
Tim

ARIMAXでは正しいですが、それらは数値である必要があり、追加された係数は、ARMAで使用されている係数ほど簡単には解釈できません。
AshOfFire 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.