今回は、よく知られた時系列予測モデルである「ARIMAモデル」について学びます。
時系列データは、データが一定の時間間隔で記録されているという意味で異なります。
時系列データには時間的な要素が加わっており、系列の各データポイントは前のデータポイントに依存します。
時系列予測のための統計的手法として広く使われているのがARIMAモデルです。
例えば、リンゴの売上を予測する必要があり、各日の過去の売上記録があるとします。
この問題は、時系列モデリングに分類される。
この記事では、ARIMAモデルを実装するつもりです。
ARIMAとは?
ARIMAとは、Autoregressive Integrated Moving Averageの略です。
データの自己相関を記述することに基づいており、時系列データを分析・予測するための一般的で強力な時系列アルゴリズムの1つです。
ARIMAの意味を分解してみましょう。
- 自己回帰(AR): あるオブザベーションといくつかのラグされたオブザベーションの間の従属関係。次の値を予測するために使用される過去の値を意味します。
- 統合(I): 定常性を持たせるために、系列に行われる差分操作を指す。
- 移動平均(MA): 将来の値を予測するために使用される過去の予測誤差の数を意味します。
この記事もチェック:PythonのNumpyを使って相関回帰分析を実装する方法
1. ARIMAモデルのパラメータ
ARIMAはモデルを構築するために3つの要素、p
、d
、q
を必要とします。
- p: 自己回帰ラグの数を表し、モデルの自己回帰的な側面に必要です。
- d:
d
はモデルの積分部分に関連している。これは、系列を定常化するために必要な差分処理の次数です。 - q: q は移動平均のラグ数です。これは、モデルの移動平均部分に関連している。
2. 定常系列
定常系列とは、時間の経過とともに性質が変化しない系列のことです。
つまり、時系列の平均、分散、共分散などの統計的性質はすべて時間と共に一定です。
時系列が定常でない場合、時系列モデルを構築することはできません。
ARIMAモデルはデータが定常系列であることが必要です。
時系列を定常化する一般的な方法として、Augmented Dickey-Fullerテスト、Differencing、Detrendingなどがあります。
PythonによるARIMAモデルのデモ
ここでは、auto_arima
関数を実装します。
この関数はARIMAモデルに最適なパラメータを自動的に求める。
言い換えると、この関数はARIMAモデルのパラメータ p
, d
, q
を自動的に決定します。
これは、データ準備とパラメータチューニングに非常に時間がかかるため、非常に便利です。
ここでは、auto_arima関数を持つpmdarima
モジュールを使用します。
1. データセットのインポート
今回のデモで使用するデータセットは Electrical_Production dataset (Downloaded from Kaggle) です。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
series = pd.read_csv( 'Electric_Production.csv' , index_col = 0 )
#divide into train and validation set train = series[: int ( 0.7 * ( len (series)))]
valid = series[ int ( 0.7 * ( len (series))):]
#Plotting the data plt.figure(figsize = ( 8 , 5 ))
ax = plt.gca()
ax.xaxis.set_major_locator(plt.MaxNLocator( 20 ))
plt.xticks(rotation = 45 )
plt.plot(series) plt.show() |
# Importing required modules from pmdarima.arima import ADFTest
adf_test = ADFTest(alpha = 0.05 )
adf_test.should_diff(series) |
2. 系列が定常かどうかをチェックする
Augmented Dickey-Fuller 検定を実行し、データが定常かどうかを確認します。
#Importing the module import pmdarima as pmd
arima_model = pmd.auto_arima(train,
start_p = 0 ,d = 1 ,start_q = 0 ,
test = "adf" , supress_warnings = True ,
trace = True )
#Summary of the model arima_model.summary() |
Output: (0.01, False)
pmdarima.arimaには
ADFTest` クラスがあり、Augmented Dickey-Fuller 検定を実行することができる。
また、statsmodels.tsa.stattools
モジュールの adfuller
クラスを使用して、テストを実行することもできます。
上のコードの出力は、系列が定常でないことを意味します。
ARIMAを実装するためには、まず系列を定常化する必要があります。
ここで、auto Arimaが役に立つのですが、これは自動的に差分パラメータ ‘d’ を決定して、系列を定常化します。
3. ARIMAモデルの実装
#Predict the future values valid[ 'predicted' ] = arima_model.predict(n_periods = len (valid))
def MAPE(true, pred):
true, pred = np.array(true), np.array(pred)
return np.mean(np. abs ((true - pred) / true)) * 100
MAPE(valid.IPG2211A2N, valid.predicted) |
関数に渡す重要な入力引数がいくつかある。
関数の重要なパラメータは以下の通りです。
-
- ARIMAモデルを適用する時系列。
-
-
start_p
: 自己回帰(AR)モデルの次数.
-
- start_q`: 移動平均(MA)モデルの次数。
- d` : 第一次微分法の次数. デフォルトでは None に設定されています。
-
-
test
: 定常性を検出するために使用する単位根検定の種類。
-
4. MAPEを用いたモデル性能の確認
平均絶対誤差(MAPE)を用いて、モデルの性能を確認します。
を出力します。
12.44044096590272
MAPEの値はできるだけ低くする必要があり、それは我々のモデルがより少ないエラーを行っていることを示す指標となります。
まとめ
今回は、時系列予測のためのARIMAモデルを学習し、Pythonで実装しました。
モデルがうまく機能するための時系列データセットの定常条件を決定し、定常性を確認するためにAugmented Dickey-Fuller Testを実装しました。