タイムシリーズ分析:PythonにおけるARIMAモデル

PythonでのARIMAモデルによるタイムシリーズ分析

時間系列分析は、時間系列の将来のポイントを予測するために広く使用されています。AutoRegressive Integrated Moving Average(ARIMA)モデルは、時間系列予測に広く使用され、最も人気のある手法の1つとされています。このチュートリアルでは、Pythonでの時間系列予測のためのARIMAモデルの構築と評価方法を学びます。

 

ARIMAモデルとは何ですか?

 

ARIMAモデルは、時間系列データの分析と予測に使用される統計モデルです。ARIMAアプローチは、時間系列で見られる標準的な構造に明示的に対応し、優れた時間系列予測を行うためのシンプルでパワフルな方法を提供します。

ARIMAは、AutoRegressive Integrated Moving Averageの略で、次の3つの要素を組み合わせています:

  • 自己回帰(AR):現在の観測値と過去の観測値との相関を利用するモデルです。過去の観測値の数は、ラグオーダーまたはpと呼ばれます。
  • 積分(I):生の観測値の差分を取ることで、時間系列を定常にします。差分の回数は、dと呼ばれます。
  • 移動平均(MA):現在の観測値と過去の観測値に適用された移動平均モデルの残差との関係を考慮します。移動平均窓のサイズは、オーダーまたはqと呼ばれます。

ARIMAモデルは、使用される具体的なモデルを指定するために整数値で置き換えられる記号ARIMA(p,d,q)で定義されます。

ARIMAモデルを採用する際の主な仮定:

  • 時間系列は、基になるARIMAプロセスから生成されたものです。
  • パラメータp、d、qは、生の観測値に基づいて適切に指定する必要があります。
  • ARIMAモデルを適合させる前に、時間系列データを差分化して定常にする必要があります。
  • モデルが適切に適合している場合、残差は無相関であり、正規分布に従うはずです。

要約すると、ARIMAモデルは、予測などの目的で時間系列データをモデリングするための構造化された設定可能な手法を提供します。次に、PythonでARIMAモデルを適合させる方法について見ていきます。

 

Pythonコードの例

 

このチュートリアルでは、KaggleからNetflixの株価データを使用して、ARIMAモデルを使用してNetflixの株価を予測します。 

 

データの読み込み

 

株価データセットを「日付」列をインデックスとして読み込みます。 

import pandas as pd


net_df = pd.read_csv("Netflix_stock_history.csv", index_col="Date", parse_dates=True)
net_df.head(3)

 

 

データの可視化

 

pandasの「plot」関数を使用して、株価と出来高の変化を時間の経過とともに可視化することができます。株価は指数関数的に増加していることがわかります。

net_df[["Close","Volume"]].plot(subplots=True, layout=(2,1));

 

 

ローリング予測ARIMAモデル

 

データセットはトレーニングセットとテストセットに分割され、ARIMAモデルをトレーニングしました。最初の予測が行われました。

一般的なARIMAモデルでは結果が悪く、フラットな線が生成されました。そのため、ローリング予測法を試すことにしました。 

注:コードの例はBOGDAN IVANYUKのノートブックの改変版です。

from statsmodels.tsa.arima.model import ARIMA
from sklearn.metrics import mean_squared_error, mean_absolute_error
import math


train_data, test_data = net_df[0:int(len(net_df)*0.9)], net_df[int(len(net_df)*0.9):]


train_arima = train_data['Open']
test_arima = test_data['Open']


history = [x for x in train_arima]
y = test_arima
# make first prediction
predictions = list()
model = ARIMA(history, order=(1,1,0))
model_fit = model.fit()
yhat = model_fit.forecast()[0]
predictions.append(yhat)
history.append(y[0])

 

時間系列データを扱う際には、前の観測値に依存するため、ローリング予測がよく必要になります。これを行う一つの方法は、新しい観測値が受け取られるたびにモデルを再作成することです。

すべての観測値を追跡するために、historyというリストを手動で保持し、最初にトレーニングデータが含まれ、各反復ごとに新しい観測値が追加されます。このアプローチは、正確な予測モデルを得るのに役立ちます。

# ローリング予測
for i in range(1, len(y)):
    # 予測
    model = ARIMA(history, order=(1,1,0))
    model_fit = model.fit()
    yhat = model_fit.forecast()[0]
    # 逆変換された予測
    predictions.append(yhat)
    # 観測値
    obs = y[i]
    history.append(obs)

 

モデルの評価

 

ローリング予測ARIMAモデルは、シンプルな実装に比べて100%の改善を示し、印象的な結果をもたらしました。

# パフォーマンスレポート
mse = mean_squared_error(y, predictions)
print('MSE: '+str(mse))
mae = mean_absolute_error(y, predictions)
print('MAE: '+str(mae))
rmse = math.sqrt(mean_squared_error(y, predictions))
print('RMSE: '+str(rmse))

 

MSE: 116.89611817706545
MAE: 7.690948135967959
RMSE: 10.811850821069696

 

実際の結果と予測結果を視覚化して比較しましょう。明らかに、モデルは非常に正確な予測を行いました。

import matplotlib.pyplot as plt
plt.figure(figsize=(16,8))
plt.plot(net_df.index[-600:], net_df['Open'].tail(600), color='green', label = 'Train Stock Price')
plt.plot(test_data.index, y, color = 'red', label = 'Real Stock Price')
plt.plot(test_data.index, predictions, color = 'blue', label = 'Predicted Stock Price')
plt.title('Netflix Stock Price Prediction')
plt.xlabel('Time')
plt.ylabel('Netflix Stock Price')
plt.legend()
plt.grid(True)
plt.savefig('arima_model.pdf')
plt.show()

 

 

結論

 

この短いチュートリアルでは、ARIMAモデルの概要とPythonでの実装方法について説明しました。ARIMAアプローチは、前の観測値と過去の予測誤差に依存する時間系列データをモデル化する柔軟で構造化された方法を提供します。ARIMAモデルと時系列分析の包括的な分析に興味がある場合は、「Stock Market Forecasting Using Time Series Analysis」を参照することをお勧めします。Abid Ali Awan(@1abidaliawan)は、機械学習モデルの構築が大好きな認定データサイエンティストです。現在、コンテンツ作成と機械学習およびデータサイエンス技術に関する技術ブログの執筆に注力しています。Abidはテクノロジーマネジメントの修士号と通信工学の学士号を保持しています。彼のビジョンは、精神疾患で苦しむ学生向けにグラフニューラルネットワークを使用したAI製品を開発することです。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

機械学習

「トランスフォーマーの単純化:あなたが理解する言葉を使った最先端の自然言語処理(NLP)— パート1 — イントロ」

「トランスフォーマーは、AIの進歩に大きく貢献したディープラーニングのアーキテクチャですそれはAIとテクノロジー全体の範...

データサイエンス

なぜディープラーニングは常に配列データ上で行われるのか?新しいAI研究は、データからファンクタまでを一つとして扱う「スペースファンクタ」を紹介しています

暗黙のニューラル表現(INR)またはニューラルフィールドは、3D座標を3D空間の色と密度の値にマッピングすることによって、3D...

機械学習

「React開発者にとってのAI言語モデルの力包括的なガイド」

このブログでは、AI言語モデルとReactのシナジーについて探求し、このコラボレーションが開発者の能力を向上させる方法を探り...

データサイエンス

説明可能なAI:ブラックボックスモデルの解明

イントロダクション 現代のデータ駆動型の世界では、機械学習はさまざまな産業でますます重要な役割を果たしています。説明可...

機械学習

AIの時代のコーディング:ChatGPTの役割と次世代プログラミング

ChatGPTはデジタルの世界を変えつつあり、プログラミングも例外ではありませんプログラマーにどのように助けられ、コーディン...

機械学習

PyTorchモデルのパフォーマンス分析と最適化—Part2

これは、GPU上で実行されるPyTorchモデルの分析と最適化に関する一連の投稿の第二部です最初の投稿では、プロセスとその重要...