【Python】時系列分析に用いるARIMAモデルについて解説

データサイエンス

こんにちは!薫です。

今回は時系列分析に用いる機械学習モデルであるARIMAモデルについて解説します。

時系列分析とは

まず時系列分析とは何かを説明します。

時系列分析は、過去のデータをもとに未来の値を予測するための手法の一つであり、経済や株価、気象データなどの予測に活用されています。

時系列データは、一定の時間間隔で観測された値からなるデータであり、例えば毎月の売上高や毎日の気温などが挙げられます。

ARIMAモデルは、時系列分析に用いる機械学習モデルです。

時系列分析の参考書

ではここで、時系列分析を学ぶためのおすすめ参考書を紹介します。

現場ですぐ使える時系列データ分析 ~データサイエンティストのための基礎知識~

まず紹介するのが「現場ですぐ使える時系列データ分析 ~データサイエンティストのための基礎知識~」という本です。

こちらの参考書は特に、時系列分析の入門書としておすすめです。

時系列データを扱う際の基本的な考え方、どのような手順を踏んで分析を進めていくのかという内容が順を追って丁寧に解説されています。

何度か繰り返し読むことで、時系列分析の基礎がしっかり身につくと思います!

時系列解析: 自己回帰型モデル・状態空間モデル・異常検知 (Advanced Python)

次に紹介するのが「時系列解析: 自己回帰型モデル・状態空間モデル・異常検知 (Advanced Python)」という本です。

こちらは時系列分析の実践的な知識を身につけることができます。

特にPythonのコードが充実している点が特徴的で、データ分析業務で役立つ内容となっています。

またこちらの参考書には、この記事のメインテーマであるARIMAモデルについても紹介されています。

ARIMAモデルとは

さて、ではここからARIMAモデルについて説明していきます。

ARIMAモデルは、自己回帰モデル(ARモデル)、移動平均モデル(MAモデル)、差分モデル(Iモデル)の組み合わせで構成されたモデルで、ARIMA(p,d,q)のように表します。

ARモデル、MAモデル、Iモデルを簡単に説明すると以下のようなものになります。

  • ARモデル:現在の値が過去の値の線形結合で表されることを仮定したモデル
  • MAモデル:現在の値が過去の誤差項の線形結合で表されることを仮定したモデル
  • Iモデル:時系列データの差分をとることによって定常的なデータに変換することを目的としたモデル

ARモデル、MAモデル、Iモデルを組み合わせたARIMAモデルは、非定常な時系列データを定常的な時系列データに変換して未来の値を予測することができるため、広く利用されています。

ARIMAモデルのパラメータp、q、dは、それぞれ自己回帰次数、移動平均次数、差分次数を表し、これらの値を適切に設定することでモデルの予測精度を向上させることができます。

ARIMAモデルの実装

Pythonでは、statsmodelsというパッケージを用いてARIMAモデルを実装することができます。

以下では、実際に時系列データを用いてARIMAモデルを構築し、予測を行う方法について解説します。

データの読み込み

まずは、必要なパッケージをインストールし、データを読み込みます。ここでは、pandasnumpyを用いてデータを読み込みます。

import pandas as pd
import numpy as np

# データを読み込む
df = pd.read_csv('data.csv', parse_dates=['date'], index_col='date')

データの可視化

次に、時系列データの可視化を行います。

可視化には、matplotlibを用いることができます。

import matplotlib.pyplot as plt

# データの可視化
plt.plot(df)
plt.show()

可視化したデータから、傾向や季節性があることがわかります。

このような場合には、ARIMAモデルではなくSARIMAモデルを用いることが推奨されます。

SARIMAモデルは、ARIMAモデルに季節性を考慮したモデルであり、時系列データに季節性がある場合にはARIMAモデルよりも予測精度が高くなります。

後ほどSARIMAモデルについても簡単に紹介します!

データの差分をとる

ARIMAモデルを構築するためには、データを定常的なデータに変換する必要があります。

データの差分をとることで、定常的なデータに変換することができます。

差分をとる際には、pandasdiff()関数を用いることができます。

# データの差分を取る
diff = df.diff().dropna()

差分を取ることで、データのトレンドを取り除くことができます。

ACFとPACFの可視化

次に、自己相関係数(ACF)と偏自己相関係数(PACF)を用いて、ARIMAモデルのパラメータp、q、dを決めます。

ACFとPACFは、statsmodelsplot_acf()plot_pacf()関数を用いて可視化することができます。

from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

# ACFとPACFの可視化
fig, ax = plt.subplots(2, 1, figsize=(8, 6))
plot_acf(diff, ax=ax[0])
plot_pacf(diff, ax=ax[1])
plt.show()

ACFとPACFを可視化することで、自己相関と偏自己相関の強さを確認することができます。

これらのグラフを見て、ARIMAモデルのパラメータを決定します。

モデルの構築

ARIMAモデルのパラメータを決定したら、statsmodelsARIMA()関数を用いてモデルを構築します。

ここでは、パラメータp=1、q=1、d=1を設定したモデルを構築しています。

from statsmodels.tsa.arima.model import ARIMA

# ARIMAモデルの構築
model = ARIMA(df, order=(1, 1, 1))

# モデルのフィッティング
results = model.fit()

# モデルのサマリーの表示
print(results.summary())

予測結果の取得

モデルを構築したら、predict()関数を用いて未来の値を予測することができます。

以下のコードでは、2023年から2025年までの未来の値を予測しています。

# 未来の値を予測
forecast = results.predict(start='2023-01-01', end='2025-12-31')

# 予測結果の可視化
plt.plot(df, label='Actual')
plt.plot(forecast, label='Predicted')
plt.legend()
plt.show()

以上が、Pythonを用いてARIMAモデルを構築し、未来の値を予測する方法についての解説です。

ARIMAモデルは、時系列データの予測に広く用いられる手法であり、適切なパラメータを設定することで高い予測精度を達成することができます。

また、季節性を考慮する場合にはSARIMAモデルを用いることが推奨されます。

SARIMAモデルとは

ではここで補足として、SARIMAモデルについても説明をします。

SARIMAモデルは季節性を持つ時系列データを分析するためのモデルです。

ARIMAモデルと同様に、自己回帰モデル、移動平均モデル、差分モデルを組み合わせたモデルで、加えて季節性を考慮したモデルとなっています。

SARIMAモデルは、以下の式で表されます。

SARIMA(p,d,q)(P,D,Q,m)

ここで、pは自己回帰モデルの次数、dは差分モデルの次数、qは移動平均モデルの次数、Pは季節性自己回帰モデルの次数、Dは季節性差分モデルの次数、Qは季節性移動平均モデルの次数、mは季節周期を表します。

SARIMAモデルを構築するためには、まず時系列データの季節性を確認し、季節性が確認された場合にはSARIMAモデルの次数を決定してモデルを構築することができます。

なお、SARIMAモデルは、ARIMAモデルと同様に以下の手順で構築することができます。

  1. 時系列データの可視化
  2. 時系列データの差分を取る
  3. ACFとPACFの可視化
  4. モデルの構築
  5. 予測

まとめ

いかがでしたか?

今回は時系列分析に用いる機械学習モデルであるARIMAモデルについて解説しました。

この記事が皆さんのお役に立ちましたら幸いです。

コメント

タイトルとURLをコピーしました