双方向LSTMによる時系列予測モデルの構築
時系列予測は、過去のデータを基に未来の値を予測するプロセスです。双方向LSTM(Long Short-Term Memory)ネットワークは、このタイプの問題に特に有効であり、過去の情報だけでなく、未来のコンテキスト(時系列データの場合は、前後のデータポイント)を考慮する能力があります。
目次
概要
時系列予測は、過去のデータを基に未来の値を予測するプロセスです。双方向LSTM(Long Short-Term Memory)ネットワークは、このタイプの問題に特に有効であり、過去の情報だけでなく、未来のコンテキスト(時系列データの場合は、前後のデータポイント)を考慮する能力があります。
必要なライブラリのインポートとデータの準備
from sklearn.preprocessing import StandardScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM, Bidirectional, Dropout
from tensorflow.keras.optimizers import Adam
import numpy as np
import pandas as pd
データの準備
データセットは、特徴量とターゲット変数を含むCSVファイルから読み込まれます。特徴量はモデルの入力として、ターゲット変数は予測対象として使用されます。
train_df = pd.read_csv("train.csv")
test_df = pd.read_csv("test.csv")
特徴量とターゲットの選択
トレーニングセットとテストセットに共通する特徴量のみを選択し、予測モデルの訓練に使用します。ターゲット変数は、予測したい数値です。
# 特徴量とターゲット変数を定義
common_features = set(train_df.columns).intersection(test_df.columns) - {'TARGET'}
X_train = train_df[list(common_features)].copy()
y_train = train_df['TARGET']
X_test = test_df[list(common_features)].copy()
データのスケーリングと整形
双方向LSTMモデルは、すべての入力特徴量が同じスケールにあることを前提としています。StandardScaler
を使用してデータを正規化し、適切な形状に変換します。
# データのスケーリング
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# LSTMに適した形状にデータを整形
X_train_scaled = X_train_scaled.reshape((X_train_scaled.shape[0], 1, X_train_scaled.shape[1]))
X_test_scaled = X_test_scaled.reshape((X_test_scaled.shape[0], 1, X_test_scaled.shape[1]))
モデルの設計
双方向LSTM層を含むシーケンシャルモデルを構築します。ここでは、2つの双方向LSTM層と2つのドロップアウト層を使用して、過学習を防ぎます。
model = Sequential([
Bidirectional(LSTM(50, return_sequences=True), input_shape=(X_train_scaled.shape[1], X_train_scaled.shape[2])),
Dropout(0.2),
Bidirectional(LSTM(50)),
Dropout(0.2),
Dense(1)
])
モデルのコンパイルとトレーニング
Adamオプティマイザーと平均二乗誤差を損失関数として使用してモデルをコンパイルします。その後、モデルをトレーニングデータにフィットさせます
model.compile(optimizer=Adam(learning_rate=0.001),loss='mean_squared_error')
history = model.fit(X_train_scaled, y_train, epochs=3, batch_size=32, validation_split=0.2, verbose=1)
予測の実行と結果の解析
最後に、テストデータセットに対して予測を行い、結果を解析します。
predicted = model.predict(X_test_scaled)
test_df['prediction'] = predicted.flatten()
まとめ
このプロセスを通じて、双方向LSTMを使用した時系列予測モデルの構築方法を詳細に説明しました。双方向LSTMは、時系列データの両方の方向からの情報を利用して予測精度を高めるために特に有効なモデルです。このモデルは多様な時系列予測タスクに応用可能であり、実際のビジネスシナリオや研究で有用な洞察を提供できます。