書記が数学やるだけ#637 基本的な時系列モデルの推測
実際のデータから時系列モデルを推測してみる。
問題
データは前回と同じものを用いる。
説明
自己回帰と移動平均を合わせたARMAモデルは,時系列モデルの基本として用いられる。さらに,差分系列を用いるARIMAモデル,季節周期を加えたSARIMAモデルなどと応用を広げることができる。
モデルの同定は,大まかには以下の手順を辿る。
トレンドを含むデータでは,差分を取ることで定常となるものもある(単位根過程)。
単位根の有無を判定するにはいくつかの検定があり,この結果を踏まえて差分を取るかどうかを決めていく。
解答
ARMAモデルの次数については,AICが最小になるものを選ぶことにする。モデルが複雑になりすぎないよう,ここでは各次数を3までとしている。
#自動ARMAパラメータ推定関数
res_selection = sm.tsa.arma_order_select_ic(ts, ic='aic', max_ar=3, max_ma=3, trend='nc')
res_selection
するとこの中ではARMA(3,3)が最適と判断できる。
ARMA(3,3)の各係数を推定することでモデルを作ることができる。
#ARMAモデル
arma_model = sm.tsa.ARMA(ts, order=(3,3))
arma_result = arma_model.fit()
arma_result.summary()
しかしこれはうまくいかない。元のデータに対する当てはまりはいいが,予測となるとかなり怪しい。
#ARMAモデルの2年後の予想
arma_pred = arma_result.predict('1951-01', '1962-12')
plt.figure(figsize=(8, 4))
plt.plot(ts, label="original")
plt.plot(arma_pred, c="r", label="arma_pred", alpha=0.7)
plt.legend(loc='best')
コレログラムを再掲,自己相関があり非定常であることが予想できる。
fig = plt.figure(figsize=(8, 8))
#自己相関(ACF)のグラフ
ax1 = fig.add_subplot(211)
sm.graphics.tsa.plot_acf(ts, lags=40, ax=ax1)
#偏自己相関(PACF)のグラフ
ax2 = fig.add_subplot(212)
sm.graphics.tsa.plot_pacf(ts, lags=40, ax=ax2)
plt.tight_layout()
例えばADF検定を行ってみると,帰無仮説「単位根あり」が棄却できないことから,次に差分系列(ARIMAモデル)を試すことにする。
#ADF検定(原系列)
dftest = sm.tsa.adfuller(ts)
print('ADF Statistic: %f' % dftest[0])
print('p-value: %f' % dftest[1])
ADF Statistic: 0.815369
p-value: 0.991880
ARIMAモデルを作るために,上と同様に次数を決める。
#ARIMAの次数推定
res_selection = sm.tsa.arma_order_select_ic(delts, ic='aic', max_ar=3, max_ma=3 ,trend='nc')
res_selection
#ARIMAモデル
arima = sm.tsa.SARIMAX(passengers,
order=(3, 1, 3),
seasonal_order=(0, 0, 0, 0),
enforce_stationarity = False,
enforce_invertibility = False
).fit()
arima.summary()
しかしこれもうまくいかない。
残差の自己相関を見ると1年ごとに周期が見られるので,これを除去したSARIMAモデルを次に考える(コードは上とほぼ同様のため省略)。
#SARIMAモデル
sarima = sm.tsa.SARIMAX(passengers,
order=(3, 1, 3),
seasonal_order=(1, 1, 1, 12),
enforce_stationarity = False,
enforce_invertibility = False
).fit()
sarima.summary()
予測の当てはまりが改善され,残差の自己相関が無くなっており、上手くいっていそうである。
実際の分析ではさらに評価すべき点はあるのだが,とりあえず今回はこのモデルを採用することとした。
本記事のもくじはこちら:
学習に必要な本を買います。一覧→ https://www.amazon.co.jp/hz/wishlist/ls/1XI8RCAQIKR94?ref_=wl_share