🐴 馬脳 Umanou

進捗全体図 — どこまでできて・何が残っているか
2026-05-19 更新 / Phase 8 完了・シャドーラン準備完了
フェーズ進捗
1
基盤構築
2
データ収集
3
ETL
4
V1-V14
学習
5
LambdaRank
V17b
6
Calibration
+ EV
7
Telegram
+launchd
8
PL多券種
+ 実EV
9
シャドー
ラン
10
フロント
+ 課金
11
実ベット
β公開
✅ Phase 8 完了 (2026-05-19) 🎯 大穴軸三連複バックテスト完了 (2026-05-19) 📡 Phase 9 シャドーラン (2026-05-24〜) ✅ launchd 土日09:00 自動発火 ✅ keiba-vm portproxy 永続化済み ✅ JRDB HJA/HJC パーサー実装済み ⚠️ 実エッジ未検証 — 要 200-300 bet 🚧 フロントエンド 未着手
モデル性能指標(Phase 8 確定値)
0.8236
AUC — LambdaRank V17b ダート
Walk-forward CV 4fold / 36m window
EV回収率 125.3%(CV)
0.8302
AUC — LambdaRank V17b 芝
Walk-forward CV 4fold / 36m window
EV回収率 105.0%(CV)
0.00
Ensemble w_wincls — ダート
LambdaRank 単体が最強
WinCls 混合でEV低下 → w=0確定
0.10
Ensemble w_wincls — 芝
10%混合でEV +3pp
107.9%(VS 単体 104.9%)
125.3%
EV回収率(ダート CV)
threshold EV≥1.2 / オッズ 4〜15倍
backtest値。実EV未検証
105.0%
EV回収率(芝 CV)
ダートより低いが理論上プラス
実EV検証が必要
大穴軸三連複戦略バックテスト — WF-CV 46,212行 × Oracle RACE_RESULTS (2023-2024)

戦略: モデルが高ランク(rank≤4)と評価した大穴馬(高オッズ)を三連複軸に据え、モデル上位2頭を相手に固定するフォーメーション。
オッズは学習特徴量として一切使用しない(EV計算レイヤーのみ)。EV_trio はPlackett-Luce理論値 × 市場推定オッズ。JRDB HJCで実検証予定。

オッズ帯(軸) トラック ベット数 軸 top-3率 三連複ヒット率 推定tri_odds EV_trio (PL推定)
60〜150倍(超大穴) ダート 28点/年 64.3% 21.4% 332倍 5.29x
60〜150倍(超大穴) 18点/年 55.6% 11.1% 645倍 16.77x
30〜60倍(大穴) ダート 88点/年 21.6% 8.0% 126倍 2.78x
30〜60倍(大穴) 78点/年 23.1% 6.4% 204倍 6.02x
15〜30倍(中穴) ダート 466点/年 26.8% 5.8% 73倍 1.49x
15〜30倍(中穴) 456点/年 24.3% 3.9% 74倍 2.90x
⚠️ EV_trioはPlackett-Luce理論推定値。JRDB HJCパーサーで実際の払戻を検証予定。超大穴はサンプル数が少なく信頼区間が広い。
EV 1.49〜16.8x
PL推定三連複EV (オッズ帯別)
46点/月
ダート中穴軸 月次ベット数(推定)
JRDB HJC要検証
実際の払戻オッズで再計算必要
完了していること / していないこと
✅ 完了していること
🗄️
インフラ (Oracle 23ai + JVLink) keiba-vm (Hyper-V) + Oracle Docker + JVLink COM 接続確立。portproxy タスクスケジューラ永続登録済み。リブート後も自動復元。
📦
歴史データ収集 (V14 完了) SE/RA/UM/JO/CH/KKA/UKC/BAC 230,686行 backfill。NL_O1(単勝オッズ)2020-2026 全6年分 285,355行。
🔧
特徴量エンジニアリング V17: 72列 馬・騎手・調教師の直近成績 + 馬場状態 + レース条件エンコーディング。JRDB BAC (条件戦レベル等) も統合。
🤖
LambdaRank V17b CV AUC 0.82+ 芝・ダート 2モデル分離。Walk-forward CV 4fold。Calibration (Isotonic) 適用。
🎲
Binary WinCls V1 + Ensemble LGBMClassifier → 最適混合比: ダート w=0.00 / 芝 w=0.10。race_signal_today.py に自動選択実装済み。
📊
Plackett-Luce 多券種EV計算 単勝・馬連・三連複ボックス・三連複フォーメーション(軸1頭) の 4券種。BPO (BettingPortfolioOptimizer) 実装。corr_shrink=0.85。
💴
実EV統合 (NL_O1/O2/O5) 単勝: NL_O1 TANODDS (2020〜 全6年) → 実EV常時動作。馬連/三連複: NL_O2/O5 当日確定オッズ → 土日リアルタイム実EV。
🔔
Telegram 通知 + launchd 自動実行 稼働中 毎土日 09:00 に run_race_signal.sh が自動発火。芝/ダート 両モデルでシグナルを生成 → Telegram 送信。
📄
scripts/ingest_o2o5_from_vm.sh keiba-vm から NL_O2/O5 pkl を SCP → dry-run → Oracle 投入 → 検証 まで自動化。
🎯
大穴軸三連複戦略 バックテスト + 実装 2026-05-19 backtest_oana.py 新規作成 → WF-CV 46,212行 × Oracle RACE_RESULTS(kakutei_jyuni) JOIN で大穴帯別 top-3 ヒット率と三連複EV を計算。race_signal_today.py に _oana_axis_picks() 組み込み。
🗂️
JRDB HJA/HJC パーサー実装 2026-05-19 三連複(HJC)・馬連(HJA)払戻データパーサー + Oracle ローダー + FTP ダウンローダー対応完了。直近5年分で実際の払戻オッズを取得予定。
📊
ワイド (wide) 券種 + Oracle GTT 高速化 2026-05-19 race_signal_today.py に wide推奨を追加(PL計算は既存実装)。backtest_oana.py の Oracle IN句 (8分超) を GLOBAL TEMPORARY TABLE JOIN 方式で高速化。
🔲 できていないこと
📡
シャドーランデータ蓄積 進行中 2026-05-24 (土) から開始。単勝・馬連・三連複フォーメーション・大穴軸フォーメーションの全券種で追跡。実エッジ検証には 200〜300 bet 以上が必要。
💴
JRDB HJC 5年分取得 → 実EV再計算 最優先 HJCパーサー実装済み。ftp_downloader --types HJC HJA --from 2021-01-01 で5年分取得 → backtest_oana.py の推定trio_oddsを実際の払戻金額で置き換え → EV精度向上。
🖥️
フロントエンド (Cloudflare Pages) 未着手 シグナルをユーザーに届ける UI。PJ33 BoatRelation の 40% 転用予定。Stripe 決済 ¥2,980/月。
💰
実ベット 未着手 シャドーラン 200〜300 bet を蓄積し実エッジを確認してから開始。大穴軸は試算 EV 1.5〜16x と高いが実払戻での検証が先。
📈
O2/O5 歴史バックフィル 断念 JRA-VAN は馬連/三連複オッズを 直近2週分のみ配布(仕様上の制約)。JRDB HJA/HJC が代替データソース。
👥
βユーザー招待 未着手 フロントエンド完成後に少数招待。フィードバック収集と有料転換の検証。
📉
三連単 (sanrentan) race_signal 組み込み PL計算は実装済み。race_signal_today.py への三連単推奨出力が残タスク。
🔄
月次リトレイン自動化 現在は手動で train_dirt.py を実行。launchd で月次自動化する予定。
Oracle DB — データ量サマリ
テーブル 内容 行数 期間 実EV
NL_O1 単勝確定オッズ 285,355 2020〜2026(6年) ✓ 常時
NL_O2 馬連確定オッズ 13,384 2026-05-02〜05-10 (8日) 土日のみ
NL_O5 三連複確定オッズ 57,061 2026-05-02〜05-10 (8日) 土日のみ
SE (競走成績) 着順・タイム・馬体重等 〜230,686 V14 フル
RA / UM / JO / CH レース・馬・騎手・調教師マスタ 各数万〜 V14 フル
JRDB BAC 条件戦レベル・コース・向き 22,048 races 学習期間全域
シャドーラン結果 当日シグナル・picks 0 2026-05-24〜開始予定
インフラ状態
launchd 自動実行
ジョブcom.reraflow.umanou-collector
発火時刻土日 09:00 JST
スクリプトops/run_race_signal.sh
芝/ダート両モデル自動選択
Telegram送信済み ✓
keiba-vm (Hyper-V)
接続ssh keiba-vm (192.168.64.3)
JVLink portproxyタスクスケジューラ永続化 ✓
タスク名JVLink_PortProxy_Setup
authlab211.6.76.180-182:80
jrvltsql週次 NL_O2/O5 更新
EV 判定ロジック
thresholdEV ≥ 1.20
オッズ範囲4〜15倍
corr_shrink0.85 (保守的)
実EV (NL_O1)常時 ✓
実EV (NL_O2/O5)土日のみ (当日確定後)
フロントエンド (未着手)
予定Cloudflare Pages
決済Stripe ¥2,980/月
転用元PJ33 BoatRelation 40%
着手時期シャドーラン結果確認後
状態🚧 未着手
これからやること(ロードマップ)

📍 Phase 9 以降 — ロードマップ

NOW
Phase 9 — シャドーラン蓄積 自動実行中
2026-05-24 (土) 09:00 から launchd が毎週末自動発火。Telegram にシグナルを通知。
目標: 200〜300 bet 蓄積 (5〜10週間)。
集計: シグナル的中率 / EV分布 / 券種別ROI を signal_history.tsv に蓄積。
→ 統計的有意差が確認できたらフロントエンド工程に移行。
10
Phase 10 — シャドーラン結果分析 + モデル再評価
200 bet 蓄積後に実勝率 vs 予測確率の乖離を分析。
EV帯別 ROI、券種別パフォーマンス、芝/ダート比較。
→ 必要に応じてハイパラ調整 or 特徴量追加。
11
Phase 11 — フロントエンド (Cloudflare Pages)
PJ33 BoatRelation の実装を 40% 転用。Stripe 決済 ¥2,980/月。
シグナル表示 UI + マイページ + 過去成績 + Telegram 連携設定。
着手条件: シャドーランで実エッジ確認後。
12
Phase 12 — βユーザー招待 + 実ベット
少数のβユーザーを招待して有料転換を検証。
自身も実ベット開始 (Kelly 基準 × 小額)。
月次リトレイン自動化 (launchd) を実装。
13
Phase 13 — 本番公開 + マーケティング
正式公開。X / SEO / Qiita 記事でのグロース。
PJ33 BoatRelation との ARR 合算管理。
重要な前提と注意点
オッズは学習特徴量に絶対使わない — モデルは馬の能力・状態のみで予測。オッズは事後的にEV計算にのみ使用(モデルと市場が独立した判断者として機能することで、純粋なエッジ検出が可能になる)。
芝とダートは常に別モデル — 学習・推論・EV計算・Telegram通知 すべて分離。run_race_signal.sh が当日の出走条件を見て自動選択。

⚠️ 現時点でエッジは「仮説」

CV EV回収率 125.3% (ダート) は Walk-forward の統計値。実世界では
過去の市場流動性・当日のオッズ変動・ジョッキー乗り替わり等のノイズが存在する。

シャドーランで 200〜300 bet 積み、実勝率と予測確率の乖離が有意に確認されるまでは「仮説」として扱う。
OOF 2660 bet での実エッジは -0.006(ノイズレベル)— 過信は禁物。