競馬予測の最終ステップは、「買う馬を選ぶ」こと。どんなにモデルの精度が高くても、実際に馬券を買う段階で迷ってしまうことは多いはずです。この記事では、予測確率が高く、期待値が100を超える「買う価値のある馬」だけを抽出するPythonスクリプトを紹介します。AIが出した大量の予測データから、自動で勝負できる馬をリストアップしてくれる仕組みです。
処理概要
このスクリプトは、データベースに格納された予測結果テーブル(p_predict_results)から、一定の条件を満たす馬のみを抽出し、CSVに出力します。
条件は以下の2つです。
- PRED_PROB(予測確率) ≥ 0.7
- 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が出した数値を「現実の買い目」に変える第一歩となるはずです。


コメント