競馬AI予測

【競馬AI #23】実運用4日連続ゼロ的中。24件全ハズレは「異常」か「想定内」か


前置き:バックテストは良かった。だが実戦は

前回(#22)で、EV正規化バグの修正から、回収率100%超えを目指した設計変更までの過程を報告した。

41日間・178件のバックテストで、最終的に回収率122.2%という数字にたどり着いた。サンプルを増やすたびに数字が崩れる経験(171.5%→118.5%→92.6%)をした後だっただけに、train/holdout分割で独立に検証した122.2%には、それなりの根拠があると思っていた。

そして8月8日、いよいよ本番モデルでの実運用を開始した。

結果は——

8月8日:6件推奨 的中0 回収率0%
8月9日:6件推奨 的中0 回収率0%
8月15日:5件推奨 的中0 回収率0%
8月16日:7件推奨 的中0 回収率0%

累計:24件推奨 的中0 回収率0%

4日連続、24件全ハズレ。

バックテストで122.2%を確認した直後にこれでは、さすがに何か根本的に間違っているのではないかと、不安になる数字だ。

本記事は、この4日連続ゼロが「異常事態」なのか「想定の範囲内」なのかを、統計的に検証した記録である。


まず確認:これは「異常」なのか

感覚的な不安と、データが示す事実は分けて考える必要がある。

41日間のバックテストの内訳を振り返ると、41日中28日は的中ゼロだった。

41日間の的中ゼロ日数:28日
1日あたりのゼロ的中率:28 / 41 ≈ 68.3%

つまり、バックテストの時点で「10日中およそ7日はゼロ的中」というのが、このモデルの通常運転だったということになる。

ここで、「4日連続ゼロ」が起きる確率を単純計算してみる。

1日あたりゼロ的中の確率:p ≈ 0.683
4日連続ゼロの確率:p^4 ≈ 0.683^4 ≈ 21.8%

約5回に1回は、4日連続ゼロが起きる計算になる。

「あり得ないほど異常」ではない。だが、「気にしなくていいほど普通」とも言えない、微妙なラインだ。


この計算の前提が抱える弱さ

ただし、この21.8%という数字自体、鵜呑みにはできない。前提にいくつかの弱さがあるからだ。

弱さ1:41日間という母数自体が小さい

「1日あたりゼロ的中率68.3%」は、41回の試行から推定した値に過ぎない。この推定値自体に誤差がある。二項分布の標準誤差で見ると:

標準誤差 = √(0.683 × 0.317 / 41) ≈ 7.3%

つまり実際の「真のゼロ的中率」は、60%台後半から70%台前半のどこかにある可能性が高く、68.3%ちょうどだと決めつけるのは危うい。

弱さ2:日々の的中は独立ではないかもしれない

上の計算は「各日が独立事象」という前提を置いている。だが、レースの傾向(開催場、馬場状態、季節)が数日単位で似通うことはよくある。8月8日・9日・15日・16日は、いずれも札幌・新潟・中京中心の開催で、傾向が似ている可能性がある。independent(独立)という前提が崩れていれば、「連続ゼロ」はこの単純計算より起こりやすくなる。

弱さ3:バックテストと実運用は厳密には同じ条件ではない

バックテストは「その日より前のデータしか知らないリークなしモデル」を使っていたが、実運用は「8月5日更新分までを学習した本番モデル」を使っている。学習データの鮮度は違う。理論上は実運用の方が新しい情報を持っているはずだが、逆に直近の悪いパターンを学習してしまっている可能性もゼロではない。

結論:「21.8%だから想定内」と安心しきるのは早計。だが「4日連続ゼロ=システムが壊れた」と即断するのも早計。 どちらの立場も、今のサンプルサイズでは断定できない。


今、僕がやっていること・やらないこと

やっていること

✓ 毎日の推奨馬と結果を、正直に記録し続ける
✓ 累計件数が増えるごとに、41日間バックテストの傾向(回収率122.2%、
  的中率9.6%)と乖離していないかを定期的にチェックする
✓ 開催場・EV帯など、41日間バックテストで使った切り口で実運用データも
  同じように分解し、特定のパターンに偏っていないか確認する

あえてやらないこと

✗ 24件というサンプルだけで、条件(EV3.50〜5.00・既知馬限定)を
  再調整すること
✗ 「勝率が下がっている気がする」という感覚だけでロジックを変更すること

理由はシンプルだ。24件はあまりに少なすぎる。前回の記事(#22)で「サンプルを増やすたびに171.5%→118.5%→92.6%と数字が崩れた」経験をしたばかりだ。今度は逆方向に、少ないサンプルの悪い結果だけを見て慌てて調整すれば、同じ過ちを繰り返すことになる。

良い数字が出たときに疑ったのと同じように、悪い数字が出たときも、飛びつかずに疑う。 それが一貫した態度だと思う。


今後の判断基準

このままただ「様子見」を続けるだけでは、記事として無責任だ。あらかじめ、次にどう動くかの基準を決めておく。

基準1:累計50件に到達した時点で、的中率・回収率を再確認する
  → 41日間バックテストの水準(的中率9.6%、回収率122.2%)と
    大きく乖離していれば、原因分析に着手する

基準2:連続ゼロ的中が7日(バックテストの最大連続ゼロ日数相当)を
  超えた場合は、件数を待たずに一度立ち止まって点検する

基準3:累計回収率が50%を明確に下回る状態が続く場合は、
  EV下限のさらなる引き上げ(3.50→4.00等)や、開催場別の追加
  絞り込みを検討する

数字が悪いからといってすぐに手を加えるのではなく、「どの水準になったら手を加えるか」を先に決めておくことで、感情的な判断を避けたい。


Data Scientistとしての振り返り

前回(#22)は「良い数字を疑う」話だった。今回は、その裏返しで「悪い数字も、慌てて疑う」話になった。

どちらも根っこは同じだ。サンプルサイズが小さいうちは、良い方向にも悪い方向にも、数字は簡単にブレる。 そのブレに一喜一憂して条件を変え続ければ、いつまで経っても「本当の実力」にはたどり着けない。

4日連続ゼロという事実は変えられない。だが、それを「バグの証拠」と決めつけるのも、「気にする必要なし」と切り捨てるのも、今の時点ではどちらも根拠が薄い。「まだ判断できない」という結論を、正直に受け入れる。 これも一つの誠実な態度だと思っている。


技術ノート

実運用データの記録方法

買い目リスト(keiba_ai_v3_6_hybrid_kaime_list_*.txt)と、
確定後のレース結果CSVを突き合わせて検証している。

買い目リストには race_id・オッズが直接含まれないため、
記載されている「勝率」と「EV」から
  推定オッズ = EV ÷ 勝率
を逆算し、場所+馬名で実結果と照合する簡易検証スクリプトを使用。

累計成績(2026年8月16日時点)

実運用日数:4日
推奨件数 :24件
的中数  :0件
回収率  :0%

参考:41日間バックテスト(過去データ)
推奨件数 :178件
的中率  :9.6%
回収率  :122.2%
1日あたりゼロ的中率:68.3%(28/41日)

次回の予定

累計50件到達時点での中間報告

上記の「基準1」に従い、累計50件に到達した時点で、バックテストの傾向とどれだけ一致・乖離しているかを報告する。

それまでにやること

✓ 毎日の推奨馬と結果を淡々と記録する
✓ 連続ゼロ日数が7日を超えないか注視する
✓ 条件は変更せず、今の設計(既知馬限定・EV3.50〜5.00)を維持する

いずれの結果になっても、正直に報告する。それが、この開発記録を続ける意味だと思っている。


【競馬AI開発記】次回予定:

  • Day 24:累計50件到達時点での中間報告
  • Day 25:開催場別・季節別の実運用データ分析(3月の成績が特に弱かった件の続報)

-競馬AI予測