前回までで、為替を予測するモデルの学習を行いました。
今回は、学習したモデルを使って、定期的に予測結果を表示するプログラムを作っていきます。
実装
では、さっそく実装していきましょう!
今回は5分に1回データを取得して、次の終値を予想していきます。
まず必要なライブラリのインポートします。
import schedule
import time
from IPython.display import display, clear_output
次に前回までに学習した予測モデルを読み込みます。
model_json = json.load(open(MODEL_PATH))
model = tensorflow.keras.models.model_from_json(model_json)
model.load_weights(WEIGHTS_PATH)
model自体はjson形式で保存したのでjsonモジュールを使って読み込みます。
jsonからmodelを生成するために、model_from_jsonメソッドを使っています。
そして、modelのload_weightsによってモデルの重みを読み込みます。
次に予測をグラフ化するためにmatplotlibのfig,axの作成などをします。
plt.ion()
fig, ax = plt.subplots()
次に一度予測するメソッドを作ります。
def predict():
prices = get_data(GRANULARITY, 100, 1)
prices_for_input = sc.fit_transform(prices)
# 実際の値と評価値を比較する
input_value = np.array([prices_for_input[-INPUT_LEN:]])
# 予想値
predicted_value = model.predict(input_value)
predicted_value = sc.inverse_transform(predicted_value)[0]
x = np.arange(len(prices))
# 実際の値のプロット
clear_output(wait=True)
ax.clear()
ax.plot(x, prices, label="real")
ax.scatter([x[-1] + 1], predicted_value,
color="r", label="predicted_value")
ax.legend()
display(fig)
print("predicted_value:", predicted_value)
まず、2行目で直近のデータの取得を行います。
学習の際に、データを正規化したので、今回も取得したデータを0〜1の間の値に正規化します。
そして、5〜6行目で正規化したデータのうち入力分だけ取り出して、modelにデータを流し込み予測値を計算します。
予測値も正規化されているので、8行目でinverse_transformを使って実際の値に戻してあげます。
そして、11行目以降でプロット(画像を作成)していきます。
このままだと一度予測しただけで終わってしまうので
上のpredictメソッドを定期的に呼び出すように実装してみます。
schedule.every(0.1).minutes.do(predict)
while True:
schedule.run_pending()
time.sleep(1)
ここでは、scheduleモジュールを使って定期的に実行するようにします。
schedule.every(5).minutes.do()とすることで5分毎にdoに渡した関数を実行してくれます。
(ここでいうとpredict関数を定期的に呼び出します)
これでソースコードは終わりです!お疲れ様です。
プログラムの実行
では、ソースコードを実行してみましょう!
以下のようにグラフが出力され、定期的に更新されていくのがわかると思います!
後はこれを見ながら取引していくといった感じですね
終わりに
長くなりましたが、ここまでで予測プログラムを作成できました。
もちろん今回の方法ではうまく予測できないと思います。
なのでここをベースに改良していっていただければと思います!
ちなみにこのプロジェクトのトップページは