ETS()関数、履歴データと一致しない予測を回避する方法


16

毎月の予測計算を自動化するために、Rのアルゴリズムに取り組んでいます。特に、予測パッケージのets()関数を使用して予測を計算しています。それは非常にうまく機能しています。

残念ながら、特定の時系列について、私が得る結果は奇妙です。

私が使用しているコードを以下で見つけてください:

train_ts<- ts(values, frequency=12)
fit2<-ets(train_ts, model="ZZZ", damped=TRUE, alpha=NULL, beta=NULL, gamma=NULL, 
            phi=NULL, additive.only=FALSE, lambda=TRUE, 
            lower=c(0.0001,0.0001,0.0001,0.8),upper=c(0.9999,0.9999,0.9999,0.98), 
            opt.crit=c("lik","amse","mse","sigma","mae"), nmse=3, 
            bounds=c("both","usual","admissible"), ic=c("aicc","aic","bic"),
            restrict=TRUE)  
ets <- forecast(fit2,h=forecasthorizon,method ='ets')   

以下の関連する履歴データセットを見つけてください:

 values <- c(27, 27, 7, 24, 39, 40, 24, 45, 36, 37, 31, 47, 16, 24, 6, 21, 
35, 36, 21, 40, 32, 33, 27, 42, 14, 21, 5, 19, 31, 32, 19, 36, 
29, 29, 24, 42, 15, 24, 21)

ここで、グラフには、履歴データ(黒)、適合値(緑)、および予測(青)が表示されます。予測は明らかに適合値と一致していません。

フォアキャットを過去の売上に「合わせて」「バインド」する方法についてのアイデアはありますか? ここに画像の説明を入力してください


これは私が遭遇した最も奇妙な予測の1つですets。履歴データの平均/レベルは約20であり、予測の平均/レベルは約50です。これがなぜ起こるのか分かりませんか?基本を実行してets、同じ結果が得られるかどうかを確認できますか?
予報官

お時間をいただきありがとうございます!最後の点は「外れ値」とみなされる可能性があるという事実に同意します(21対7または6または5前年)。統計予報。しかし、「通常の」セールだと仮定した場合、予測を制限することでこの動作を回避する方法はありますか、少なくとも予測が履歴の2倍大きいことを警告されますか?その場合、アルファ、ベータ、ガンマの境界は関係ありません。繰り返しになりますが、この点についてご協力いただきありがとうございます!
MehdiK

私はあなたの答えに賛成票を投じました。今、私はあなたがコメントを残すことができると思います。将来、回答のすぐ下にコメントを残してください。そうすれば、回答した人はそれに気付くでしょう。ありがとう
予報官

ETSおよびすべての単変量時系列モデルは、過去の行動が将来の行動を予測すると想定しています。ある場合は任意の異常なデータポイントは、あなたは異常があるということをモデルを知ることができるようにする必要があります。モデルは値が正常であることを認識しません。値が異常値であることをモデルで指定する必要があります。
予報官

回答:


10

@forecasterが指摘したように、これはシリーズの終わりに外れ値が原因です。推定レベル成分を上にプロットすると、問題を明確に見ることができます。

plot(forecast(fit2))
lines(fit2$states[,1],col='red')

シリーズの終わりにレベルが上昇することに注意してください。

モデルを外れ値に対してより堅牢にする1つの方法は、パラメーター空間を縮小して、平滑化パラメーターがより小さな値をとるようにすることです。

fit2 <- ets(train_ts, upper=c(0.3,0.2,0.2,0.98))  
plot(forecast(fit2))

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


外れ値を処理するための2番目の提案に相当する予測:: auto.arimaとは何ですか?
ブラッシュ平衡

1
ARIMAモデルを使用すると、問題のある時間にダミー変数を1に設定して異常値を処理できます。auto.arimaまたはArimaでxreg引数を使用するだけです。
ロブハインドマン

6

これは、シリーズの終わりに外れ値があり、その意図しない結果になる教科書のケースです。データの問題は、最後の2つのポイントが外れ値であるということです。予測アルゴリズムを実行する前に、外れ値を特定して処理する必要がある場合があります。外れ値を特定するためのいくつかの戦略について、本日後半に回答と分析を更新します。以下はクイックアップデートです。

最後の2つのデータポイントを削除してetsを再実行すると、妥当な予測が得られます。下記を参照してください:

values.clean <- c(27, 27, 7, 24, 39, 40, 24, 45, 36, 37, 31, 47, 16, 24, 6, 21, 
                  35, 36, 21, 40, 32, 33, 27, 42, 14, 21, 5, 19, 31, 32, 19, 36, 
                  29, 29, 24, 42, 15)## Last two points removed

train_ts.clean<- ts(values.clean, frequency=12)
fit2.clean<-ets(train_ts.clean)  
ets.f.clean <- forecast(fit2.clean,h=24)
plot(ets.f.clean)

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


5

@予報士最後の値は外れ値ですが、傾向と季節活動を考慮すると、期間38(最後から2番目の値)は外れ値ではありません。これは、代替の堅牢なアプローチをテスト/評価するための定義/指導の瞬間です。異常を特定して調整しないと、分散が大きくなり、他のアイテムが見つかりません。期間32も外れ値です。期間3,32および1も外れ値です。最初の17個の値については、シリーズに統計的に有意な傾向がありますが、その後は期間18から減少します。したがって、データには実際に2つの傾向があります。ここで学ぶべき教訓は、トレンドがないか、トレンドの特定の形態を想定し、かつ/または暗黙的に自己回帰プロセスの特定の形態を想定する単純なアプローチは、真剣に疑問視される必要があるということです。良い予測を進めるには、最終地点(期間39)で見られる例外的な活動の継続の可能性を考慮する必要があります。これをデータから抽出することは不可能です。

これはおそらく有用なモデルです。

ここに画像の説明を入力してください最終モデルの統計はこちらですここに画像の説明を入力してください。実際/適合および予測グラフは、例外的なアクティビティを強調するため、興味深いものです。ここに画像の説明を入力してください


+1あなたの答えは常に教育的で啓発的です。パルスと時間を理解していますが、固定効果は純粋に決定論的なモデルですか?
予報官

はい さらに、8月(8)は重要ではなく、最終リストにありませんでした。
IrishStat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.