始める無料で始める

冬のコートはまだ手放さないで

最後に、ARMA(1,1) モデルを使って今後30年間の気温を予測し、その推定値の信頼帯も示します。長期予測では、ドリフトの推定値が ARMA パラメータよりもはるかに大きな影響を与える点にご注意ください。

これまでに、気温データがランダムウォークに従うことを確認し、一次差分をとることを見てきました。本演習では、差分前の気温データに対して ARIMA モジュールを用います。これは、気温の「変化」に ARMA モジュールを適用し、その変化の累積和をとって気温の予測を得るのと同じことです。

気温は時間とともに上昇傾向にあるため、ARIMA モデルを定義する際にトレンド項も追加する必要があります。演習では、引数 trend='t' を指定して時間に対する線形トレンドを使用します。予測がどう変わるかを見るために、他のトレンドモデルを試すこともできます。例えば、二次トレンド \(\small a+ bt + ct^2\) の場合は、モデルに線形項 \(\small bt\) と二次項 \(\small ct^2\) の両方を含めるように trend=[0,1,1] を設定します。

データは temp_NY という DataFrame にあらかじめ読み込まれています。

この演習はコースの一部です

Pythonで学ぶ時系列解析

コースを見る

演習の手順

  • 積分付きの ARMA(1,1)、つまり ARIMA(1,1,1) モデル用に、ARIMA クラスのインスタンス mod を作成します
    • order(p,d,q)d は一次差分を1回とったので 1 です
    • .fit() メソッドで mod を当てはめ、結果を res と呼びます
  • resplot_predict() メソッドで系列を予測してプロットします
    • 開始日は 1872、終了日は 2046 にします

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Import the ARIMA module from statsmodels
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.graphics.tsaplots import plot_predict

# Forecast temperatures using an ARIMA(1,1,1) model
mod = ARIMA(temp_NY, trend='t', order=(1,1,1))
___ = ___.fit()

# Plot the original series and the forecasted series
fig, ax = plt.subplots()
temp_NY.plot(ax=ax)
plot_predict(___, start='1872', end='2046', ax=ax)
plt.show()
コードを編集して実行