【競馬AI 14】期待値100超の馬を見逃すな!購入候補を自動抽出する

競馬AI

競馬予測の最終ステップは、「買う馬を選ぶ」こと。どんなにモデルの精度が高くても、実際に馬券を買う段階で迷ってしまうことは多いはずです。この記事では、予測確率が高く、期待値が100を超える「買う価値のある馬」だけを抽出するPythonスクリプトを紹介します。AIが出した大量の予測データから、自動で勝負できる馬をリストアップしてくれる仕組みです。

処理概要

このスクリプトは、データベースに格納された予測結果テーブル(p_predict_results)から、一定の条件を満たす馬のみを抽出し、CSVに出力します。
条件は以下の2つです。

  1. PRED_PROB(予測確率) ≥ 0.7
  2. EXPECTED_VALUE(期待値) ≥ 100

つまり、AIが「7割以上の確率で上位に来る」と予測し、かつ「回収率100%以上」が見込める馬だけをリストアップします。

※ここで言う7割は「対象のレースの中で」という意味ではなく、全馬の中での強さを表します。

この結果は、馬券を組み立てる“軸馬”の選定に使います。特に、単勝や馬連の軸を決める際に有効です。


プログラム全文

# save as: export_predict_results.py
import os
from datetime import datetime
import pandas as pd
from db.connection import get_connection  # あなたの既存ユーティリティ

SQL = """
SELECT 
    CONCAT(KAISAI, CAST(RACE_BANGO AS UNSIGNED), "R") AS "レース",
    CAST(UMABAN AS UNSIGNED) AS "馬番",
    BAMEI AS "馬名",
    NINKI AS "人気",
    ODDS_REAL AS "オッズ",
    PRED_PROB AS "予測結果",
    EXPECTED_VALUE AS "期待値"
FROM p_predict_results
WHERE (PRED_PROB >= 0.7 AND EXPECTED_VALUE >= 100)
"""

def main():
    os.makedirs("outputs", exist_ok=True)
    ts = datetime.now().strftime("%Y%m%d_%H%M")
    out_path = os.path.join("outputs", f"predict_results_{ts}.csv")

    print("📥 クエリ実行中...")
    with get_connection() as conn:
        with conn.cursor() as cur:
            cur.execute(SQL)
            rows = cur.fetchall()
            cols = [d[0] for d in cur.description]
            df = pd.DataFrame(rows, columns=cols)

    print(f"✅ 取得件数: {len(df):,} 行")
    df.to_csv(out_path, index=False, encoding="utf-8-sig", float_format="%.6f")
    print(f"💾 出力完了: {out_path}")

if __name__ == "__main__":
    main()

解説

1. SQLで条件抽出

コードの心臓部は、以下のSQL文です。

WHERE (PRED_PROB >= 0.7 AND EXPECTED_VALUE >= 100)

この条件により、「予測確率が高く、なおかつ期待値がプラス」の馬のみが抽出されます。
期待値100というのは、“理論的に元が取れるライン”を意味します。
たとえば期待値120なら、長期的に見て1万円賭ければ1万2000円戻る
という計算になります。


2. 出力形式と保存先

結果は自動でoutputsフォルダに保存され、ファイル名には**実行日時(例:predict_results_20251110_2300.csv)**が付きます。
これにより、過去の抽出結果を時系列で管理できます。
出力形式はUTF-8(BOM付き)なので、Excelで文字化けせずに開けるのもポイントです。

ポイント

条件を変えれば戦略が変わる

PRED_PROB >= 0.7はあくまで目安です。
もし的中率を重視するなら、0.8以上に上げるとより堅実になります。
逆に、回収率を狙いたいなら0.6程度に緩めて多めに買い目を拾うのも戦略です。

また、EXPECTED_VALUE >= 100は「理論上プラスのライン」。
あなたのモデルが強ければ、90〜95程度でも十分に期待できるケースもあります。

実戦投入時の使い方

抽出されたCSVをもとに、次のような馬券戦略を立てられます。

  • 単勝派 → 予測確率上位1頭に集中投資
  • 馬連派 → 抽出馬のうち、同一レースに2頭以上該当する場合のみ購入
  • 3連複派 → 抽出馬+人気薄1頭で組み合わせ

特にAIモデルが強い場合、「期待値100以上」×「確率0.7以上」は鉄板級の組み合わせです。


まとめ

このスクリプトは、AI予測の結果から「買うべき馬」だけを残す最終フィルターです。
条件を変えることで、堅実型にもハイリスク型にも調整できる柔軟性があり、
自分の戦略スタイルに合わせて調整できます。

手動でExcelを開いて並べ替えたりする必要はもうありません。
Pythonが自動で、「今日勝負すべき馬」を抽出してくれる。
その仕組みを持っているだけで、競馬の判断スピードと精度は一段上がります。


最後に一言

競馬AIの本質は「未来を当てること」ではなく、「長期的に勝てる仕組みを作ること」です。
このスクリプトはまさにその仕組みの中核。
あなたのAIが出した数値を「現実の買い目」に変える第一歩
となるはずです。

コメント