競馬AI予測

【競馬AI #33】累計104件・的中0。推奨馬の3分の2は「同じ確率」の馬から選ばれていた

---

13件、すべて着外

前回(#32)は、累計91件・的中0の原因が、訓練時のデータリークだったという話を書いた。その後の週末(10月24日・25日)の結果を報告する。

```

10月24日(京都・新潟・東京):5件推奨 的中0

10月25日(京都・東京)   :8件推奨 的中0

```

```

最高着順:5着(メッエフアパラ)、6着(ショウナンハヤナミ・ペイシャプル・アウルムレガリア)

13件すべてがオッズ28〜60倍台、人気は8〜12番人気

```

累計は**104件、的中0**になった。

```

全期間累計:104件 的中0 回収率0%

  札幌除外前(8/8〜8/30):43件 的中0

  札幌除外後(9/5〜10/25):61件 的中0

全ハズレ確率(バックテスト的中率9.6%想定)

  104件すべて  :約0.003%

  札幌除外後61件 :約0.2%

記録の抜け:10/24・10/25のシャドー記録がなかった

結果を集計する段階で、全出走馬の予測確率を残す `shadow_logs` に、この週末の分が保存されていないことに気づいた。

買い目リストは出ているのに、シャドー記録だけがない。原因を調べたところ、実行ログの最後(STEP 13)に、記録の保存処理が置かれていた。実行を途中でやめると、買い目は出ても、この記録だけが残らない。10/25の実行は途中で止めていた可能性が高い。10/24については、断定できていない。

出馬表が残っていたので、同じコマンドを最後まで実行し直して、記録を作り直した。

```

✓ 再実行で出た推奨馬は、当日の買い目リストと完全に一致した(10/24:5頭、10/25:8頭)

✓ 2日分とも、現行モデルとPhase 4の両方の確率が、正しく保存された

```

再発防止として、実行は必ず `COMPLETE` の表示まで待つことにした。

---

新しい発見:確率が「段差」になっていた

作り直した記録を含め、10/10〜10/18の実際の記録(1,902頭)を調べ直すと、現行モデルの出力に、おかしな偏りがあった。

```

現行モデルの出力(raw_score)

  異なる値の数       :122種類(1,902頭に対して)

  最も多い同一の値(0.119028):1,109頭(58%)

```

**58%の馬が、まったく同じ確率を付けられていた。**

しかも、この偏りが、推奨馬の選ばれ方に直結していた。

```

推奨された24頭のうち

  同じ値(0.119028)の馬:16頭(67%)

  推奨馬のオッズ    :25.6〜58.7倍

```

何が起きているのか。確率がほぼ同じ馬が大量にいる中で、レース内の正規化を経ても、確率の差は小さいままになる。すると、EV(確率 × オッズ)は、オッズの高さでほぼ決まる。EVが3.50〜5.00の条件を満たす馬は、結局、「オッズの高い馬」になる。

つまり、推奨の多くは、モデルが馬を見分けた結果というより、**同じ確率の馬の中から、オッズが高い馬を拾っていた**ことになる。

原因は、リークのあるデータで確率を補正する処理(Isotonic Regression)が、確率を粗い段差にしてしまうことだと考えている。これは#32で書いた構造的な問題の、別の側面だ。

---

更新した評価:現行モデルは市場より有意に悪い

シャドー記録が7日分、2,824頭・216レースになったので、評価を更新した。

```

レース単位の対数損失(小さいほど良い)

  市場      :2.0167

  現行モデル   :2.4814 (市場との差 +0.4647、95%区間 +0.3672〜+0.5623)

```

現行モデルは、市場より**有意に悪い**。市場に少しでも混ぜると、混ぜた分だけ悪化する傾向も、前回と変わらない。

---

Phase 4:2日分・72レースの初期評価

訓練の最終日(10/18)より後の日、10/24と10/25の2日分(72レース・929頭)で、Phase 4 を評価した。

```

レース単位の対数損失

  市場      :2.0190

  Phase 4     :1.9956 (差 -0.0233、95%区間 -0.0504〜+0.0037)

  現行モデル   :2.4651 (差 +0.4461、95%区間 +0.2968〜+0.5955)

```

Phase 4 は市場との差が0を跨いでおり、**市場と同等か、まだ判断できない**。72レースでは、結論を出せない。

ただ、同じ72レースで比べると、Phase 4 は現行モデルより大きく良い。確率の校正も、引き続きおおむね良好だった。

```

Phase 4の確率帯  予測平均 実際の勝率

  8〜12%      9.6%   9.9%

  12〜20%     14.8%   16.2%

  30%以上     38.3%   37.5%

```

Phase 4 の評価件数(929頭)は、目安の約3,000頭には、まだ届いていない。

---

購入方針について

現行ルール(EV3.50〜5.00)の購入をどうするかは、まだ決めていない。決めるための材料は、揃ってきた。

```

・実運用:104件・的中0(全ハズレ確率 約0.003%)

・時間分割の検証:同じ方式の再現で、回収率が48〜58%

・シャドー記録:市場より有意に悪い(差 +0.46)

・推奨の3分の2が、「同じ確率」の馬から、オッズの高さで選ばれていた

・Phase 4:市場と同等かもしれないが、まだ72レース分しかない

```

この材料をもとに、次回までに方針を決めて、報告する。

---

Data Scientistとしての振り返り

今回の学びは、二つある。

一つ目。**出力の「分布」を、一度は自分の目で見ること。** 今回の偏りは、記録を作り直す過程で、たまたま気づいた。122種類しか値がないという事実は、最初から見ていれば、すぐに分かることだった。平均や回収率だけを見ていると、こうした偏りが隠れる。

二つ目。**記録の抜けは、静かに起きる。** 買い目は普通に出てくるので、別の処理が止まっていても気づきにくい。毎週の確認事項として、実行ログの最後の `COMPLETE` と、`shadow_logs` のファイルの有無を、見ることにした。

---

## 技術ノート

### 実運用累計成績(2026年10月26日時点)

```

全期間累計:104件 的中0 回収率0%

  札幌除外前(8/8〜8/30):43件 的中0

  札幌除外後(9/5〜10/25):61件 的中0

```

### 統計的評価(的中率9.6%想定)

```

104件すべてハズレ         :約0.003%

札幌除外後61件すべてハズレ:約0.2%

```

### シャドー記録の評価(2026年10月10日〜25日)

```

現行モデル(7日分・2,824頭・216レース)

  市場との対数損失の差:+0.4647(95%区間 +0.3672〜+0.5623)

Phase 4(訓練最終日10/18より後の2日分・72レース)

  市場との対数損失の差:-0.0233(95%区間 -0.0504〜+0.0037)→ 判断できない

```

---

## 次回の予定

Phase 4 の記録を、毎週積み上げる。購入方針も、次回までに決めて報告する。

---

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

- Day 34:購入方針の決定と、Phase 4 の追加データ

-競馬AI予測