#はじめに#
この記事は、ディープラーニングの勉強の一環です。
間違いなどはご指摘頂ければ幸いです。
以前の記事では、ニューラルネットワークで日経平均株価(終値)を予測をしましたが、今回は RNN(リカレントニューラルネットワーク)を用いて予測します。
今回のソースファイルはこちら
※この記事を参考にした取引によって発生した損害、またはトラブルについては、一切の責任を負いかねます。
#環境#
- Windows 7 Proffessional 64bit
- Python 3.6.7 (anaconda)
- TensorFlow 1.12.0
- Keras 2.2.4
#データについて#
以下については、以前の記事をご参照下さい。
だたし、今回はデータを標準化(平均 0, 分散 1)しています。
#訓練#
今回は LSTM を使用します。
エポック数は、以前の記事と同じ 3,000 としています。
過学習が発生するため、ドロップアウトを追加しています。
また、compile メソッドと fit メソッドは以前の記事と同じです。
from keras.models import Sequential
from keras.layers import Dense, LSTM, GRU
from keras.optimizers import RMSprop
model = Sequential()
model.add(LSTM(128,
dropout=0.2,
recurrent_dropout=0.2,
return_sequences=False,
input_shape=(None, X_train_std.shape[-1])))
model.add(Dense(1))
model.compile(optimizer=RMSprop(), loss='mae', metrics=['accuracy'])
result = model.fit(X_train_std, y_train_std,
verbose=0, ## 詳細表示モード
epochs=epochs,
batch_size=64,
shuffle=True,
validation_data=(X_valid_std, y_valid_std))
#予測(テスト)結果#
直近30日を予測(テスト用データを予測)した結果です。
二乗平均平方根誤差(RMSE)は 462.446
ニューラルネットワークで予測した以前の記事より精度が悪くなりました。
#GRU での予測(テスト)結果#
GRU でも予測をしました。
ソースファイルの変更は
model.add(LSTM(128,
dropout=0.2,
recurrent_dropout=0.2,
return_sequences=False,
input_shape=(None, X_train_std.shape[-1])))
モデルの LSTM を GRU に置換するだけ。
model.add(GRU(128,
dropout=0.2,
recurrent_dropout=0.2,
return_sequences=False,
input_shape=(None, X_train_std.shape[-1])))
##予測(テスト)結果##
二乗平均平方根誤差(RMSE)は 226.110 と LSTM より良くなりました。

#今後の課題#
さらなる精度向上のため、以下を検討します。
- 特徴量(説明変数)の数を増やす(例 過去30日分の株価 ⇒ 過去100日分の株価)
- RNN の中間層を増やす
- リカレント層のスタッキング