スリットST推定 Phase 2: 仮説 ablation(H1→H2→H4、H3 棄却)
docs/design/st_estimation.md の検証計画 Phase 2 の実施記録。
Phase 1 で構築したパネルの上で、仮説を H1(実測 ST の時間減衰平均)→
H2(コース補正)→ H4(F 本数補正)の順に積み上げ、H3’(展示 F シグナル)も検証した。
- 実施日: 2026-07-20
- 再現:
python notebooks/st_estimation/build_panel.py →
python notebooks/st_estimation/phase2_models.py(確定値は phase2_report.json)
1. 検証プロトコル
- 全予測は因果的: 各レースの予測には、そのレース日より 前日まで の実測 ST しか
使わない(daily バッチが朝時点の情報しか持たない制約を再現。同日の先行レースも不使用)
- ハイパーパラメータと補正量は 学習窓 2026-03-01〜06-20 で決定
(2025-11〜2026-02 は EWMA のウォームアップ)。級別事前分布は 2026-03-01 より前のみで算出
- 評価は テスト窓 2026-06-21〜07-20(Phase 1 と同じ)
- 隊形 3 分類は Phase 2 から「±0.03 ちょうどのタイは横一線」の決定的ルールに統一
(浮動小数点の加算順で境界レースの分類が揺れていたため。Phase 1 の数値も同ルールで再計算済み)
2. モデル定義と学習された補正量
| 段 |
定義 |
| M1 (H1) |
選手別 実測 ST の時間減衰平均。重み 0.5^(経過日数/HL)、事前分布(公表平均 ST、無ければ級別平均)へ実効 k 走ぶん収縮 |
| M2 (M1+H2) |
+ コース別オフセット(学習窓の M1 残差平均。予測時コースは daily=枠番 / realtime=展示進入) |
| M3 (M2+H4) |
+ F 本数別オフセット(学習窓の M2 残差平均、F0/F1/F2+) |
| M4 (M3+H3’) |
+ 展示 F(踏み込み)有無のオフセット(realtime のみ) |
- H1 グリッド探索: 半減期 {14, 30, 60, 120, ∞} × k {2, 5, 10, 20} の学習窓 MAE は
0.0528〜0.0533 と 極めてフラット。最良は 半減期 30 日・k=10 を採用
(差が小さいためパラメータ感度リスクは低い)
- コース補正(選手効果分離後): 1c -0.009 / 2c -0.002 / 3c -0.008 / 4c -0.005 /
5c -0.002 / 6c +0.012。生値で見えた「1 コース最速・6 コース最遅」は選手の
自己選択を除いても残る = コース固有の効果だった
- F 補正(EWMA 後の残差): F0 -0.002 / F1 +0.010 / F2 +0.038。
EWMA が F 後の実測を取り込んでもなお残る系統差で、H4 は独立に有効
- 展示 F シグナル: 残差 +0.0008 とほぼゼロ。H3’(修正版含む)は棄却
3. 結果(テスト窓 2026-06-21〜07-20)
daily フレーム(全レース、n=28,201 艇走 / 4,609 レース)
| モデル |
MAE |
RMSE |
バイアス |
Spearman ρ |
先頭艇一致 |
隊形3分類 |
| B0(現行) |
0.0526 |
0.0683 |
+0.0077 |
0.231 |
24.1% |
43.4% |
| M1 (H1) |
0.0511 |
0.0666 |
+0.0027 |
0.261 |
33.2% |
43.7% |
| M2 (+H2) |
0.0507 |
0.0663 |
+0.0007 |
0.287 |
33.4% |
44.3% |
| M3 (+H4) |
0.0505 |
0.0661 |
+0.0000 |
0.296 |
34.2% |
44.4% |
| (参考) オラクル |
0.0486 |
0.0634 |
— |
— |
— |
— |
- オラクル = テスト窓内の各選手の実測平均を使うリーキーな参照値。選手平均型モデルの
事実上のノイズ床
- チャンスレート: 先頭艇 16.7%、隊形 3 分類 42.3%(多数派 = 横一線)
realtime フレーム(展示 ST が全艇そろうレース)
| モデル |
MAE |
Spearman ρ |
先頭艇一致 |
隊形3分類 |
| B0 |
0.0522 |
0.231 |
24.1% |
43.3% |
| M3(コース=枠番) |
0.0502 |
0.296 |
34.2% |
44.3% |
| M3(コース=展示進入) |
0.0502 |
0.296 |
34.2% |
44.3% |
| M4(+展示 F シグナル) |
0.0502 |
0.296 |
34.1% |
44.2% |
- 展示進入コースへの差し替えは効果なし(コース補正が小さく、進入変更も 5〜9% のため)。
実装は daily 用の 1 本(枠番ベース)で足りる
- M4 は M3 と同値〜微悪化。realtime 専用の追加処理は現時点で不要
有意性(B0 vs M3、テスト窓 daily)
- MAE ペア差 0.0021 ± 0.0001(t ≈ 22)
- 先頭艇一致 +10.0pt ± 0.6pt
- いずれも明確に有意
4. 採用判断
設計書 §Phase 3 の採用基準に照らすと:
- 「B0 比 MAE -10%(テスト窓 ≤ 0.0473)」は 未達(-4.0% = 0.0505)。ただし
オラクル床が 0.0486 であり、-10% は選手平均型モデルの理論上限を超えた誤設定だった。
B0→オラクルのギャップのうち 53% を M3 が回収しており、点推定としては上限近くまで
来ている(残りは選手×コース交互作用・気象などの微小効果)
- 「隊形指標(Spearman / 先頭艇一致率)の一貫改善」は 達成:
ρ +0.065(相対 +28%)、先頭艇 +10.0pt、隊形 +1.0pt。M1→M2→M3 の各段で
全指標が単調に改善しており、3 仮説とも独立に寄与している
判定: M3(H1 半減期 30 日 / k=10 + H2 コース補正 + H4 F 補正)を採用構成として
Phase 3(実装設計)へ進めることを推奨。 H3 は棄却、H5(気象)は期待効果が小さく保留。
5. Phase 3 への論点
- 実装は設計書の 案 A(boatracecsv 側で選手別推定 ST の派生 CSV を日次生成、
fun-site は読むだけ)を推奨。EWMA 状態は「選手 → (重み付き和, 重み計)」の
2 変数で持てるため、日次バッチで前日結果を取り込む増分更新が素直
- realtime 差し替えが不要と分かったため、daily 1 本で スリット図と 1 マーク距離計算の
両方に使える(パイプラインが単純になる)
- 買い目(距離式)への影響: 予測 ST の分布が B0 より滑らか(タイが減る)になり、
距離のタイ解消にも寄与する見込み。回収率への影響は Phase 3 以降で
予想者 A/B の枠組みに乗せるかを判断(設計書 §5 の論点)
- H4 の残り: F 消化直後の時限的な慎重化(F 後 n 走の減衰項)は未検証。
F 本数の定常オフセットのみ採用した
6. 限界
- テスト窓は 1 期間(30 日)のみ。季節ローテーションでの再検証は運用開始後に可能
- コース補正は全場共通(場別分割は未検証。6 コース遅れの大きさは場で違う可能性)
- グリッドがフラットなため HL/k の点推定に意味はない(30/10 は「悪くない点」程度)
- オラクルはテスト窓内平均を使うリーキーな参照値であり、真の予測上限はこれよりやや上
(コース・F・気象の当日効果ぶん)