13
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SARIMAモデル(季節自己回帰和分移動平均モデル)による未来予測において生じる問題への対処法

Posted at

自分で記事を書くということをしたことがなかったのですが、今回詰まってしまった所が検索してもなかなか解決しなかったので、知恵として残しておこうと思います。

問題があったのは時系列分析で用いられるSARIMAモデルを使った予測においてです。(あくまで詰まってしまった部分の解説なので、具体的なSARIMAモデルの使い方の勉強は別の場所でお願いします)

次のような形で所与の時系列データに対してSARIMAモデルを適応させます。

qiita.rb
SARIMA_2_1_3_011 = sm.tsa.SARIMAX(train.y, order=(2,1,3), seasonal_order=(0,1,1,20)).fit()

このモデルを用いて次のように未来予測を行おうとしました。
(つまり169から206のindexは元データの範囲を超えていて、それを予測したかった)

qiita.rb
pred3 = SARIMA_2_1_3_011.predict(start=169,end=206)

KeyError: 'The `start` argument could not be matched to a location related to the index of the data.'

するとこのようなエラーが生じてしまいました。
英語ができないのでなんとなくでしか意味を察せないため、よく分からないけどindexの範囲が越えているのが問題のようでした。
しかし、参考にしたサイトでは何の問題もなく未来予測ができていました。

そこから色々と手を加えたりエラーをコピペして海外の質問サイトに飛んで調べたりしたのですが、かれこれ30分以上は苦戦した気がします。

で、結果的に辿り着いた予想は「元データにおけるindexである日付の現れ方が不規則なため、未来予測するためのindexが決められないということではないか」というものです。
(例えば元データのindexが1/1,1/2,1/3なら次の予測は1/4,1/5...と続くが、1/1,1/2,1/4となっていると次のindex(日付)が決まらない)

したがってこの問題の解決策は次の2つが挙げられると思います。

①なんとかしてindexの規則性を整える
②元データに空のデータ(ただしindex付)を結合して、未来のindexを用意しておく(もちろん目的変数は空のまま)

実際に2つ目の方法を行うとうまくいったので、恐らくこれらが解決法としては正しいと思います。

初めて記事を書くので見にくかったかもしれませんが、ご了承ください...。
また、力不足で至らない点も多々あると思いますが、お気づきの方はご指摘してくださると嬉しいです。
少しでもこの問題で立ち往生している方の助けになれば幸いです。

13
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?