PJ38 馬脳 Umanou - プロジェクト総まとめ

競馬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

システム構成

JVLink COM Windows VM (UTM) Oracle 23ai Free ETL Pipeline LightGBM (LambdaRank + WinCls) Plackett-Luce + BPO Telegram Bot

LambdaRank V17b

着順ランキング学習(LightGBM lambdarank)。全馬を相対順位で予測する。Walk-Forward CV で 12 fold 評価。AUC 0.82-0.83。

0.5 ランダム
1.0 完璧

Binary WinCls V1

1着か否かの二値分類モデル。LambdaRank と異なり「勝ち切る力」に特化。アンサンブル最適重み: DIRT=0.00 / TURF=0.10。

Plackett-Luce + BPO

モデル予測確率 → 馬連(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 主体 微改善のみ

ベッティング戦略(7 → 3 に統合済)

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倍〜/無制限)

DIRTTURF
ベット数2,1302,026
ヒット83 (3.9%)68 (3.4%)
ROI127.1%112.0%

最適化 (30倍〜/3R日)

DIRTTURF
ベット数418348
ヒット30 (7.2%)24 (6.9%)
ROI145.2%159.2%

馬連は三連複よりヒット率が高い(top-2 vs top-3)が、配当は低い。ROI は安定して100%超。
PL版(_pl_multi_picks)で NL_O2 実オッズ照合して日次運用。

Phase 9: 大穴軸三連複最適化

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 感度分析

15 (採用)
DIRT 177% + TURF 167%
+244K
20
DIRT 185% + TURF 145%
+166K
25
DIRT 178% + TURF 101%
+74K
30 (旧)
DIRT 132% + TURF 151%
+44K
50
DIRT 276% + TURF 276%
+49K

バー長 = 合計利益(絶対額)。min_odds=50 は ROI 最高だがベット数少 = バリアンス大。
min_odds=15 は ROI を維持しつつ利益を最大化する最適点。

最適化 Before / After

Phase 8(旧パラメータ)

DIRTTURF
ベット数588499
ヒット率4.6%4.2%
ROI132.3%150.8%
利益+19,000+25,350

Phase 9(新パラメータ)

DIRTTURF
ベット数759807
ヒット率4.7%3.6%
ROI200.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頭33点少頭数 = 絞って勝負
9-12頭46点標準的なフィールド
13-16頭510点多頭数 = カバー範囲拡大
17-18頭615点フルゲート = 最大展開

フェーズ進捗

Phase 1-7 基盤構築 Phase 8 WinCls + Ensemble Phase 9 大穴軸最適化 Phase 10 Kelly + 検証

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 Freethin mode (macOS) / oracledb / BLOB setinputsizes 済稼働中
launchd毎土日 09:00 自動実行 / signal.alarm(3600) ハング対策稼働中
Telegram Botシグナル通知 / レースごとグループ表示稼働中
portproxy (Windows)JVLink auth lab (211.6.76.180-182:80) / リブート永続化済稼働中

教訓・判断記録

オッズは学習特徴量に絶対使わない

「オッズを見ない状態でモデルを作るべき」が原則。オッズはベッティング段階でのみ使う。モデルがオッズを学習すると市場と同じバイアスを持ってしまう。

芝とダートは常に分けて学習

走法・適性・コース特性が根本的に異なる。混合モデルは両方を平均化してしまい性能が落ちる。

PL三連複確率は実際の4倍過大評価する

Plackett-Luce は馬の独立性を仮定するが、現実の競馬では展開・馬場・枠順の相関がある。EV計算時にこのバイアスを理解しておく必要がある。

ROI最大 ≠ 利益最大

min_odds=50 は ROI 276% で最高だが、ベット数が少なすぎてバリアンスが高く絶対利益は少ない。min_odds=15 が ROI を維持しつつ利益を最大化する最適点。

DIRT を捨てるな

TURF vs DIRT のヒット率差は統計的に有意ではない(p=0.759)。モデルの識別力(Lift)はむしろ DIRT が上(5.1x vs 4.6x)。DIRT 除外はベット機会を半減させるだけ。

launchd StartInterval + ハングで全スキップ

Oracle接続ハングで signal.alarm() がないと全インターバルがスキップされる。Python側で必ずタイムアウトガードを入れること。

portproxy はリブートで消える

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