data/estimate/motor_pt/{runs,motors,baseline}/YYYY/MM/DD.csv
Strength Index の N枠_モーターpt を作る 素点
(raw pt)の計算過程を、そのまま明細として配る派生データ。生成は
scripts/build_motor_pt_breakdown.py(日次バッチ)。
素点は
素点 = n_eff / (n_eff + k) × Σ(w × z) / Σw k = 10
z = (生得点 − μ_セル) / σ_セル セル = 級別 × グレード分類 × 進入
w = exp(−ln2 / 60 × 経過日数) 半減期 60 日
で決まり、この計算には次の 4 つが要る。
programs/race_cards の節間 14 スロット成績)programs/title)programs/motor_stats。期をまたいだ節を履歴から剪定する)4 があるため、1 基ぶんの素点でも全場のコーパスに依存する。当日ぶんの CSV しか 取得しない下流(fun-site 等)では、1〜3 を全部揃えても再現できない。選手pt に対する Recent National / Local Form と同じ立ち位置で、 「内訳を配ることで下流が計算過程を表示できるようにする」のがこのファイル群。
計算は boatrace.index_features.motor_ability_breakdown() 1 本に集約してあり、
build_index.py が呼ぶ motor_ability_pt() はその raw_pt を返すだけのラッパ。
index CSV のモーターptと内訳が食い違うことはない。
その日の race_cards に出てくる (場コード, モーター番号) だけ。全場全モーター
ぶんは下流が使わないので出さない。2026-08-22(13 場開催)の実測で 567 基 /
19,470 走 / 約 1.8MB。
baseline は絞り込み前の全場コーパスから算出した値をそのまま出す(素点計算に
実際に使われたのがその値だから)。
runs/YYYY/MM/DD.csv(1 走 1 行)素点に寄与した走の明細。集計対象外の走(F / L / 失 / 妨 / 欠 / 不)は
行として現れない。機材起因の 転 / 落 / 沈 / エ は生得点 -100 で計上される。
| 列 | 説明 |
|---|---|
記録日 |
対象日(パスの日付と同じ)。時間減衰の基準日でもある |
場コード |
2 桁 |
モーター番号 |
物理モーター番号 |
節 |
0 = 直近節。新→旧で 0〜5(最大 6 節) |
節最終日 |
その節の最終開催日 |
走行日 |
この走の実日付。記録日 − 走行日 が減衰の経過日数 |
日次 / 走 |
由来スロット D{日次}走{走}(節の何日目の何走目か) |
級別 |
A1 / A2 / B1 / B2。スコア表の行キー |
グレード分類 |
SG_G1 / G2_G3_一般 / 全(B1・B2 は常に 全) |
進入 |
進入コース 1〜6。0 は不明(コース補正のフォールバック対象) |
着順 |
正規化済み着順トークン(1〜6 / 転 / 落 / 沈 / エ) |
生得点 |
スコア表の値。転落沈エ は -100 |
セルμ / セルσ |
この走に適用されたコース補正セルの平均・標準偏差 |
残差z |
(生得点 − セルμ) / セルσ |
減衰重み |
exp(−ln2 / 60 × (記録日 − 走行日)) |
motors/YYYY/MM/DD.csv(1 モーター 1 行)集計値。採点対象の走が 1 本も無いモーターも 1 行出す(素点以下の列が空欄)ので、 下流は「ファイルに無い」と「履歴が無い」を区別できる。
| 列 | 説明 |
|---|---|
記録日 / 場コード / モーター番号 |
識別子 |
節数 |
素点に寄与した節の数(0〜6) |
走数 |
runs に出ている行数 |
Σw / Σw2 |
減衰重みの和 / 二乗和 |
n_eff |
Σw² / Σw2。Kish の有効サンプル数 |
加重平均残差 |
Σ(w × z) / Σw。収縮前の値 |
素点 |
n_eff / (n_eff + 10) × 加重平均残差。= N枠_モーターpt の入力 |
素点から表示用の偏差値pt までは index CSV 側の変換で、
モーターpt = 50 + 10 × (素点 − μ_場) / σ_場(μ/σ は
stadium/weights/{predictor_id}/YYYY-MM.csv)。
baseline/YYYY/MM/DD.csv(コース補正セル)| 列 | 説明 |
|---|---|
記録日 |
対象日 |
級別 / グレード分類 |
セルのキー |
進入 |
1〜6。0 は「級別 × グレード分類」のフォールバックセル |
μ / σ |
母集団平均 / 母集団標準偏差(σ は下限 10 で丸め) |
サンプル数 |
このセルを構成した走の本数 |
サンプル数 5 本未満のセルは行として出てこない(LANE_BASELINE_MIN_SAMPLES)。
そのため cell_stats() のフォールバック階層は、行の有無をそのまま使って再現できる:
(級別, グレード分類, 進入) の行があればそれ(級別, グレード分類, 進入=0) の行(μ, σ) = (0, 1)(= コース補正なし、生得点をそのまま使う)runs の セルμ / セルσ は既にこの解決を通した後の値なので、下流は通常
baseline を引き直す必要はない(セルの中身やサンプル数を表示したいときに使う)。
runs の行だけで素点まで戻せる:
Σw = Σ 減衰重み
Σw2 = Σ 減衰重み²
n_eff = Σw² / Σw2
素点 = n_eff / (n_eff + 10) × Σ(減衰重み × 残差z) / Σw
CSV は丸めた値なので motors の 素点 と末尾数桁がずれる(2026-08-22 実測の
最大差 6.4e-7)。表示用途では無視できるが、厳密な値が要るときは motors の
素点 を使うこと。参照実装は boatrace.motor_pt_breakdown.recompute_raw_pt()。
MOTOR_HISTORY_LOOKBACK_DAYS)を満たすには、その
90 日窓が触る月ぶんの race_cards / title が checkout されている必要がある
(短い月が続くと 4 ヶ月前まで届く。例: 5/1 の 90 日前は 1/31)。daily-sync の
sparse-checkout は motor_lookback_months としてこれを列挙する
(operations.md)。欠けると採用節数が落ち、モーターptが
平均 50 側に潰れる。detect_sessions() が window_end を除外する)。
今節の走りは素点に反映されないので、節=0 は「前回の節」を指す。preview-realtime)はこのファイルを作り直さず、index CSV の realtime 行も
朝バッチが計算したモーターptを再利用する(build_index.DAILY_REUSED_COMPONENTS)。N枠_モーターpt の列定義docs/design/motor_ability_index_v2.md — 素点の設計