指数を自作していると、ある時期から妙なことに気づく。先週と同じ計算をしたはずなのに、去年のレースの数字が変わっている。
レースは終わっている。走破タイムも馬場も、何一つ変わっていない。それなのに指数だけが動く。
原因は単純で、指数の作り方そのものにある。そして対処も単純だった。ただ、この対処には副産物があり、そこから次の設計課題が見えてきた。
なぜ過去の数字が動くのか
スピード指数は、コースごとの基準タイムからの差で決まる。その基準タイムは、過去のレース結果を集計して作る。
毎週、新しいレースのデータが届く。それを取り込めば、基準タイムの計算に使うデータが増える。基準がわずかに動く。基準が動けば、そこからの差である指数も動く。
馬場を秒に換算する係数も、開催による損耗の傾きも、同じ構造を持っている。すべての物差しが、毎週少しずつ更新されていた。
動く量は大きくない。ほとんどの場合、無視できる範囲である。実際に測ると、馬場の秒換算の差は中央値で0.022秒だった。
ただし最大では 0.57秒動いていた。スピード指数に直すと約5.7ポイントである。5.7ポイントは、レース内の評価順位が入れ替わりうる幅だ。
動くことが困る二つの理由
わずかとはいえ、これが困る理由は二つある。
ひとつは比較ができなくなること。先週「この改良で成績が上がった」と結論を出したとする。今週もう一度同じ計算をすると、数字が違う。改良の効果なのか、物差しが動いたせいなのか、切り分けられない。何かを比べようとするたびに、比べる土台のほうが動いている。
もうひとつは評価の純度である。基準タイムを最新のデータまで含めて作っていると、過去の指数の中に、その後のレースの情報がわずかに混ざる。まだ起きていないレースの結果を使って、過去を評価していることになる。
この二つ目は、モデルの成績を測るうえで見過ごせない。手元では良い数字が出るのに本番では当たらない、という現象の温床になる。
対処——基準期間で凍結する
対処は明快だった。物差しを作る期間を区切り、そこで固定する。
具体的には、2026年1月1日より前のデータだけを使って基準タイム・馬場の秒換算・損耗の傾きを推定し、それ以降は再計算しない。2026年のレースには、固定された物差しを当てはめるだけにする。
身体測定にたとえると分かりやすい。身長を測るとき、メジャーの目盛りが測るたびに伸び縮みしていたら、去年より伸びたのか分からない。測る対象が変わるのはよいが、測る道具は変わってはいけない。
凍結したことで、過去の指数は動かなくなった。先週の分析結果は、今週も同じ数字で再現できる。
副産物——評価が本番と同じ条件になった
この変更には、もうひとつの効果があった。
2026年のデータは、物差しの推定に一切使われていない。つまりモデルから見て2026年は、完全に見たことのない期間になる。この期間だけで成績を測れば、それは本番と同じ条件での成績になる。
そうやって測り直した数値は 0.4360 だった。それまで報告していた数字より低い。
低いほうが、本番に近い数字である。それまでの数字には、物差しを通じて未来の情報が混ざっていたぶんの上乗せが含まれていた。低い数字のほうが信用できる。
自分の成果を測る値が下がる変更は、進めるときに少し勇気がいる。ただ、上乗せの乗った数字の上で改良を続けても、本番では効かない。むしろ、上乗せのおかげで良く見えていた材料を「効いている」と誤解して、その方向に労力を注いでしまう。測り直したことで、改良の方向そのものが正確になった。
凍結した物差しを、いつ更新するか
物差しを凍結すると決めても、永久にそのままというわけにはいかない。
競馬は変わる。馬のレベルも、コースの管理方法も、番組の編成も、時代とともに動く。10年前の基準を使い続ければ、いずれ実態と合わなくなる。
そこで、更新するときは意図して行うという運用にした。毎週勝手に動くのではなく、区切りのタイミングで、更新すると決めて更新する。更新したら、その前後で数字が変わることを承知したうえで比較をやり直す。
自動で少しずつ動くことと、決めて動かすこと。結果として基準が変わるのは同じでも、後者なら何がいつ変わったかを説明できる。
次の課題——モデルを分ける
物差しを凍結したことで、比較の土台は安定した。ここから見えてきたのが、次の設計課題である。
現在のモデルは、すべてのレースをひとつのモデルで予測している。新馬戦も、3歳未勝利も、条件戦も、重賞も、同じ一本のモデルが担当する。
これには利点がある。学習に使えるレースがすべて手に入るので、母数が最大化される。特徴量の設計も一本で済む。
ただ、レースの性格はクラスによってかなり違う。
条件戦では、能力の絶対値がそのまま効く。力の差がはっきりしていて、上のクラスへ上がれる馬とそうでない馬が明確に分かれる。指数の高い馬が順当に走る場面が多い。
重賞になると、話が変わる。出走馬の能力差が縮まり、代わりに展開・枠順・当日の状態といった要素の比重が上がる。同じ指数の馬が10頭並んだとき、何が着順を決めるのか。条件戦とは効く材料が違うはずである。
コースによる違いも同様だ。直線の長い東京と、ゴール前に急坂のある中山では、求められる資質が異なる。ひとつのモデルで両方を扱えば、平均的な答えしか返せない。
分けるときに何を考えるか
モデルを分けるかどうかは、いつも同じ天秤にかかる。
分ければ、その区分に特化した挙動を学べる。 重賞専用のモデルなら、重賞でしか起きない現象を捉えられる。
分ければ、それぞれの母数は減る。 重賞は年に数百レースしかない。分けた結果、学習に足りるデータが確保できなくなれば、特化の利益は誤差に飲まれる。
これは第1回で書いた距離指数の話と同じ構造である。あのときは、24条件しかない母数に対して推定が重すぎた。分割の粒度は、それぞれの区分に残る母数で決まる。
現実的な進め方としては、いきなり完全に分けるのではなく、段階を踏むことになるだろう。まずクラスや競馬場を材料としてモデルに与え、効き方が区分によって変わるかを確かめる。変わり方が大きい区分から順に、独立したモデルへ切り出していく。
あるいは、全体で学習したモデルを土台にして、区分ごとに調整を加える形もある。母数の少ない区分は全体の答えに寄せ、母数のある区分は特化させる。分けるか分けないかの二択ではなく、どれだけ寄せるかの度合いで扱う方法である。
土台が固まったから、次に進める
物差しを凍結する作業自体は、地味である。予想が当たるようになるわけではない。
ただ、この作業を済ませたことで、比較が信用できるようになった。モデルを分けるかどうかのような判断は、分けた前と後を正確に比べられなければ下せない。土台が毎週動いていた頃には、そもそも検証が成立しなかった。
条件戦モデル、重賞モデル、コース別モデル。どこで分けるのが最も効くのかを、これから数字で確かめていく。 凍結した物差しは、そのための足場である。