④定期的に予測結果を表示するプログラムを作る

前回までで、為替を予測するモデルの学習を行いました。

今回は、学習したモデルを使って、定期的に予測結果を表示するプログラムを作っていきます。

実装

では、さっそく実装していきましょう!
今回は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関数を定期的に呼び出します)

これでソースコードは終わりです!お疲れ様です。

プログラムの実行

では、ソースコードを実行してみましょう!

以下のようにグラフが出力され、定期的に更新されていくのがわかると思います!

後はこれを見ながら取引していくといった感じですね

終わりに

長くなりましたが、ここまでで予測プログラムを作成できました。

もちろん今回の方法ではうまく予測できないと思います。
なのでここをベースに改良していっていただければと思います!

ちなみにこのプロジェクトのトップページは

タイトルとURLをコピーしました