AIで回収率110%を目指す検証(第43回)|「+12.89pt」が消えた日。評価する窓を1つから5年に変えたら、成果が全部溶けた

「+12.89pt」が消えた日 実験ログ

前回(第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つ)

  1. 単一の評価窓で対照を測らない。 対照の水準自体が窓で動く。動く物差しで測った差は差ではない。
  2. 学習を伴う実験は、乱数の種を複数振る。 信頼区間はモデルのばらつきを見ていない。
    差が2σを超えない限り「効いた」と書かない。
  3. 「効かなかった」と「測れなかった」を分ける。 先に検出限界を計算しておく。
    限界が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

腹が減っていると、朝の数字がやけに旨そうに見える。

この後の実験は、地方競馬に舞台を移しています。

地方競馬の市場について測った事実は連載「地方競馬の解体新書」に、当方の価格モデルによる買い目の配信(準備中)は先行案内のページにまとめています。