PythonでAR過程による時系列予測をしてみた
はじめに
前回の記事ではAR過程の性質についてまとめたので、 今回は実際にAR過程を用いて時系列データの将来値予測を行っていく流れをまとめていきたいと思います。
目次
AR過程とは
ある時点における観測データの値をそれよりも過去の観測データの線形和で表現するモデルであり、
以下のように数式で表現されます。
また、時点前までの観測データが含まれるAR過程のことをラグのAR過程と呼び、AR(p)と記述されます。
データ探索
どの時系列モデルを適用するのか判断するために、分析対象データのデータ探索を行います。
具体的には、
を行っていきます。
トレンド、季節性の確認
まずはじめに分析対象となる時系列データをプロットし、
データ内にトレンドや季節性などが存在していないか確認します。
ちなみに今回使用するデータは静岡県三島市の2010年1月から2019年12月までの月平均気温データとなっており、
以下サイトから取得できます。
- BODIK オープンデータモニター(ODM)
https://odh.bodik.jp/dataset/50854d7b-caf8-48c8-b10f-7900f3f4e34b
- BODIK オープンデータモニター(ODM)
https://odh.bodik.jp/dataset/50854d7b-caf8-48c8-b10f-7900f3f4e34b
上記サイトに掲載されているデータをプロットした図は以下のようになります。
図を見る限りでは、データのトレンド(上昇傾向・下降傾向)は確認できませんが、一年周期で気温が一定のパターンで変動しているため、 この時系列データは季節性を備えていると見做せます。
また、上記グラフを生成するソースコードは以下の通りです。
偏自己相関係数の確認
次にコレログラムをプロットし、各ラグごとに偏自己相関係数の値の大きさを確認します。Pythonでコレログラムをプロットするために、ここではstatsmodelsライブラリを使用します。
実際に、先程の月平均気温データを用いて作成したコレログラムは以下のようになります。
縦軸は偏自己相関係数の値、横軸はラグとなっております。
また、グラフ内の青色領域は95%信頼区間を表しており、この青色領域の外側にプロットされているラグについては
異時点データ間の相関関係があるとみなすことができます。
従って、各月の平均気温は1ヶ月前〜6ヶ月前の月平均気温の値に影響を受けることが分かります。
上記コレログラムを生成するソースコードは以下の通りです。
拡張Dickey-Fuller検定の実施
次に拡張Dickey-Fuller検定(ADF検定)を行い、観測された時系列データが定常AR過程となっているか確認します。ADF検定では時系列データの真の過程がAR(p)過程であることを仮定した上で、帰無仮説・対立仮説を以下のように設定した検定となっています。
- 帰無仮説:過程は単位根AR(p)過程である
- 対立仮説:過程は定常AR(p)過程である
ADF検定についてもstatsmodelsライブラリに内包されているため、引き続きstatsmodelsを使っていきます。
実際に、月平均気温データに対してADF検定を実行するコードは以下の通りとなります。
また、上記コードの補足は以下の通りです。
- 2010年1月から2016年12月までのデータをAR過程への学習用データとして扱い、残りのデータを検証用データとして使用
- adfuller関数の引数regressionではAR過程に含める説明変数の種類を指定しており、指定できる引数としては「"c"(定数項)」、「"ct"(定数項と1次のトレンド項)」、「"ctt"(定数項、2次までのトレンド項)」、「"n"(定数項、トレンド項なし)」が存在する。今回の時系列データではトレンドは確認できず、さらに時系列データは一定の範囲内を変動しているように見受けられたため、"c"を選択している。
- adfuller関数では、AR(1)過程〜AR(maxlag)過程の中で、autolag引数で指定した指標のスコアが最も良いものを選定した後にADF検定を行っている。
また、上記コードの実行結果は以下の通りです。
# 実行結果 検定統計量 : -1.1529372620051508、p値:0.6935064693325749、使用したラグ:11、データ数:72 有意水準1%点:-3.524624466842421、有意水準5%点:-2.9026070739026064、有意水準10%点:-2.5886785262345677今回の例では、AICを基準としてAR過程の選定を行っており、上記実行結果を確認するとAR(11)過程を用いて拡張ADF検定を実施していることが分かります。また、p値を確認すると約0.69と比較的大きい数字になっています。そのため、帰無仮説を棄却することができず、観測された時系列データが定常AR過程であるという仮説を導くことができませんでした。
差分系列に対して拡張Dickey-Fuller検定を実施
観測された時系列データが定常AR過程とならない場合、代わりに元の時系列データの差分系列に対して拡張ADF検定を行い、差分系列データを定常AR過程で表現可能か確認を行います。学習用の差分系列データ(2010年1月〜2016年12月までの時系列データの差分系列データ)に対して、拡張ADF検定を行うコードは以下のようになります。
そして、実行結果は次のようになります。
検定統計量 : -7.765060620044867、p値:9.235111192010311e-12、使用したラグ:11、データ数:71 有意水準1%点:-3.526004646825607、有意水準5%点:-2.9032002348069774、有意水準10%点:-2.5889948363419957上記検定結果より、p値が限りなく0に近い値となっているため、差分系列は定常AR過程であるという仮説を採択することができます。
AR過程による時系列モデリング
AR過程の生成
ここまで来てようやくAR過程による時系列モデリングを行うことができます。まずはじめに、これまでのデータ探索・拡張ADF検定の結果を加味して、学習用の差分系列データの変動パターンをAR(11)過程(トレンド項なし)で表現します。
実際に、学習用差分系列データを用いてAR(11)過程を生成するコードは以下の通りです。
AR過程の残差の確認
次に、生成したAR(11)過程の残差プロット、残差のコレログラムを出力し、AR(11)過程が差分系列データにどれだけフィットしているのかを確認します。以下のコードはAR(11)過程の残差、残差のコレログラムを出力するコードとなっています。
上記コードを実行した結果、出力されるグラフは以下のようになります。
残差は概ね±2の範囲に収まっており、コレログラムはほぼすべてのラグにおいて95%信頼区間に収まっていることが見て取れます。
従って、作成したAR(11)過程は差分系列を上手く表現できているとみなすことができます。
AR過程による予測
最後に、これまでに作成したAR(11)過程を用いて2017年1月から2019年12月までの月平均気温データの予測を行います。将来値予測を行うコードは以下の通りです。
上記コードの出力は以下の通りです。
青の実線が実際の時系列データ、黄色の破線がAR(11)過程による予測データ系列となります。上記グラフより、2017年1月から2019年12月までの月平均気温を上手く予測できていることが分かります。