馬脳 (Umanou) 運用フロー

LightGBM LambdaRank / JVLink COM + JRDB + Oracle 23ai Free / 最終更新: 2026-05-22 v4

🎯 シャドーラン準備中(5/24〜) V28 LambdaRank (soft) — 全フラグ ON / 3variant比較勝利 ダート AUC=0.8976 / 芝 AUC=0.8922 (WF-CV 5fold soft)

① インフラ構成

keiba-vm(Windows 11 / UTM仮想マシン)

  • 1
    JVLink COM — JRA公式データフィード
    NL_RA (出馬表) / NL_SE (成績) / NL_O1 (単勝オッズ) / NL_O2 (馬連オッズ) → Oracle 23ai 直接INSERT
    jrvltsql 1.0.0.1 バイナリ実行
  • 2
    portproxy — ネットワーク疎通
    211.6.76.180-182:80(JRA認証サーバー)への転送
    ⚠️ リブートで揮発 → register_portproxy_task.ps1 で永続化済み

Mac mini(ホスト / 本番実行環境)

  • 1
    Oracle 23ai Free — Docker :1521/FREEPDB1
    umanou スキーマ: NL_RA / NL_SE / NL_O1 / NL_O2 / JRDB_* / RACES / RACE_ENTRIES / ODDS_TAN view
    Graph テーブル: pedigree_edges / h2h_matchups / horse_graph_score / pedigree_embedding
  • 2
    Python 3.9 + LightGBM + oracledb (thin mode)
    ~/workspace/pj/PJ38_Umanou/
  • 3
    launchd — 5 plist 登録済み
    race-signal / jrdb-weekly / baba-scraper / odds-archive / train-lambdarank

② データパイプライン

データソース 3 系統

JVLink(NL_RA/SE/O1/O2 — 公式レース・成績・オッズ)+ JRDB(SED/SKB/KYI/HJA/HJC — 成績詳細・払戻)+ 馬場情報(baba_condition — JRA HP スクレイピング)

週次(金曜 05:00)

JVLink → Oracle

  • 1
    keiba-vm jrvltsql 実行
    NL_RA / NL_SE / NL_O1 / NL_O2 → Oracle直接INSERT
  • 2
    ODDS_TAN ビュー
    NL_O1 → race_id(16桁) + umaban + odds + ninki
    oracle_features.py が LEFT JOIN で tan_odds 取得
週次(金曜 05:00)

JRDB → Oracle

  • 1
    jrdb_fetch_and_load.sh
    JRDB FTP → JRDB_SED / SKB / KYI / HJA / HJC テーブル
    launchd: com.reraflow.umanou-jrdb-weekly
  • 2
    成績拡張データ
    TANSHO_ODDS(単勝オッズ fallback)/ 脚質コード / ブリンカー / ペース判定
週次(金/土 09:30)

馬場コンディション

  • 1
    scrape_baba.py
    JRA HP → 含水率・クッション値・天候・馬場状態
    launchd: com.reraflow.umanou-baba-scraper

③ 特徴量エンジニアリング(oracle_features.py)

V28 有効特徴量
215
全フラグON: V14+V15+V16+V17+V26-V33
V27 → V28 AUC改善
+0.072
Dirt 0.818→0.890 / Turf 0.813→0.886
訓練データ
2020-01
〜 2026-05(WF-CV 5フォールド)
カテゴリ 特徴量数 V28 ソース 主な特徴量
Fundamental 98 有効 NL_RA + NL_SE + ODDS_TAN + JRDB_KYI + KKA + UKC 年齢 / 体重 / 斤量 / 枠番 / 騎手勝率 / 調教師勝率 / 前走着順 / 間隔 / 距離適性 / tan_odds / implied_prob / ev_ratio
↳ 血統(Fundamental内) 6 有効 KKA + UKC kka_chichi_shiba/da_rentai / kka_haha_chichi_shiba/da_rentai / sire_lineage_code / bms_lineage_code
↳ ペース・脚質(Fundamental内) 10 有効 JRDB_KYI kyakushitsu / pace_yoso_enc / senkou_uma_count / pace_advantage_score / pace_pressure_index
V13 CYB/KAB 3 有効 NL_CHA + NL_KKA 調教評価 / 厩舎コメント
V14 CHA/KKA/UKC 19 有効 NL_SE (SED拡張) prev_pos_gain / prev_early_pos_norm / SED脚質 / ブリンカー / ペース判定
Graph DB(V17) 37 有効 pedigree_edges + h2h_matchups h2h_pagerank / h2h_win_rate / pedigree_emb_0..31(Node2Vec 32次元)/ grandsire_win_rate
V15 KYI 拡張 8 有効 JRDB_KYI ten_idx / agari_idx / pace_idx / pos_idx / gekiso_idx / hokusha_rank_enc / kyusha_rank
KYI 適性(新規) 2+ 計画中 JRDB_KYI kyori_tekisei(距離適性)/ ju_tekisei(重馬場適性)
基準オッズ(新規) 1 計画中 JRDB_KYI kijun_odds — JRDB専門家基準オッズ(市場オッズとの乖離を捉える)

⚠️ オッズは評価専用

tan_odds / implied_prob / ev_ratio はバックテスト評価・ベット判定にのみ使用。LightGBM の訓練特徴量には含めない(未来情報リーク防止)。

🧬 Graph DB: V28で有効化済み — Feature Importance Top 15入り

h2h_pagerank(重要度 #7 dirt / #13 turf)+ h2h_win_rate(#11 dirt / #12 turf)が上位に入り、 V32のOracle 23ai Graph特徴量(v32_h2h_pagerank, v32_h2h_win_rate)と合わせて AUC +0.07 改善に大きく貢献

④ モデル構成とバックテスト結果(2025-04 〜 2026-05)

V28: 全フラグON(V14+V15+V16+V17)215特徴量 — V27比 AUC +0.07

V27(129特徴量・4fold)→ V28(215特徴量・5fold)で大幅改善。
ダート: AUC 0.818→0.890 / EV回収率 95%→230% / Top1回収率 82%→173%
: AUC 0.813→0.886 / EV回収率 72%→228% / Top1回収率 84%→171%
Graph DB特徴量(h2h_pagerank, pedigree_emb)がImportance Top 15に入り、86特徴量追加が全面的に貢献。

ダート(2,125レース)

戦略 exp ROI% soft ROI% linear ROI% exp Bets exp Profit Best
tan_sat25 1,669%1,678%1,755% 1,715¥2,691,130 linear
tan_oana30 2,292%2,293%2,346% 1,116¥2,445,690 linear
uma_sat15 463%436%423% 2,994¥1,086,830 exp
uma_oana30_dyn 436%437%456% 2,767¥930,630 linear
san_dyn15 346%344%293% 7,711¥1,898,060 exp
san_dyn30 487%483%378% 4,035¥1,561,850 exp
総合ポートフォリオ 522%514%486% ¥10,614,190 exp ✅

芝(1,680レース)

戦略 exp ROI% soft ROI% linear ROI% exp Bets exp Profit Best
tan_sat25 1,088%624%654% 1,229¥1,213,990 exp
tan_oana30 1,585%1,516%1,558% 622¥923,500 exp
uma_sat15 392%388%412% 2,368¥691,480 linear
uma_oana30_dyn 470%461%473% 2,067¥765,230 linear
san_dyn15 292%331%310% 5,518¥1,058,530 soft
san_dyn30 433%461%417% 2,914¥970,370 soft
総合ポートフォリオ 382%370%360% ¥5,623,100 exp ✅

⑤ 運用パイプライン(週次〜レース当日)

Phase A: 週次データ更新(毎週火曜)
週次火曜 05:00 — jrdb_fetch_and_load.sh
前週データ一括更新 — JRDB FTP → SED/SKB/KYI/HJA/HJC ロード + JVLink NL_RA/SE/O1/O2
✅ launchd 稼働中
週次火曜 06:00 — race_calendar.py
レースカレンダー取得 — 翌週開催情報を確認・DB反映
❌ 未実装 — JRA HP スクレイプ or JVLink RCRC レコード
週次火曜 06:30 — baba_weekly.py
馬場週間情報 — JRA「馬場情報」ページ → 週間天気予報・芝状況
❌ 未実装 — 週間コンディション予測用
Phase B: 前日準備(開催日前日 夜)
前日20:00 — fetch_shutsuba.py
翌日出馬表取得 — JRDB KYI(前日夜配信)+ JVLink NL_RA(木曜確定版)
❌ 未実装 — 前日取得で特徴量を事前生成
前日21:00 — pre_inference.py
第1次推論(ファンダメンタル・オッズなし) — 注目レース抽出 → Telegram 速報
❌ 未実装 — オッズなし純粋予測で事前スクリーニング
Phase C: レース当日 朝
当日09:00 — scrape_baba.py
馬場コンディション取得 — クッション値・含水率・天候・馬場状態
✅ launchd 稼働中(金/土 09:30)
⚠️ 拡張予定: 芝丈・使用コース・芝の様子
当日09:00 — race_signal_today.py
第2次推論(馬場反映・オッズなし) — oracle_features.py → LambdaRank → 対象レース確定 → Telegram 通知
✅ launchd 稼働中(土日 09:00)/ signal.alarm(90) ハング対策
現状: オッズ込みの一括推論。将来: 前日推論→当日馬場反映の2段階に分割
Phase D: レース直前(各レース -10分〜-5分)
直前レース -10分 — fetch_chokuzen.py
直前情報取得
馬体重(当日発表)→ NL_SE or JRA HP
パドック評価 → JRDB TYB(paddock_idx / kehai_code_enc / batai_code_enc)
馬具変更 → JRDB TYB(bagu_henkou)/ 脚元情報(ashimoto_joho)
直前オッズ → NL_O1 or JRA HP
天候・馬場状態変化(レース直前の変更有無)

❌ 未実装 — 特徴量 V16 TYB は定義済み、取得タイミングの自動化が必要
直前レース -5分 — live_inference.py
第3次推論(全情報込み) — EV計算 → 期待値ある馬券のみ通知
将来: 自動投票 API 連携(JRA IPAT or 即PAT)
❌ 未実装 — シャドーラン Phase 2 で対応
Phase E: レース後(当日夕方〜夜)
当日18:30 — fetch_results.py
全レース着順・払い戻し取り込み — JRA HP 速報 or JRDB SRB
❌ 未実装 — 当日速報は JRA HP スクレイプ(JVLink は翌日配信)
当日19:00 — retry_missing.py
欠損データ一括リトライ — 取得失敗分の再取得
❌ 未実装
当日19:30 — daily_report.py
当日結果レポート — 予測 vs 実結果サマリー → Telegram 送信
的中率・ROI・各戦略の成績・累積損益グラフ
❌ 未実装
月曜06:00 — archive_odds.py
NL_O1 アーカイブ — 7日超のオッズを Parquet (zstd) に退避 → Oracle DELETE
✅ launchd 稼働中

シャドーラン Phase 1(5/24〜): 簡易版

Phase A(週次)+ Phase C(当日朝 09:00 一括推論)のみで開始。Phase B/D/E は段階的に実装。

⑥ 3 戦略ポートフォリオ設計

戦略1: サテライト単勝

tan_sat25

  • 条件
    EV比 ≥ 2.5 かつ予測ランク ≤ 2
    モデルが上位2位以内と予測 + 市場オッズ対比で2.5倍以上の期待値
  • 金額
    ¥100 均一(シャドーラン)
    本番: ¥1,000〜¥5,000(EV乖離ベース)
  • 実績
    ダート ROI=1,669% / 芝 ROI=1,088%
    的中率 50%+ / ベット数: ダート1,715件 芝1,229件
戦略2: 馬連 PL

uma_sat15

  • 条件
    EV比 ≥ 1.5 かつ予測ランク = 1
    軸馬 → 予測トップ3の2頭と馬連 BOX
  • 金額
    ¥100 × 2点(シャドーラン)
    本番: ¥500 × 2点
  • 実績
    ダート ROI=463% / 芝 ROI=392%
    的中率 17-18% / ベット数: ダート2,994件 芝2,368件
戦略3: 大穴軸三連複

san_dyn30

  • 条件
    単勝 ≥ 30倍 かつ予測ランク ≤ 4
    大穴軸 → 動的相手(EV降順)で三連複フォーメーション
  • 金額
    ¥100 × N点(シャドーラン)
    C(partner_rank-1, 2) 点: 8頭立3点 〜 17頭立10点
  • 実績
    ダート ROI=487% / 芝 ROI=433%
    的中率 3% / ベット数: ダート4,035件 芝2,914件

⑦ データ修正・既知問題

日付 問題 影響 対処 状態
2026-05-22 NL_O1 オッズ欠損(2025-08〜2026-04) tan_odds=99.9(fillna) → ev_ratio 爆発 → バックテスト ROI 虚偽 backfill_odds_from_jrdb.py — JRDB_SED.TANSHO_ODDS → NL_O1 に 35,488行 INSERT ✅ 修正済
2026-05-21 NL_RA/SE レースデータ欠損(2025-08〜2026-04) RACES/RACE_ENTRIES テーブルが空 → 特徴量生成不可 backfill_races_from_jrdb.py — JRDB_SED/KYI → NL_RA/SE backfill ✅ 修正済
2026-05-19 portproxy リブート揮発 JVLink がJRA認証サーバーに接続不可 → データ取得停止 register_portproxy_task.ps1 — タスクスケジューラ永続化 ✅ 修正済
未修正 NL_SE.BATAIJYU 1/10スケール 43.4 = 434kg として格納されている V28モデル互換のため温存 → V29で修正予定 ⏳ 既知
未修正 2025-04〜07 NL_O1 KAIJI/NICHIJI不一致 JVLink本来データはKAIJI≠0だがbackfill側はKAIJI=0 → 一部 JOIN 漏れ tan_odds 11.9%(dirt)/ 5.3%(turf)が 99.9 fillna 残存 ⏳ 軽微

⑧ ロードマップ

完了済み

V27 LambdaRank 学習 + WF-CV 5fold バックテスト
NL_O1 オッズ backfill(35,488行)
race_signal_today.py 3戦略統合
launchd 5 plist 登録・稼働確認
モデル選定: ダート/芝ともに exp 採用
Graph DB 構築(pedigree_edges + h2h_matchups)
V28 全フラグON(V15+V16+V17 有効化・215特徴量)AUC +0.07改善
race_signal_today.py V28モデルパス更新

Phase 1: シャドーラン(5/24〜)

🔧シャドーラン開始(5/24 土曜〜 launchd 自動)
🔧EV乖離ベースのベット金額スケーリング設計
🔧シャドーラン結果ロギング(CSV記録)

Phase 2: パイプライン拡張

📅前日出馬表取得 + 第1次推論
📅直前情報取得(馬体重・TYB・オッズ)
📅第3次推論(全情報込み・レース-5分)
📅当日結果レポート(18:30 自動取込→Telegram)
📅欠損データリトライバッチ
📅レースカレンダー自動取得

V28 完了 → V29 特徴量追加候補

Graph DB 37cols 有効化済み(Importance Top 15入り)
V15 KYI 8cols 有効化済み
🎯KYI 適性コード追加(kyori_tekisei / ju_tekisei)
💰kijun_odds(JRDB基準オッズ)追加
⚖️BATAIJYU ×10 修正 + 再訓練

V29+: 高度化

📅シャドーラン 100bet → 実運用判断
📅馬場スクレイプ拡張(芝丈・コース・芝の様子)
📅Telegram 通知フォーマット改善
💡自動投票 API 連携(IPAT / 即PAT)
💡月次自動リトレイン(3ヶ月ウィンドウ)

研究テーマ

🔬展開予想モデル(KYI脚質→レースペース予測)
🔬Node2Vec 血統エンベディング次元数最適化
🔬CatBoost / XGBoost アンサンブル検証
🔬Graph Attention Network (GAT) for pedigree