見出し画像

Python:ARIMAモデルでAPPLE株価の予測をしてみよう!


1.初めに

 時系列分析入門編:ARIMAモデルを使った株価の予測です。
ARIMAモデルは、その柔軟性と精度の高さから、時系列分析における最も基本的かつ重要なツールの一つとして広く用いられています。
時系列分析入門として最適なツールですので、是非お付き合い下さい。

補足)今回からコード全文は少額ながら有料プランにさせていただきました。今回も今後も価格に見合った内容を目指します(現時点のゴール:多変数のデータを元にLSTMモデルで米国株を予測を実現)。
参考にしたい!応援してあげてもいいぞ!って方はご購読いただき、まずはコード全文をコピペ→各コードをいじってPython の勉強にお役立て下さい。

今回の最終アウトプット:

APPLE株の過去1年長のデータ(青線)から5日後(赤線)を予測したグラフ


2.少しだけお勉強

(1)ARIMAモデルとは?

ARIMAは「自己回帰積分移動平均(Autoregressive Integrated Moving Average)」モデルの略で、非定常時系列データの予測に特に適しています。このモデルは三つの重要な要素から成り立っています:

  1. 自己回帰(AR:Autoregressive): 自己回帰部分は、時系列の現在の値が過去の値に依存することを示しています。つまり、前の時間点のデータが後の時間点のデータに影響を与えます。

  2. 積分(I:Integrated): 積分部分は、非定常データを定常データに変換するために、データの差分化を行うプロセスを指します。これは、時系列がランダムウォークやトレンドを示す場合に特に有効です。

  3. 移動平均(MA:Moving Average): 移動平均部分は、時系列の現在の値が過去の予測誤差に依存することを示しています。これにより、ランダムショックの影響をモデルに組み込むことができます。

ARIMAモデルの利点

  1. 柔軟性: ARIMAはその構造上、さまざまな種類のデータに適用できる汎用性の高いモデルです。

  2. 季節性の考慮: 季節的ARIMA、すなわちSARIMAモデルを用いることで、季節的変動を持つ時系列データに対応することができます。

  3. トレンドとランダム性の区別: ARIMAモデルはデータのトレンドや季節性を明確に区別し、それらを取り除いた上でランダムな変動に焦点を当てます。

  4. 予測の精度: 適切にパラメータが設定されたARIMAモデルは、短期予測において高い精度を発揮します。


(2)時系列分析の基礎(その1) 自己相関図とは?

自己相関とは、時系列データの異なる時間点における値の間に存在する相関のことを指します。pythonなら時系列情報でも視覚的に表示するのも簡単です。
時系列データ”df”に対し、下記の短いコードで実行できます。

import pandas as pd
from pandas.plotting import autocorrelation_plot

autocorrelation_plot(df)
plt.show()

実際に、APPLE株の2023年1月からの約1年と少しの調整後終値データを元に下記のコードを実行すると下記のプロットが確認できます。

APPLE株の自己相関図

解読は難しいですが相関が外れている箇所を確認することで時系列の傾向を知ることができます。

50以下で相関係数が0に近いほど1に近い:ラグが50以下で相関係数が1に近づく傾向がある場合、これは短期間のラグにおいてデータポイント間に強い正の自己相関が存在することを意味します。つまり、過去のデータポイントが直近のデータポイントと似た傾向を持っていることを示唆しています。これは、データに短期的なトレンドやパターンが存在することを示している可能性があります。

150から230のラグで相関係数が-0.25:ラグが150から230の範囲で相関係数が-0.25程度(負の相関)となる場合、これは中期から長期にわたるラグでデータポイント間に弱い負の自己相関が存在することを意味します。これは、過去の特定の時点のデータが、より遠い未来のデータとは異なる傾向を持つことを示している可能性があります。負の相関は、ある時点のデータ値が高い場合、将来的にデータ値が下がる傾向があることを示しています。

以上のように、いろいろなデータを解析してみることで知見が深まりますので、みなさまも是非トライしてみて下さい。

3.ARIMAモデルで株価予測

まずはAPPLE株のデータ取得です。今回は取得したデータから調整済み終値データだけを抽出し、データ”df”に格納します。

# AAPLの株価データを取得
df = yf.download('AAPL', start='2023-01-01', end='2024-01-26')

# 'Adj Close'列のみを使用
df = df[['Adj Close']]

何らかの理由に取得データに欠損値がある場合がありますので、そのデータは下記の1行で欠損値のあるデータを無害化できます。

# 欠損データの処理
df.dropna(inplace=True)

前回の復習も兼ね、matplotlibを使って取得データを可視化してみます。

import matplotlib.pyplot as plt

# データの可視化
plt.figure()
plt.plot(df)
plt.title('AAPL Adjusted Close Price')
plt.show()
APPLE株の過去1年分の調整後終値データ


次にデータの正規化についてです。正規化については後日また詳しく説明しますが、下記のコードで簡単にデータの正規化を実現することができます。

# データの正規化
scaler = MinMaxScaler()
df_scaled = scaler.fit_transform(df)

ようやく本命のARIMAモデルです。
基礎で説明した通り、3つのパラメータについて設定値を入力した上でモデルの定義を行います。続けてモデルの訓練、予測の実行(ここでは5日間→steps=5)

# ARIMAモデルの設定
from statsmodels.tsa.arima.model import ARIMA

# パラメータはデータに合わせて調整が必要です
model = ARIMA(df, order=(5,1,0))

# モデルの訓練
model_fit = model.fit()

# 予測の実行
forecast = model_fit.forecast(steps=5)

4.まとめ

今回ARIMAモデルでの株価予測と補足で時系列データの自己相関図を紹介しました。予測って意外と簡単に実施できそうだと思っていただけたでしょうか?
 パラメーター調整やモデルの評価など、まだまだ語りたいことはいっぱいあります。今後も時系列予測に興味のある方にとって楽しみとなれる記事を書いていきたいと思いますので、次回もお楽しみに!

以下、コード全文です。
ぜひ一度触ってみて、pythonの面白さを体験してみて下さい。

ここから先は

1,413字

¥ 330

この記事が気に入ったらサポートをしてみませんか?