こちらのUdemyのコースでTensorflowを使ったビットコインの予測が紹介されていました。それを参考にドル円の予測をやってみました。
前回は直近30日間の終値から次の日の終値を予測するというモデルを作りました。
結果はMAEが63ということで、ベースラインとして作ったナイーブモデルより悪い結果で、さらに、直近7日間の終値を使った場合のMAE48よりも悪い結果となりました。
今回の実験はConv1Dを使ったものです。早速やっていきましょう。
まずデータの作成ですが、直近30日分の終値を使った場合よりも7日分のほうが結果はよかったので、今回も7日間の終値から翌日の終値を予測するということにしたいと思います。
以前と同じように作ります。
モデルの作成は次のようになります。
import tensorflow as tf
from tensorflow.keras import layers
model_4 = tf.keras.Sequential([
layers.Lambda(lambda x: tf.expand_dims(x, axis=1)),
layers.Conv1D(filters=128, kernel_size=5, padding="causal", activation="relu"),
layers.Dense(1)
], name="model_4_conv1D")
model_4.compile(loss="mae",
optimizer=tf.keras.optimizers.Adam())
model_4.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_4.name)])
ポイントは5行目でConv1Dに渡せるようにshapeを変更している点です。
もっともパフォーマンスが良かったモデルを読み込んで、評価してみます。
model_4 = tf.keras.models.load_model("model_experiments/model_4_conv1D")
model_4.evaluate(test_windows, test_labels)
MAEは48pipsということで、やはりナイーブモデルに勝つことはできませんでした。
次回もまた実験を続けていきます!