【時系列解析】ARモデルを分かりやすく解説して実装する

Posted: , Category: 時系列分析 , 機械学習 , 統計学

ARモデル(Auto Regressive)モデルは、自己回帰モデルと呼ばれています。

現在の時刻$t$におけるデータが、$t$以前の$0~ t-1$のデータで回帰できるモデルのことを、ARモデルと表現します。

古典的な時系列解析における、最も基本的なモデルと言っても良いでしょう。近年ではディープラーニングを用いた手法などが多数登場しておりますが、それでもやはりARモデルを元にした手法は実際の製品や分析でもよく行われています。

今回はARモデルについてわかりやすく解説し、その後Pythonを用いてARモデルを実装します。

本記事の内容
  • AR(自己回帰)モデルの解説
  • 実際のデータを用いてPythonでARモデルを実装

ARモデルの定義

まず最初に、ARモデルを定義します。ARモデルは下記のように表現されるモデルとなっています。

ARモデルの定義
\begin{equation}
\begin{split}
y_t &= \phi_1 y_{t-1} + \phi_2 y_{t-2}+ \phi_3  y_{t-3} + \dots + \phi_p y_{t-p} + \epsilon_t + c \\
&= \sum_{i=1}^{p} \phi_i y_{t-i} + \epsilon_t + c
\end{split}
\end{equation}

ここで、$\phi_n$は、ARパラメータ、$c$は定数、$\epsilon_t$はノイズとして定義されます。

$\epsilon_t$のノイズは、平均0、分散が$\sigma^2$に従う白色雑音(ホワイトノイズ)だと仮定しています。式で表現すると下記のようになります。

\begin{equation}
\epsilon_t \sim \mathcal{N}(0, \sigma^2)
\end{equation}

また、$c$は定数ですが、$\phi$と用いて統一的に表現する場合は、$\phi_0$と表現されることもあります。

ちなみに、(1)の定義は、現在の時刻$t$の観測値$y_t$が、$p$期前のデータまでで回帰できることを過程しています。

このように、現在のデータが$p$期前までのデータで回帰できることを過程しているARモデルをAR(p)と表現します。

AR(1)モデル

(1)は一般的に表現したARモデルですが、ここで最も簡単なARモデルはAR(1)モデルとなります。

AR(1)モデルは、現在の観測値は1つ前の観測値だけで表現できるとするモデルで、次のように表現できます。

\begin{equation}
\begin{split}
y_t = \phi_1 y_{t-1} +  \epsilon_t + c
\end{split}
\end{equation}

PythonでARモデルを試す

それでは、Pythonを用いてARモデルの実験をしてみましょう。

時系列データとして、超有名なデータセットである、飛行機の乗車人数であるAirPassengersを利用します。詳しいデータセットの解説はこちらをご覧ください。

【Python】時系列分析で使えるデータセットまとめ(単変量・多変量)
時系列分析、やっていますでしょうか?時系列分析のテーマは幅広く、時系列予測や異常検知、因果推論など興味深いテーマが多数ありますよね。 今回は、時系列分析で利用できるデータセットを紹介します。特定のアルゴリズムを試すのに、 […]

まず必要なライブラリをインポートします。ARモデルを試すために、今回はstatsmodelsライブラリを利用します。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

from statsmodels.tsa.ar_model import AR

続いて、データセットをインポートします。

df = pd.read_csv("https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv", index_col='Month', parse_dates=True)
plt.figure(figsize=(10, 3), dpi=100)
plt.plot(df)

このようなデータセットで、自己回帰モデルで学習します。

# 訓練データとテストデータを準備
len_test = 12
df_train = df[:len(df) -len_test]
df_test = df[len(df)-len_test:]

# モデルを訓練しAICが最も少ないモデルを選択
for i in range(21):
    ar_model = AutoReg(df_train, lags=i)
    result = ar_model.fit()
    print(f"lag: {i}, AIC:{result.aic}")

ラグごとに次のようなAICが出力されました。

fig, ax = plt.subplots(figsize=(10, 2), dpi=100)

min_lag = 20
ar_model = AutoReg(df_train, lags=min_lag)
result = ar_model.fit()
forecast = result.forecast(len_test)

ax.plot(df, ls="-")
ax.plot(forecast, ls="-", color="r", label="predicted")

フィッティングの結果はこのようになりました。

ARモデルでも十分予測できていることがわかります。

まとめ

自己回帰モデルでも基本的な時系列を表現することができました。古典的時系列予測では、ARIMAモデルなどが頻繁に利用されますが、その基本となるARモデルを紹介しました。

次はMAモデルについて解説していこうと思うので、他の記事もぜひご覧ください。

【広告】
統計学的にあなたの悩みを解決します。
仕事やプライベートでお悩みの方は、ベテラン占い師 蓮若菜にご相談ください。

機械学習と情報技術