競馬AI予想 | JVLink COM + Oracle 23ai + LightGBM | Phase 9 完了・3戦略統合 | 2026-05-20 時点
大穴軸 DIRT ROI (BT)
200.2%
759 bets / 36 hits (4.7%)
大穴軸 TURF ROI (BT)
128.7%
807 bets / 29 hits (3.6%)
LambdaRank AUC (DIRT)
0.8236
V17b Walk-Forward CV
LambdaRank AUC (TURF)
0.8302
V17b Walk-Forward CV
合計期待利益 (BT 12ヶ月)
+99,240
DIRT +76,040 / TURF +23,200
着順ランキング学習(LightGBM lambdarank)。全馬を相対順位で予測する。Walk-Forward CV で 12 fold 評価。AUC 0.82-0.83。
1着か否かの二値分類モデル。LambdaRank と異なり「勝ち切る力」に特化。アンサンブル最適重み: DIRT=0.00 / TURF=0.10。
モデル予測確率 → 馬連(umaren_prob) + 三連複(sanrenpuku_prob) の組合せ確率を理論計算。BPO で EV ベースの買い目を最適化。3戦略(単勝EV/馬連PL/大穴軸三連複)に統合済。
単勝15倍以上の穴馬を軸に、モデル上位馬との三連複を買う戦略。軸がEV降順で選ばれ、相手は頭数に応じて動的に調整される。
| モデル | タイプ | AUC (DIRT) | AUC (TURF) | 単勝EV (DIRT) | 単勝EV (TURF) | ステータス |
|---|---|---|---|---|---|---|
| LambdaRank V17b | Ranking | 0.8236 | 0.8302 | 125.3% | 105.0% | 本番稼働中 |
| Binary WinCls V1 | Classification | 0.8206 | 0.8154 | 78.0% | 87.9% | 補助モデル |
| Ensemble (最適w) | Weighted Avg | DIRT w=0.00 / TURF w=0.10 | LambdaRank 主体 | 微改善のみ | ||
Phase 9 で ROI 負けの4戦略(単勝PL / ワイドPL / 三連複ボックス / フォーメーション軸1頭)を削除。残る3戦略に集中。
| 戦略 | 条件 | 計算方法 | BT ROI (DIRT) | BT ROI (TURF) | ステータス |
|---|---|---|---|---|---|
| 単勝 EV (Kelly) | EV ≥ 1.20 / 4-15倍 | NL_O1 実オッズ × モデル確率 | 125.3% | 105.0% | 稼働中 |
| 馬連 PL | PL pair prob × NL_O2 EV | Plackett-Luce umaren_prob | 145.2% | 159.2% | 稼働中 |
| 大穴軸三連複 | 15倍〜 / EV≥3.0 / 3R/日 | EV降順 + 動的相手 + C(N,2) | 200.2% | 128.7% | Phase9 最適化済 |
| 戦略 | 削除理由 |
|---|---|
| 単勝 PL | 単勝EV (Kelly) と重複。Kelly版の方がベットサイジング最適化済。 |
| ワイド PL | 三連複と本質的に同じモデル(PL)で計算。控除率が高い割にリターンが低い。 |
| 三連複ボックス | 大穴軸三連複の下位互換。上位3頭BOXはROI低い。 |
| フォーメーション軸1頭 | ROI が常に100%以下。大穴軸の方が圧倒的に優位。 |
大穴軸三連複と同じロジック(15倍〜/EV≥3/3R日制限)を馬連に適用。HJA実払戻照合。
デフォルト (15倍〜/無制限)
| DIRT | TURF | |
|---|---|---|
| ベット数 | 2,130 | 2,026 |
| ヒット | 83 (3.9%) | 68 (3.4%) |
| ROI | 127.1% | 112.0% |
最適化 (30倍〜/3R日)
| DIRT | TURF | |
|---|---|---|
| ベット数 | 418 | 348 |
| ヒット | 30 (7.2%) | 24 (6.9%) |
| ROI | 145.2% | 159.2% |
馬連は三連複よりヒット率が高い(top-2 vs top-3)が、配当は低い。ROI は安定して100%超。
PL版(_pl_multi_picks)で NL_O2 実オッズ照合して日次運用。
Walk-Forward CV 12ヶ月 (2023) / HJC実払戻照合済 / Opus 4.6 分析
| パラメータ | Phase 8 (旧) | Phase 9 (新) | 根拠 |
|---|---|---|---|
oana_min_odds |
30.0 | 15.0 | ベット機会3倍増・ROI維持・絶対利益3-5x増 |
min_ev |
1.0 | 3.0 | ROI +5-13pp 改善・低EV軸を除外 |
partner_sort |
ev | ev(維持) | rank sort は ROI 低下(-15pp) |
dynamic_partner |
True | True(維持) | fixed より ROI +15pp |
max_races_per_day |
3 | 3(維持) | 5R/日は ROI -5〜8pp 低下 |
| 日次レース選択基準 | axis_ev |
pl_trio_prob |
backtest の ev_trio 選択に近似・理論的に整合 |
バー長 = 合計利益(絶対額)。min_odds=50 は ROI 最高だがベット数少 = バリアンス大。
min_odds=15 は ROI を維持しつつ利益を最大化する最適点。
Phase 8(旧パラメータ)
| DIRT | TURF | |
|---|---|---|
| ベット数 | 588 | 499 |
| ヒット率 | 4.6% | 4.2% |
| ROI | 132.3% | 150.8% |
| 利益 | +19,000 | +25,350 |
Phase 9(新パラメータ)
| DIRT | TURF | |
|---|---|---|
| ベット数 | 759 | 807 |
| ヒット率 | 4.7% | 3.6% |
| ROI | 200.2% | 128.7% |
| 利益 | +76,040 | +23,200 |
| 設定 | ベット数 | ヒット率 | 95% CI (ヒット率) | ROI | P(ROI>100%) |
|---|---|---|---|---|---|
| TURF 30+ | 499 | 4.2% | [2.8%, 6.3%] | 150.8% | 96.0% |
| DIRT 30+ | 588 | 4.6% | [3.2%, 6.6%] | 132.3% | 90.0% |
| TURF 15+ | 1,722 | 3.1% | [2.4%, 4.0%] | 167.1% | 99.9% |
| DIRT 15+ | 1,662 | 2.9% | [2.2%, 3.9%] | 177.4% | 100.0% |
min_odds=15 に拡大することで P(ROI>100%) が 90-96% → 99.9-100% に跳ね上がる。
TURF vs DIRT のヒット率差は統計的に有意ではない(p=0.759)→ 両方使用が正解。
| 出走頭数 | 相手数 (partner_rank) | C(N,2) 買い目数 | 根拠 |
|---|---|---|---|
| ≤ 8頭 | 3 | 3点 | 少頭数 = 絞って勝負 |
| 9-12頭 | 4 | 6点 | 標準的なフィールド |
| 13-16頭 | 5 | 10点 | 多頭数 = カバー範囲拡大 |
| 17-18頭 | 6 | 15点 | フルゲート = 最大展開 |
Phase 1-7
基盤構築
JVLink COM → Oracle ETL → LightGBM LambdaRank → PL/BPO → Telegram通知 → launchd自動実行
Phase 8 (5/19)
Binary WinCls + Ensemble + 市場オッズEV統合
WinCls V1 訓練(DIRT/TURF各独立)/ Ensemble最適重み確定 / NL_O1・O2・O5 実オッズによる実EV計算
Phase 9 (5/20) ← 現在
大穴軸最適化 + 戦略統合 7→3
Opus 深掘り分析 / min_odds 30→15 / min_ev 1.0→3.0 / 日次選択基準を pl_trio_prob に統一
馬連バックテスト追加(DIRT 145%/TURF 159% ROI)
戦略統合: 単勝PL/ワイド/三連複BOX/フォーメーション削除 → 3戦略に集中
backtest: 大穴軸 DIRT ROI 200.2% / TURF ROI 128.7% / 合計利益 +99,240
5/24(土)
シャドーラン開始
launchd 毎土日 09:00 自動実行。新パラメータで100bet蓄積を目標
Phase 10(予定)
1/4 Kelly ベットサイジング + シャドー検証
bankroll × 0.003/点 / EV≥8 増額ゾーン / 夏場パフォーマンス追跡 / WinCls axis_confidence フィルタ
| コンポーネント | 詳細 | ステータス |
|---|---|---|
| keiba-vm (UTM Windows) | JVLink COM データ取得 / portproxy タスクスケジューラ永続登録済 | 稼働中 |
| Oracle 23ai Free | thin mode (macOS) / oracledb / BLOB setinputsizes 済 | 稼働中 |
| launchd | 毎土日 09:00 自動実行 / signal.alarm(3600) ハング対策 | 稼働中 |
| Telegram Bot | シグナル通知 / レースごとグループ表示 | 稼働中 |
| portproxy (Windows) | JVLink auth lab (211.6.76.180-182:80) / リブート永続化済 | 稼働中 |
「オッズを見ない状態でモデルを作るべき」が原則。オッズはベッティング段階でのみ使う。モデルがオッズを学習すると市場と同じバイアスを持ってしまう。
走法・適性・コース特性が根本的に異なる。混合モデルは両方を平均化してしまい性能が落ちる。
Plackett-Luce は馬の独立性を仮定するが、現実の競馬では展開・馬場・枠順の相関がある。EV計算時にこのバイアスを理解しておく必要がある。
min_odds=50 は ROI 276% で最高だが、ベット数が少なすぎてバリアンスが高く絶対利益は少ない。min_odds=15 が ROI を維持しつつ利益を最大化する最適点。
TURF vs DIRT のヒット率差は統計的に有意ではない(p=0.759)。モデルの識別力(Lift)はむしろ DIRT が上(5.1x vs 4.6x)。DIRT 除外はベット機会を半減させるだけ。
Oracle接続ハングで signal.alarm() がないと全インターバルがスキップされる。Python側で必ずタイムアウトガードを入れること。
netsh interface portproxy は Windows リブートで揮発する。タスクスケジューラで SYSTEM/AtStartup に永続登録が必須。
| 優先度 | 施策 | 期待効果 | 工数 | 判定 |
|---|---|---|---|---|
| 1 | シャドーラン 100bet 蓄積 | 実戦データで BT 結果を検証 | 自動(launchd) | 5/24 開始 |
| 2 | 1/4 Kelly ベットサイジング | bankroll 成長率最適化 / 破産確率 0% | 中 | Phase 10 |
| 3 | EV ≥ 8 ゾーン増額 | 高確信ベットに資金集中 / +10-20pp | 小 | 要検証 |
| 4 | WinCls axis_confidence フィルタ | 二重合意フィルタで精度向上 / +5-10pp | 大(CV予測出力追加) | INVESTIGATE |
| 5 | 夏場(7-10月)パフォーマンス追跡 | 荒れやすい時期の傾向確認 | 小(フラグ追加) | INVESTIGATE |