【完全ガイド】PythonによるLSTMを用いた株式時系列予測の実装
この記事では、Pythonを使用してLSTM(Long Short-Term Memory)モデルを構築し、株式の時系列予測を行う手法について解説します。LSTMは、リカレントニューラルネットワーク(RNN)の一種であり、長期的な依存関係を学習する能力に優れています。これにより、株式市場の複雑な動きを捉えることが可能です。使用するライブラリは、numpy、pandas、matplotlib、tensorflow、yfinanceです。
LSTMの基本概念
LSTMは、伝統的なRNNの勾配消失問題を克服するために設計されたモデルです。LSTMは、セル状態とゲート機構を使用して、情報を記憶したり忘却したりすることができます。
LSTMの仕組み
LSTMの構造は以下のように、入力ゲート、出力ゲート、忘却ゲートを持っています。これにより、モデルは信号を調整し、必要な情報を保持します。
Python環境のセットアップ
まず、必要なライブラリをインストールします。以下のコマンドを使用してください。
pip install numpy pandas matplotlib tensorflow yfinance
データの取得と前処理
Yahoo Financeから株価データを取得し、LSTMが扱いやすい形に整形します。ここでは、Microsoftの株価を例に使用します。
import yfinance as yf
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
import numpy as np
# データの取得
ticker = 'MSFT'
data = yf.download(ticker, start='2010-01-01', end='2023-01-01')
data = data[['Close']] # 終値のみに注目
# 正規化
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data)
# 教師データとテストデータの分割
train_size = int(len(scaled_data) * 0.8)
train_data = scaled_data[:train_size]
test_data = scaled_data[train_size:]
# データセットの作成
def create_dataset(data, time_step=1):
X, y = [], []
for i in range(len(data) - time_step - 1):
X.append(data[i:(i + time_step), 0])
y.append(data[i + time_step, 0])
return np.array(X), np.array(y)
# 時間ステップの設定
time_step = 60
X_train, y_train = create_dataset(train_data, time_step)
X_test, y_test = create_dataset(test_data, time_step)
# データの再形成
X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)
LSTMモデルの構築
次に、Kerasを用いてLSTMモデルを構築します。
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout
# LSTMモデルの定義
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(X_train.shape[1], 1)))
model.add(Dropout(0.2))
model.add(LSTM(50, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(1)) # 出力層
# モデルのコンパイル
model.compile(optimizer='adam', loss='mean_squared_error')
モデルのトレーニング
モデルを訓練します。ここでは、エポック数を50、バッチサイズを32に設定します。
model.fit(X_train, y_train, epochs=50, batch_size=32)
予測と可視化
モデルのトレーニングが完了したら、テストデータを使って予測を行い、その結果を可視化します。
import matplotlib.pyplot as plt
# テストデータに対する予測
predictions = model.predict(X_test)
predictions = scaler.inverse_transform(predictions) # 元のスケールに戻す
# 通常のスケールでのデータを作成
real_prices = scaler.inverse_transform(test_data[time_step + 1:])
# 可視化
plt.figure(figsize=(14,5))
plt.plot(real_prices, color='blue', label='Real Prices')
plt.plot(predictions, color='red', label='Predicted Prices')
plt.title(f'{ticker} Stock Price Prediction')
plt.xlabel('Time')
plt.ylabel('Stock Price')
plt.legend()
plt.show()
この可視化によって、実際の株価と予測株価を直感的に理解することができ、LSTMモデルの性能を評価できます。
さらなる改善点
今回のモデルは基本的なものです。以下の点を考慮してモデルを改善することが可能です。
- ハイパーパラメータの調整
- 増加する層数やユニット数
- 追加の外部データ(例:経済指標やニュースデータ)の導入
- 別のモデル構造(GRUやTransformerなど)への変更
まとめ
LSTMによる株価の時系列予測は、Pythonを用いることで比較的容易に実装できます。この技術をマスターすることで、より高度な分析や投資戦略を立てる一助となるでしょう。データサイエンスの力で、あなたの株式投資がより魅力的かつ効果的になることを期待しています。
【お知らせ】
システム全体のインフラ構成や、より詳細な統計検証データについては、プロフィール欄に記載のリンク先(技術メディア)にて随時公開しています。