こちらのUdemyのコースでTensorflowを使ったビットコインの予測が紹介されていました。それを参考にドル円の予測をやってみました。
前回はConv1Dを使ったモデルを作りましたが、やはりベースラインとして作ったナイーブモデルに勝つことができませんでした。
今回はLSTMで実験していこうと思います。
データの作成はConv1Dと同じです。
また、LSTMが受け取れるようにshapeを変更する必要がある点もConv1Dの時と同じです。
import tensorflow as tf
from tensorflow.keras import layers
model_5 = tf.keras.Sequential([
layers.Lambda(lambda x: tf.expand_dims(x, axis=1)),
layers.LSTM(128, activation="relu"),
layers.Dense(1)
], name="model_5_lstm")
model_5.compile(loss="mae",
optimizer=tf.keras.optimizers.Adam())
model_5.fit(train_windows,
train_labels,
batch_size=128,
epochs=100,
verbose=0,
validation_data=(test_windows, test_labels),
callbacks=[create_model_checkpoint(model_name=model_5.name)])
もっともパフォーマンスが良かったモデルを読み込んで、評価してみます。
model_5 = tf.keras.models.load_model("model_experiments/model_5_lstm/")
model_5.evaluate(test_windows, test_labels)


MAEが48pipsということで、LSTMをしてもナイーブモデルに勝つことができませんでした。
Udemyのコースでは、この後ビットコインの半減期の情報を付加した複数変数での実験やアンサンブル予測などを行い、わずかにナイーブモデルを上回った結果を出していますが、目覚ましい結果は出ていません。
とりあえず、この実験シリーズはいったん終了し、別の方法でまたチャレンジしていこうと思います。