Python の時系列分析モデル ARIMA

皆さん、こんにちは。時系列分析は、時系列の将来のデータ ポイントを予測および予測するために広く使用されています。ARIMA モデルは時系列の予測に広く使用されており、最も人気のある方法の 1 つと考えられています。この記事では、Python で時系列予測用の ARIMA モデルを構築して評価する方法を紹介します。

ARIMAモデルとは

ARIMA モデルは、時系列データの分析と予測に使用される統計モデルです。ARIMA メソッドは、時系列の一般的な構造に明示的に適応し、正確な時系列予測のためのシンプルかつ強力な方法を提供します。

ARIMA は AutoRegressive Integrated Moving Average の略称です。次の 3 つの重要な側面が組み合わされています。

  • 自己回帰 (AR): 現在の観測値と遅れた観測値の間の相関関係を使用して構築されたモデル。遅れた観測値の数は遅れ次数、または p と呼ばれます。

  • 統合 (I): 元の観測値を差分することによって時系列を定常化します。差分演算の回数を d と呼びます。

  • 移動平均 (MA): 現在の観測値と、過去の観測値に適用された移動平均モデルの残差誤差との関係を考慮したモデル。移動平均ウィンドウのサイズは order または q です。

ARIMA モデルは ARIMA(p,d,q) として表されます。ここで、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
# 进行第一次预测
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])

時系列データを扱う場合、以前の観測値に依存するため、ローリング予測を行う必要があることがよくありますが、その 1 つのアプローチは、新しい観測値を受信するたびにモデルを再作成することです。

すべての観測値を追跡するために、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 メソッドは、以前の観測値と過去の予測誤差に基づいて、時系列データをモデル化する柔軟で構造化された方法を提供します。

おすすめ

転載: blog.csdn.net/csdn1561168266/article/details/132438817