冬のコートはまだ手放さないで
最後に、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と呼びます
resのplot_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()