最終更新: 2026-08-30 / 全て ¥100 ペーパー・実配当(パリミュチュエル)決済。 戦略の正典説明は Controller の「システム構成・戦略一覧」(SystemInfoWindow)。本書はそれ+バックテスト結果を1枚に残す記録。
数字の種別に注意 - フォワード = 実運用の日々の結果(スコアカード)。締切前オッズで実選択・実配当。最も正直。 - 紙backtest(締切前) =
backtest_paper_tan.py。締切前スナップで選択→確定配当で決済。フォワード相当の信頼度。 - 確定オッズbacktest =backtest_rules_tiers.py等。選択に最終オッズを使う=先読みで単勝ROIを約+35pt盛る。参考値。 - walk-forward(連系/複勝/単勝 段別) = leak無しだが連系ROIは配当分散で暴れる → 判定は低分散の複勝/単勝で。⚠ 2026-08-27以前の紙backtestは「まだ届いていないオッズ」を使っている(下記 0.3)。 オッズを使う戦略の数字は過大なので、そのつもりで読むこと。
スコアカードには性質の違う2種類の成績が入っている。同じ名前だったので分けた。
| 現在の表示名 | 中身 | 出所 |
|---|---|---|
AI単勝(全) |
発注された実績 | bets の AI_TAN_v2(20260704–20260712) |
AI単勝(全)(再構成) |
参考値 | 現在の predictions から組み直し(20260502–) |
AI複勝(旧) |
発注された実績 | bets の AI_FUKU_v1(20260704–20260712) |
AI複勝(旧)(再構成) |
参考値 | 同上 |
Chalk-単勝 / Chalk-馬連 / Chalk-3連複 |
発注された実績 | paper_bets(chalk_bets.py が書く。20260705–) |
Chalk-…(再構成) |
参考値 | 同上 |
AI単勝(1位軸)(再構成) ほか |
参考値 | 凍結側に対応が無い(再構成のみ) |
⚠ 2026-09-03以前の記録では接尾辞が付いていない。
過去のジャーナル・Discord投稿の Chalk-単勝 などが、どちらの集計を引用したものかは
投稿ごとに確認しないと決められない(チャート・月別は再構成、セグメント表は凍結を
出していたため)。自動的にどちらかへ読み替えないこと。確認できないものは
「旧表示・由来未確定」として扱う。
8/30の終業点検で発覚。本番の締切前レーンが2開催日ぶん動いていない。
| 開催日 | 締切前レーンの計上レース数 |
|---|---|
| 2026-08-23 | 31R |
| 2026-08-29 | 0R |
| 2026-08-30 | 1R(中京9R・live_loop側の安全網がたまたま10秒窓に入っただけ) |
gate_daemon.try_ens_chain() の中で親の ensemble_bet.capture(mode="close") を呼ぶ設計。
8/28に子の凍結実験 ens_disagree を終了(fae602a)したため、_skip_if_terminated() が
ens_done = True を返し(gate_daemon.py:530)、try_ens_chain() 自体が呼ばれなくなった。
加えて _ens_terminated() が真だと warm_ok = False になるので二重に塞がっている。AI単勝/馬連/3連複 × アンサンブル/GBM単独 の(締切前)7戦略が実質欠測。
§0 で「連系は締切前が明確に優位」としていた結論の追試が取れていない。8/28に freeze_terminate で打ち切った6本を、スコアカード上で終了として明示するようにした。
| 戦略 | 到達 | 点数 | 投資 | 的中 |
|---|---|---|---|---|
| AI3連複_アンサンブル不一致 | 6R | 6点 | ¥600 | 0(的中率0% / 回収率0%) |
| 堅3連単2頭軸GV2 | 14R | 252点 | — | 2 |
| 堅3連単2頭軸DV2 | 6R | 108点 | — | 0 |
| 堅3連単2頭軸O15V2 | 4R | 72点 | — | 1 |
| 堅3連単2頭軸S45V2 | 8R | 144点 | — | 2 |
| 堅3連単2頭軸C75V2 | 6R | 108点 | — | 1 |
| V2合計 | 物理16R / 38 strategy×race | 684点 | ¥68,400 | — |
kind="off"(月別・通算・ROI推移・ヒートマップ・セグメント・健康診断から除外)。
ただし _paper_ok() からは外さないので過去成績は残る。表示だけ ended で「終了(判定なし)」に分けたtools/publish_scorecard.sh が生成に成功したときだけアップし、失敗時は Discord に通知する
(同じ失敗は日付+理由ハッシュで1通・送信成功時だけ抑止キーを記録)。詳細はジャーナル(95)JRAは M:00 と刻んだ値をその1分をかけて配っている。
「新しい発表時刻を初めて観測した秒」の分布は :00-:09 = 0%(134件中0件) /
:30-:34 = 74% / :55-:59 = 98%。つまり :00 に配信しているのではなく :00 と刻んでいるだけ。
source_timestamp だけで絞ると、判断時点にはまだDBに無い行を掴む。
実測で144レース中130R(90%)が該当し、到着は中央57秒後。
本番デーモンは判断時点にDBを読むので、その行を持っていない。
→ chalk_gate.available() で source_timestamp と captured_at の両方が
判断時点以前であることを要求するようにした(コミット fae602a)。
全期間922Rのうち 760R(82%)で断面が変わり、85R(9%)で上位3頭の並びが変わる。
| 戦略 | 修正前 的中率/回収率 | 修正後 的中率/回収率 | 差 |
|---|---|---|---|
| AI単勝(無/NOODDS) | 5.7% / 70% | 5.6% / 72% | +2 |
| AI複勝(無/NOODDS) | 14.3% / 55% | 14.3% / 55% | 0 |
| AI単勝(無)BLEND | 7.2% / 82% | 7.1% / 80% | −2 |
| AI単勝(有/WITHODDS) | 8.5% / 91% | 7.7% / 83% | −8 |
| AI単勝(有)BLEND | 10.7% / 112% | 9.2% / 95% | −17 |
オッズを使う戦略だけが大きく下がった。 AI単勝(有)BLEND の「112%」は幻で、
実際に発注できる情報だけなら95%。オッズを使わない戦略はほぼ不変(±2pt)で整合的。
inflow_bet / drop_signal … 最近傍探索が abs() で判断時点の後ろも選んでいた
(実測45%のレース・中央16秒の先読み)chalk_policy_sim / build_scorecard … 「全体最新フォールバック」が残っていたpredict_win5 … 締切を各レースの発走時刻にしていた(WIN5は第1レース発走前に買うので
最大2時間の先読み)→ 第1レース発走に統一immutable=1 の全廃本番と同じ 9p 上の実測で immutable=1 は書込中に31%が偽の malformed、
mode=ro は0失敗。さらに immutable=1 はWALを一切見ないので、
未checkpointの行を取りこぼす(書き手をSIGKILLした状態ではテーブルの存在すら見えない)。
54箇所を mode=ro に統一し、接続を tools/db_open.py に一本化した。
horses.scratched は返還の正本ではない。IJyoCD != 0 を一律 scratched=1 にしており
競走中止・失格(出走した馬)まで混ざるうえ、SE取込のUPSERTで上書きされて消える(実測7頭)。
正本はJRA公式の HenkanUma。ijou_cd 別の返還率は
取消64% / 発走除外100% / 競走中止0% で規則が完全に説明できた。
過去の未計上分は全体で +0.19pt(スコアカード母集団 71.022% → 71.216%)。
過去は据え置き、これから先だけ正本化する(設計 docs/design_refund_void_bets.md)。
新戦略18本(新馬4/急落中11/投票量3)が初稼働。朝はdataset再構築54分+P3初日の再学習が直列に並ぶ
設計欠陥で第1Rに間に合わず、WSLのDB読取も半日不安定だった(当時はopen_roにimmutable=1を追加して凌いだ。
2026-08-27にそのimmutable=1は撤去した — ロック枯渇は救えるが、書込中に31〜36%の確率で偽の
malformedを返し、WALも見ないため数分古い断面になる。現在はリトライで待つだけ
(バックオフ63秒+接続待ち。busy競合時の概算上限は約303秒。9pのI/O自体には上限が無い))。
収集とデータは無傷。初日成績はジャーナル(15)参照 — 新馬は予測どおり86%、急落中は初日9%と苦戦、
投票量は発火0。連系の的中率はレース分母に統一。今夜からdataset+学習を前日20時に移設。
7/14以降の変化が大きいため、ここに現在地を集約する。詳細は各日のジャーナル。
| 系 | 特徴数 | 中身 |
|---|---|---|
walk_forward(live_v1) |
60 | リーク10列除去後の土台(7/26-27) |
| NOODDS系 | 88 | FEATURES−オッズ3 |
| WITHODDS/ensemble/WIN5 | 90 | 84 + P3(血統3+調教3) 2026-07-30 |
| 新馬用(maiden_top3 ×2) | 66/63 | base+P3・3着内目標・オッズ有/無 |
P3 = ped_sire_surf/ped_sire_top3/ped_bms_top3(父・母父の産駒成績をas-of自前算出) +
v3_best1f_z/v3_margin/v3_hard(netkeiba調教)。選定4期間とホールドアウト3期間の両方で
連系が改善した唯一の組(AUC 7/7・馬連回収6/7 平均+4.27pt。単勝は2/7=2〜4番手の識別に効く)。
血統は dataspec DIFN で初取得(従来DIFFと誤り3年間空だった)。直近JRA充足95.9%。
immutable=1がWALを
見なかったための回避策で、mode=roではWALを直接読める(可視オッズ最大3分古も解消)。
なお捕捉中の断面固定(read_txn)は見送った — capture()がDiscord送信(同期・最大50秒)
を含むため、read transactionで包むとWALリーダーを長時間保持してしまう。既知の課題として持ち越し。--day モード(前日20時 preday_prep)。| 区分 | 本数 | 備考 |
|---|---|---|
| 実bet表(実弾なし・全ペーパー方針) | 8 | 従来どおり |
| 新馬未勝利3連複(8/1〜) | 4 | 主張1+対照3(人気/オッズ無/1勝以上)。回収100%は超えない見込みと明記の検証 |
| 急落・中帯 静音監視(8/1〜) | 11 | 6→7月両月100%超の帯(10-20倍)。帰無p≈0.052につき私は反対、ユーザ裁定で採用 |
| 投票量(8/1〜) | 3 | 流入中7単/15単(帯内P75)・急落大口単。閾値凍結57,967/158,347/98,587票 |
| 継続ペーパー | 29 | Chalk/混戦/base帯/頭数仮説/複勝確率順/急落旧/アンサンブル他 |
| 休止 | 11 | スコアカード「休止・不採用」欄に理由つき |
| モデル | 特徴 | 用途 |
|---|---|---|
live_model |
walk_forward 70特徴 | predictions表+bet-rules(AI単勝(全)/本命/特別・AI複勝(旧))の予想=live_v1 |
noodds_model |
能力のみ 94特徴(2026-07-14〜) | NOODDS系 |
withodds_model |
能力+オッズ 94特徴 | WITHODDS系 |
combo_live |
WIN5用 94特徴(毎朝自動再学習) | WIN5 |
ab88 / ab70 |
特徴A/B用(当日より前で学習=リーク防止) | 追い切り・タイム差の効果検証 |
特徴段(model_noodds系の世代): - 70 = 土台(walk_forward=live_v1と同一)。〜2026-06-28。 - 88 = +追い切り(14) +着差タイム差(4)。2026-06-29〜。 - 94 = +コーナー通過順(6)。2026-07-14〜(本番採用)。 - 99 = +上がり3F順位(5)。実験・非採用。
| # | 戦略 (code) | ロジック | 状態 |
|---|---|---|---|
| ① | AI単勝(全) AI_TAN_v2 |
live_model。全レース。pwin≥0.15 & EV≥1.05 のEV上位2頭 +『10倍超×pwin≥0.12』の穴1枠。人気無制限=だから「全」 | 🚫休止(7/13) |
| ② | AI単勝(本命) AI_TAN_SMART |
①と同ロジック、特別・重賞かつ9頭以上に絞る | 🚫休止(7/13) |
| ②' | AI単勝(特別) AI_TAN_SPECIAL |
①ロジックを『特別/L のみ』に絞る。大標本で rank1×特別=回収104%と最良 | ★稼働(後継) |
| ③ | AI単勝(新/オッズ無) AI_TAN_NOODDS |
noodds_model。pwin≥0.08 & EV≥1.05 のEV上位3頭。単勝上限25倍 | 稼働 |
| ④ | AI単勝(新/オッズ有) AI_TAN_WITHODDS |
withodds_model で③と同条件 | 稼働 |
| ⑤⑥ | 〃 _BLEND |
③④を市場確率と60%ブレンド(モデル6:市場4) | 稼働 |
| — | AI単勝(1位軸) | rank_win 1位に単勝(再構成/スコアカード用) | 再構成 |
| # | 戦略 (code) | ロジック | 状態 |
|---|---|---|---|
| ⑦ | AI複勝(旧) AI_FUKU_v1 |
bet-rules の recommended_place で複勝 | 🚫休止(7/13) |
| ⑧ | AI複勝(新/オッズ無) AI_FUKU_NOODDS |
ptop3≥0.40 & 複勝EV≥1.05 の上位3頭 | 🚫休止(7/13) |
| ⑨ | AI複勝(新/オッズ有) AI_FUKU_WITHODDS |
withodds_model で⑧と同条件 | 🚫休止(7/13) |
chalk_bets.py)。| 戦略 | 条件 | 券種/枠 |
|---|---|---|
| ① 急落(直前)T60 | 発走10分前→5分前 10%↓(絶対1.5)・10〜100倍・人気上昇は不問・R最大下落1頭(2026-07-26 設定変更) | 単勝[bets] |
| ② 急落7穴 | 7→5分前 15%↓・20〜100倍・R最大下落1頭 | 単勝[paper/穴] |
| ③ 急落7広 | 7→5分前 15%↓・10〜100倍・全馬 | 単勝[paper/穴] |
| ③b 急落7穴複 | ②と同条件の複勝版(的中22.5%/回収172%・除最大益134%・train173≒test170) | 複勝[paper/穴] |
| ③c 急落7広複 | ③と同条件の複勝版(的中25.5%/回収158%・除最大益130%) | 複勝[paper/穴] |
| ④ 急落本命 | 10→5分前 5%↓・5〜7倍・全馬 | 単勝[paper/本命] |
| ⑤ 急落人気↑単 | 7→5分前 3%↓・5〜15倍・人気上昇必須(頑健:的中25%/回収189%,train220/test162) | 単勝[paper] |
| ⑥ 急落人気↑複 | 7→5分前 3%↓・10〜20倍・人気上昇必須(安定:好走50%/回収158%,train168/test142) | 複勝[paper] |
2026-07-13: 旧急落30(過剰最適化)退役。train/test で生存した設定のみ採用。
2026-07-25: ②③の複勝版(③b③c)を追加。しきい値は15%が最良で緩めない(backtest_drop_ana.py 563R: 穴単勝 5%169%→10%177%→12%235%→15%359% と単調)。5〜12%の複勝は除最大益86〜95%で元返し割れ=不採用。
ab_features.py)。ensemble_bet.py)。過去走のコーナー通過順 jyuni_1c〜4c(DB保存済みだが未使用だった)を頭数正規化して集約(corner_features.py)。
Chalk方針 walk-forward 1701R: 回収 140%→144%(+5pt)、単勝/馬連/3連複 全券種で悪化ゼロ → 94を本番採用。
| 段 | 単勝 | 馬連 | 3連複 | 合計 |
|---|---|---|---|---|
| 70 | 109% | 155% | 162% | 156% |
| 88 | 112% | 136% | 144% | 140% |
| 94 | 114% | 143% | 148% | 144% |
| 99 | 110% | 134% | 181% | 161% |
| ↑注 | 的中率6.0〜6.1%で不変=高ROIは配当運 |
複勝(上位K頭に複勝、的中率=順位精度そのもの): | 段 | 上位1的中 | 上位1/2/3 ROI | |---|---|---| | 70 | 60.8% | 94/92/92% | | 88 | 59.9% | 91/92/95% | | 94 | 60.8% | 92/94/96% | | 99 | 61.0% | 94/95/94% |
単勝(全レース上位K頭): | 段 | 上位1的中 | 上位1/2/3 ROI | |---|---|---| | 70 | 31.1% | 96/90/89% | | 88 | 30.5% | 92/87/88% | | 94 | 30.2% | 93/90/90% | | 99 | 30.9% | 97/90/90% |
結論: 低分散指標では全段の差は1pt未満=ノイズ。70/99の連系高ROIは配当分散のアーティファクト。 → 94を本番採用・99(上がり順位)は非採用(実験棚上げ)。 フォワードは94。
| 戦略 | 94 | 99 |
|---|---|---|
| 単勝(全) EV | 106.3% | 106.6% |
| 単勝(本命) SMART | 108.9% | 93.2% |
| 単勝(特別) rank1×特別L | 48.0%⚠️ | 50.0%⚠️ |
| 複勝(EV) | 94.5% | 94.6% |
⚠️特別48%は再現の不備(小標本+定義ズレ)。既知の大標本104%と乖離。
| 戦略 | 94 | 99 | 確定オッズ比 |
|---|---|---|---|
| 単勝(全) | 71.3% | 71.6% | 106% → 盛りが約35pt |
| 単勝(本命) | 73.8% | 70.6% | 109% → 同上 |
| 単勝(特別) rank1×特別L | 76.3% | 100.3% | (115点小標本) |
結論: - 単勝(全)・(本命)は94でも復活しない(締切前で71〜74%=控除割れ)。休止継続で正当。フォワード「負け越し」と一致。 - 複勝(無/旧/有)も 94/99で<100%(94.5%)=控除超えられず。据え置き。 - 単勝(特別) はこの窓では76〜100%(小標本)。稼働継続は妥当だが黒字は断言できない。
再構成ライン(live_v1=70特徴)の月別回収率(抜粋): | 戦略 | 6月 | 7月 | |---|---|---| | AI単勝(全) | 63% | 92% | | AI複勝(旧) | 76% | 81% | | AI3連複(1-2-3位) | 103% | 90% | | AI馬連(1-2位) | 94% | 51% | | Chalk-3連複 | 92% | 122% |
連系は当たった日だけ跳ねるので月次でも振れる。単勝/複勝の方が安定指標。
backtest_paper_tan.py)が正。スナップは締切約2分前(near-post)で妥当。horses.tan_odds10=×10(÷10で実オッズ) / odds_snapshots.tan_odds=実オッズ(÷10不要)。本番は正しく守っている。bets/paper_bets の実払戻を使う検証を第一級とし(検証と実運用が同じ土俵で乖離が原理的に起きない)、
モデル再スコア型は参考値に格下げする。単独で実弾の設定を変える根拠にせず、必ずペーパー並走を挟む。| スクリプト | 内容 |
|---|---|
tools/backtest_tiers.py [70 88 94 99] |
段別 連系ROI(Chalk方針) |
tools/backtest_fuku_tiers.py |
段別 複勝(上位1/2/3) |
tools/backtest_tan_tiers.py |
段別 単勝(上位1/2/3) |
tools/backtest_rules_tiers.py 94 99 |
休止戦略を確定オッズで(全/本命/特別/複勝) |
tools/backtest_paper_tan.py --tier 94 |
単勝 紙検証(締切前実オッズ) |
tools/backtest_corner_compare.py |
88 vs 94(コーナー単体効果) |
tools/backtest_l3rank_compare.py |
94 vs 99(上がり順位単体効果) |
tools/corner_features.py / l3rank_features.py |
特徴生成(leak無し・過去走集約) |
段は model_noodds.FEATURES から自動導出(手書き二重管理なし)。全て本番と同じ isotonic(CV5)・leak無し walk-forward。