ディープラーニングで作る世界一シンプルでわかりやすい競馬予想AI③(予測編)
今回は「競馬の着順(1〜18着)を予測するディープラーニングモデルを作成する」シリーズの最終回です。今後、3回分をまとめた記事も投稿予定なので、まずは大まかに知りたい方はそちらをご覧ください。
それでは、予測に使うデータを用意します。今回は2024年10月13日(日)に行われた秋華賞のデータをサンプルとして使用します。
オッズは確定前のもので、執筆時点のオッズを使用しています。
次に、予測するためのコードを見ていきましょう。今回はわずか6行です。
from tensorflow.keras.models import load_model
# 新しいテストデータを用意
new_df = pd.read_csv("/content/drive/MyDrive/sample/race.csv", encoding="utf-8")
new_test_x = new_df.iloc[:, 1:]
# モデルを読み込む
best_model = load_model('/content/drive/MyDrive/sample/best_model.keras')
# モデルの予測結果を取得
new_y_pred = best_model.predict(new_test_x)
#結果を表示
print(new_y_pred)
1行ずつ見ていきましょう。
from tensorflow.keras.models import load_model
tensorflow.keras.modelsからload_model関数をインポート。保存済みのKerasモデルを読み込むために使用します。
# 新しいテストデータを用意
new_df = pd.read_csv("/content/drive/MyDrive/sample/race.csv", encoding="utf-8")
pd.read_csvを使って、指定されたパスから新しいテストデータをCSV形式で読み込みます。new_dfというデータフレームに格納します。
encoding="utf-8"は、ファイルがUTF-8エンコーディングであることを指定しています。
new_test_x = new_df.iloc[:, 1:]
new_dfから1列目以降のデータ(特徴量部分)を選択してnew_test_xに格納。ターゲット変数(最初の列)は含まれていません。
# モデルを読み込む
best_model = load_model('/content/drive/MyDrive/sample/best_model.keras')
load_modelを使って、指定されたファイルパスから保存されたベストモデル(best_model.keras)を読み込み、best_modelという変数に格納します。このモデルは、以前に訓練して保存されたものです。
# モデルの予測結果を取得
new_y_pred = best_model.predict(new_test_x)
best_model.predictを使用して、new_test_x(新しいテストデータ)に対する予測を行います。結果はnew_y_predに格納されます。
new_y_predは、各クラスに対する確率などの予測値が含まれている配列となります。
#結果を表示
print(new_y_pred)
予測結果new_y_predをコンソールに出力します。この値は、モデルが新しいデータに対してどのように予測したかを確認するために使われます。
出力結果の例を見てみましょう。
この表は、縦が馬番、横が着順に対応しています。例えば、1番の1着確率は1.2e-2、2着確率は3.0e-6などです。
今回は15頭の出走なので、16着以降の結果はあり得ません。また、このモデルは各馬の単独予測に基づいているため、他の馬との相対比較は行いません。
次に、この15頭が戦った場合の予測確率を整形した結果です。
オッズに近い結果が出ており、オッズが予測に影響している可能性がありますが、オッズだけではない要素もあるようです。この結果をもとに、期待値の高い馬を見つける手助けになるかもしれません。
ここまでが「世界一シンプルでわかりやすい競馬予想AI」の作成手順でした。さらに工夫すれば精度を向上させることが可能ですが、今回はできる限りシンプルに解説しました。
もし、精度向上の方法に興味があれば、続編も書く予定ですのでご期待ください。最後までお読みいただきありがとうございました!
※第1回から第3回までをまとめた記事も作成しますので、すぐに実装したい方はそちらをご覧ください。