BoatraceCSV

スリットST推定の改善検討(仮説と検証計画)

スリット予想(スタート予想図)と 1 マーク予想が使う「予測 ST」の算出方法を、 現状の 全国平均 ST 据え置き から改善するための仮説カタログと検証計画。 本書は検討ドキュメント(pre-design)であり、確定仕様ではない。検証結果を踏まえて 採用構成が決まった時点で設計書に昇格させる。


1. 現状 (as-is)

1.1 予測 ST の算出

現状の「予測 ST」は programs/race_cards の 全国平均ST(公表値)をそのまま 使う。

使用箇所 式 / 挙動
スリット図 StartPredictionEntry.startTiming racer.nationalAvgST(stt 取得後も据え置き。展示 ST は注記表示のみで推定値には未反映)
1 マーク走行距離 distance = (1 - 全国平均ST) + 強さpt / 50 - 1.6
平均 ST = 0.00(実績なし)の艇 描画側のみ 0.25 扱い(NO_RECORD_ST_FOR_DRAW)。距離計算は 0.00 のまま = 最速扱い

1.2 現状の課題

  1. 鮮度: 公表平均 ST は期(約 6 ヶ月)集計のラグある値。直近の調子・当節の実測 ST・ F 休み明けの慎重化を反映しない
  2. コース非依存: 進入コースで ST 分布は系統的に異なる(カド勢は助走が付き早い、 イン起こしは遅い)のに、同じ選手ならどのコースでも同じ ST と予測している
  3. 展示 ST 未使用: 締切 5 分前に previews/stt の実測展示 ST があるのに、表示注記 にしか使っていない
  4. F リスク回避を無視: F1/F2 持ちは節後半ほど慎重になる(ST が遅くなる)ことが 知られているが、フライング累積本数 は予測に未使用
  5. 気象を無視: 向かい風はスリット全体が遅れ、追い風は早まる(F が増える)。 previews/sui は取得済みだが ST 予測には未使用
  6. 欠損処理が ad hoc: 平均 ST 0.00 の扱いが描画と距離計算で不整合(上表)
  7. 点推定のみ: ST のばらつき(選手ごとの安定性)を持たないため、スリット隊形の 確信度が表現できない

2. 正解データと評価方法

2.1 正解データ

data/results/realtime/YYYY/MM/DD.csv の Nコース_艇番 / Nコース_スタートタイミング / Nコース_F(1=フライング)。 実際の進入コース順で記録されるため、コース条件付きの学習・評価がそのまま可能。

前処理ルール(Phase 1 で確定。詳細と根拠は notebooks/st_estimation/report.md):

2.2 評価指標

指標 単位 見るもの
MAE / RMSE(予測 ST − 実測 ST) 艇 点推定の精度(主指標)
スリット順位の Spearman ρ / Kendall τ レース 隊形の順序一致
スリット先頭艇の一致率 レース まくり展開の起点予測
隊形 3 分類(横一線 / 内凹み / 外凹み)の一致率 レース UI 上の説明力

隊形分類の定義例: 内側 3 コースの平均 ST − 外側 3 コースの平均 ST が +0.03 以上で内凹み、−0.03 以下で外凹み、それ以外は横一線(しきい値は要調整)。

2.3 ベースラインと検証プロトコル


3. 仮説カタログ

各仮説は独立に ablation できる形で列挙する。H1〜H4 が本命、H5 以降は追加検証。

H1: 実測 ST 履歴の時間減衰平均は公表平均 ST より精度が高い

H2: コース条件付き補正で精度が上がる

H3: 展示 ST のブレンドで realtime 時点の精度が上がる

H4: F 持ち・F 直後の慎重化補正で系統誤差が減る

H5: 風向・風速の補正で精度が上がる(realtime のみ)

H6: 欠損(平均 ST=0.00)の補完を級別事前分布にする

H7: ST を分布(平均 + ばらつき)で推定する

H8: 展示の行き足系指標(直線・まわり足・チルト)は ST を追加説明しない(棄却前提の確認)

優先度まとめ

仮説 情報時点 期待効果 実装コスト 優先度
H1 実測 ST EWMA daily 大 中(モーター指数の道具流用) ★★★
H2 コース補正 daily 大 小 ★★★
H6 欠損の級別補完 daily 小(整合性修正) 極小 ★★★(バグ部分は 2026-07-20 修正済み)
H3 展示 ST ブレンド realtime 大 中 ★★☆
H4 F 補正 daily 中 小 ★★☆
H5 気象補正 realtime 小 小 ★☆☆
H7 分散推定 daily (拡張) 小 ★☆☆
H8 行き足残差確認 realtime 確認のみ 小 ★☆☆

4. 検証計画

Phase 1: パネル構築(正解データの固定)

  1. results/realtime 全期間から「選手 × レース」の実測 ST パネルを作成 (raceCode, 選手, 枠番, 実進入コース, 実測 ST, F/L フラグ, 気象, 級別, 平均 ST 公表値, 展示 ST, 予想進入コース)
  2. F の符号・L の表記・欠損率を実データで確認し、§2.1 の前処理ルールを確定
  3. B0/B1 ベースラインの指標値を確定(この数字が以後の比較基準)

Phase 2: 仮説別 ablation

Phase 3: 採用判断と設計書化

アーキテクチャ選択肢(Phase 3 で決定)

案 内容 利点 難点
A: BoatraceCSV 側で派生 CSV data/estimate/racer_st/YYYY/MM/DD.csv 等を日次 + 直前バッチで生成し、fun-site は読むだけ results 履歴・バッチ基盤・時間減衰の実装が全て boatracecsv 側にある。他予想者からも再利用可能 ファイル種別追加(docs/data/ 更新、fetcher 追加)
B: fun-site バッチ内で計算 fun-site が results 履歴を遡って取得し batch 内で推定 リポジトリ 1 つで完結 fun-site は当日分 CSV しか読まない設計。履歴取得の作り込みが大きい

案 A を有力とする(fun-site の fetcher / prediction-builder は 「racer_st CSV があれば startTiming をそれに差し替え、無ければ現行フォールバック」 という後方互換の形にできる)。

Phase 3 実装(2026-07-20、案 A で実装済み)


5. 未決事項

経緯