前回(第42回)は「勝っている数字より、決着までの距離のほうが役に立つ」という話でした。
今回は、その距離を実際に測ったら、自分の成果のほうが消えた話です。
モデルは1行も変えていません。変えたのは、評価する期間だけです。
朝の私が書いていたこと
その日の午前、私はこう報告していました。
朝一1番人気の複勝 80.53%
自分のモデル 93.42%
── +12.89pt
前走のオッズの動き(締切間際に売れて急落したか)を11列に分解して特徴量にしたら、
回収率が10pt以上跳ねた。評価に使ったのは395レースでした。
数字自体に嘘はありません。計算し直しても同じ値が出ます。
問題は、その395レースが「いつ」だったかでした。
引っかかったのは、辻褄が合わなかったから
モデルの中身を覗く手続き(permutation importance=ある列の値をわざと壊して、
予測精度がどれだけ落ちるかを見る)を回したところ、妙な結果が出ました。
基本の8列を壊す 精度 −0.2921
急落の11列を壊す 精度 −0.0023 ← ほぼゼロ
モデルは急落をほとんど見ていない。なのに回収率は10pt動く。
これは辻褄が合いません。そこで自分の報告を疑いました。
検証1 — 乱数の種を5通り振ってみた
学習データも、評価データも、買い方も、1文字も変えません。
変えたのは学習アルゴリズムの乱数の種だけです。
| 種を5通り振った結果 | 平均 | ばらつき | |
|---|---|---|---|
| 急落なし | 81.34 / 79.58 / 79.35 / 73.51 / 74.87 | 77.73% | 3.00pt |
| 急落あり | 86.31 / 83.35 / 83.40 / 85.26 / 84.74 | 84.61% | 1.13pt |
「93.42%」は、たまたま良い種を1回引いた値でした。
同じ条件の平均は84.61%。急落の効果も+10.53ptではなく+6.88pt。
ここで学んだことが1つあります。
信頼区間(ブートストラップ)を出しても足りない、ということです。
区間が測っているのは「買い目のばらつき」で、「モデル自身のばらつき」は測っていません。
機械学習を使うなら、種を振らない限り差を主張してはいけない。
そして副産物として、急落の本当の役割が見えました。
急落は当てる材料ではなく、ばらつきを抑える材料でした(3.00pt → 1.13pt)。
精度への寄与がほぼゼロなのと、矛盾しません。
検証2 — ここからが本題。窓を変えた
もう1つ、気になっていたことがありました。
382レースという評価規模では、どのくらいの差なら検出できるのか。
計算すると、2σ(=偶然と区別できる最小の差)が約3.9ptでした。
その日に測った「効かなかった」材料を並べると、こうなります。
券種をワイドに +0.59pt
買い目を2〜3点に +1.30 / −1.71pt
複数モデルの平均 −1.10pt
特徴量の分解 −0.85pt
馬連マトリクス6列 +1.31pt
全部4pt未満。つまり全部、検出限界の内側。
「効かなかった」のか「測れなかった」のか、区別できていませんでした。
そこで評価の作り方を変えました。1つの窓で測るのをやめ、
年ごとに窓を前へ転がす方式(時系列交差検証)にします。
2022年を評価するときは、2021年までのデータだけで学習する
2023年を評価するときは、2022年までのデータだけで学習する
(以下同様。評価する年のレースは、学習に1つも入れない)
評価レースは 382 → 12,094。2σは3.9pt → 約1ptに下がりました。
そして、成果が消えました
| 的中率 | 回収率 | |
|---|---|---|
| 朝一1番人気を買うだけ | 60.31% | 85.73% |
| 自分のモデル(急落あり) | 49.94% | 83.75% |
| 材料を全部足した最終形 | 48.78% | 84.16% |
どの構成も、何も考えずに1番人気の複勝を買うより悪い。
なぜ朝は+12.89ptだったのか。対照(1番人気)の水準が、窓によって動くからです。
対照の回収率(年別)
2022年 84.3 2023年 86.1 2024年 87.1 2025年 86.4 2026年後半 78.9
↑ ここだけ7pt低い
朝に使った395レースは、まるごとこの「2026年後半」でした。
人気馬がよく飛んだ期間です。そこで対照を測れば、誰でも+10ptを出せます。
対照が7pt動くなら、「対照比+12.89pt」は対照の話であって、モデルの話ではない。
その日、否定は6回積みました
窓を直したあと、材料を足す実験を続けました。結果はこうです。
| 足した材料 | 効果 | 2σ | 判定 |
|---|---|---|---|
| 前走の急落11列 | +2.28pt | 1.60 | 合格 |
| 馬連マトリクス6列 | +0.16pt | 1.03 | |
| 教科書のルール(前走オッズ除外・危険な人気馬) | −0.20pt | 0.98 | |
| レース判定層(クラス・トラック・オッズ分布の形) | −0.01pt | 0.64 | |
| 2走前・3走前の急落 | +0.25pt | 0.99 |
合格したのは前走の急落だけ。それでも対照には届きません。
買い方も3通り試しました。期待値が最大の馬、複勝確率が最大の馬、
そして「既定は1番人気で、よほど期待値が上回るときだけ乗り換える」という規則。
乗り換えの閾値を8段階振って、山はありませんでした。
乗り換える割合が増えるほど、単調に悪くなる。
何が起きているのか
数字を並べると、はっきりしています。
的中率 対照 60.31% → 自分のモデル 48〜50%(材料を何に変えても)
回収率 対照 85.73% → 自分のモデル 81〜84%(材料を何に変えても)
私のモデルは、材料を何に変えても「1番人気とは違う馬」を選び、
そのたびに的中率を11pt落として、配当で取り返しきれていません。
そして今日いちばん効いたのは、材料でも手法でもなく、測り方を直したことでした。
測り方を直した結果、手元に成果が無いことが分かったわけですが、
これは損ではありません。無い成果を有ると思ったまま実弾を増やすほうが、はるかに高くつきます。
持ち帰った作法(3つ)
- 単一の評価窓で対照を測らない。 対照の水準自体が窓で動く。動く物差しで測った差は差ではない。
- 学習を伴う実験は、乱数の種を複数振る。 信頼区間はモデルのばらつきを見ていない。
差が2σを超えない限り「効いた」と書かない。 - 「効かなかった」と「測れなかった」を分ける。 先に検出限界を計算しておく。
限界が4ptなら、+1ptの結果に意味を読み取ってはいけない。
次に測ること
材料を足す方向は5連敗で打ち止めました。次は同じ材料の使い方を変えます。
急落を「レースの中で最も動いた馬」という離散的な指定として与えること、
3券種のうち何本が同時に動いたかを相対的な基準で切ること、
そして目的変数そのものを見直すことです。
私はずっと「複勝圏内に入るか」を学習させてきました。
けれど買っているのは期待値で、当てたいのは着順ではありません。
ここがずれている可能性は、まだ潰していません。
なお、2026年前半(1月〜6月)のデータは、今日も1レースも使っていません。
前向きの検証窓として、無傷のまま封をしてあります。
今日のような取り違えをした日ほど、触っていない期間を持っていることの価値が分かります。
今回の数字(再掲)
| 項目 | 値 |
|---|---|
| 評価レース数 | 12,094(2022〜2025 + 2026年後半・時系列交差検証) |
| 対照(朝一1番人気の複勝1点) | 85.73% |
| 最終モデル | 84.16% |
| 唯一2σを超えた材料 | 前走の急落11列(+2.28pt) |
| 撤回した数字 | 「93.42%・+12.89pt」→ 同条件の平均 84.61% |
| 目標までの距離 | 回収率110%まで約24pt |
腹が減っていると、朝の数字がやけに旨そうに見える。


