① インフラ構成
keiba-vm(Windows 11 / UTM仮想マシン)
-
1
JVLink COM — JRA公式データフィード
-
2
portproxy — ネットワーク疎通
Mac mini(ホスト / 本番実行環境)
-
1
Oracle 23ai Free — Docker
:1521/FREEPDB1 -
2
Python 3.9 + LightGBM + oracledb (thin mode)
-
3
launchd — 5 plist 登録済み
② データパイプライン
データソース 3 系統
JVLink(NL_RA/SE/O1/O2 — 公式レース・成績・オッズ)+ JRDB(SED/SKB/KYI/HJA/HJC — 成績詳細・払戻)+ 馬場情報(baba_condition — JRA HP スクレイピング)
JVLink → Oracle
-
1
keiba-vm
jrvltsql実行 -
2
ODDS_TANビュー
JRDB → Oracle
-
1
jrdb_fetch_and_load.sh -
2
成績拡張データ
馬場コンディション
-
1
scrape_baba.py
③ 特徴量エンジニアリング(oracle_features.py)
| カテゴリ | 特徴量数 | 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 ✅ | |
⑤ 運用パイプライン(週次〜レース当日)
jrdb_fetch_and_load.sh✅ launchd 稼働中
race_calendar.py❌ 未実装 — JRA HP スクレイプ or JVLink RCRC レコード
baba_weekly.py❌ 未実装 — 週間コンディション予測用
fetch_shutsuba.py❌ 未実装 — 前日取得で特徴量を事前生成
pre_inference.py❌ 未実装 — オッズなし純粋予測で事前スクリーニング
scrape_baba.py✅ launchd 稼働中(金/土 09:30)
⚠️ 拡張予定: 芝丈・使用コース・芝の様子
race_signal_today.py✅ launchd 稼働中(土日 09:00)/ signal.alarm(90) ハング対策
現状: オッズ込みの一括推論。将来: 前日推論→当日馬場反映の2段階に分割
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 は定義済み、取得タイミングの自動化が必要
live_inference.py将来: 自動投票 API 連携(JRA IPAT or 即PAT)
❌ 未実装 — シャドーラン Phase 2 で対応
fetch_results.py❌ 未実装 — 当日速報は JRA HP スクレイプ(JVLink は翌日配信)
retry_missing.py❌ 未実装
daily_report.py的中率・ROI・各戦略の成績・累積損益グラフ
❌ 未実装
archive_odds.py✅ launchd 稼働中
シャドーラン Phase 1(5/24〜): 簡易版
Phase A(週次)+ Phase C(当日朝 09:00 一括推論)のみで開始。Phase B/D/E は段階的に実装。
⑥ 3 戦略ポートフォリオ設計
tan_sat25
-
条件
EV比 ≥ 2.5 かつ予測ランク ≤ 2
-
金額
¥100 均一(シャドーラン)
-
実績
ダート ROI=1,669% / 芝 ROI=1,088%
uma_sat15
-
条件
EV比 ≥ 1.5 かつ予測ランク = 1
-
金額
¥100 × 2点(シャドーラン)
-
実績
ダート ROI=463% / 芝 ROI=392%
san_dyn30
-
条件
単勝 ≥ 30倍 かつ予測ランク ≤ 4
-
金額
¥100 × N点(シャドーラン)
-
実績
ダート ROI=487% / 芝 ROI=433%
⑦ データ修正・既知問題
| 日付 | 問題 | 影響 | 対処 | 状態 |
|---|---|---|---|---|
| 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 残存 | ⏳ 軽微 |