【競馬AI 11】予測したレースから購入すべき馬を選定する

競馬AI

レースの予測結果で上位の馬をすべて購入していたら必ず収支はマイナスになってしまいます。

そこで一定の閾値を設けて、その閾値を超えた馬を軸にして購入するなど工夫が必要です。

ではどのように閾値を設定すればよいかを説明します。

以下の記事で回収率が計算できます。

threshold“が閾値を表しているので、その値を変えて回収率が最大になる様に調整してみてください。

私のモデルでは閾値が0.85を超えた馬の回収率が高かったので、0.85あたりを閾値としています。

予測結果にマークを付けて出力する

1レースずつ予測結果を見て判断するのは大変だと思うので、一気に予測結果を確認し閾値を超えた馬にマークをつけて出力するコードを作成してみました。

閾値やマークなどは自由に変更してください。

import os
import pandas as pd
import re

# フォルダのパス
dir_path = "predict_result"
date = "20240106"
# フォルダ内のすべてのファイルとディレクトリを取得
all_items = os.listdir(dir_path)
# フォルダを除外して、ファイルのみのリストを作成
file_list = [item for item in all_items if os.path.isfile(os.path.join(dir_path, item))]

output_list = []
for path in file_list:
    match = re.search(r'race_data_(.*?)_\d+.csv', path)
    if match:
        extracted = match.group(1)
        output_list.append([extracted])
        output_list.append([ "自信度","馬番","馬","予測結果"])

        # 予測を行う新しいデータの読み込み
        data = pd.read_csv('predict_result/' + path)
        # '予測結果'列に基づいて降順でソート
        sorted_data = data.sort_values(by='予測結果', ascending=False)

        # sorted_dataから予測結果、馬番、馬の情報を取り出し、output_dfに追加
        for index, row in sorted_data.iterrows():
            confidence = ""

            # 条件を整理して可読性を向上させる
            # row のキーへのアクセスを変数に保存
            predicted_result = row["予測結果"]

            # 記号のランク順 (◎、〇、△) に条件を配置
            if predicted_result >= 0.85:
                confidence = "◎"
            elif predicted_result >= 0.8:
                confidence = "〇"
            elif predicted_result >= 0.75:
                confidence = "▲"

            output_list.append([confidence,row["馬番"], row["馬"],round(row["予測結果"], 5)])

        output_list.append([])

# 最後にリストからDataFrameを作成し、csvファイルとして出力
output_df = pd.DataFrame(output_list)
output_df.to_csv('output_' + date + '.csv', index=False)

出力結果を見ながら購入する馬を検討してみてください。

まとめ

だんだんと競馬の予想がしやすくなってきたのではないでしょうか?

私のAI競馬予想の結果を見ていただければわかると思いますが、閾値を超えた馬の単複を買うだけでは良くて回収率100%前後になってしまいます。

個人的な意見ですが、AI予想で軸を決め、相手は自身の予想を入れると当てやすくなるのではないかと考えています。

ぜひ試してみてください!

コメント