AIツール(SPSS Modeler)で宝塚記念を予想してみた


## 目的
AIツールであるIBM SPSS Modelerを使用して宝塚記念を予想してみます。

## 対象読者
- データ分析に興味がある方
- 競馬に興味がある方

## 前提条件
- あくまでもデータ分析による一見解であり、この予想に対して何ら責任を負うものではありません。馬券の購入は自己責任でお願い致します。
- コース特徴により、統計的な有意があること
- 多少の競馬の知識があること
- 今回は単勝の予想になります（1着をあてる)
- オッズは最終オッズを使用しているため、5分前オッズとは微妙に異なります。
- 今回から宝塚記念の開催が2週間前倒しになりましたが、開催時期による馬場状態などは考慮されていません。


## 目次
 [1. 宝塚記念のコースと対象データ範囲](#1宝塚記念のコースと対象データ範囲)

 [2. 阪神2200m（内回り）の仮説](#2阪神2200m内回りの仮説)

 [3. 阪神2200mの単勝分析](#3阪神2200mの単勝分析)
 
 [4. 予想のために特徴量の作成と単勝予測分析](#4予想のために特徴量の作成と単勝予測分析)

 [5. 宝塚記念出走馬の競争成績の編集](#5宝塚記念出走馬の競争成績の編集)

 [6. 結論](#6結論)

## 1.宝塚記念のコースと対象データ範囲
2025年の宝塚記念のコースは阪神競馬場の２２００ｍ（内回り）になります（JRAのホームページより抜粋）
![keibajou.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3971791/aa516d51-4f97-440f-a529-2a9bf946d58e.png)
阪神競馬場は2006年にコースの大幅な改修が行われたため、分析対象データは
改修後の2006年12月のデータ以降を対象と致します。

- 対象データ：2006年12月1日～2025年6月12日

## 2.阪神2200m（内回り）の仮説
直線が356.5mしかないため、逃げ、先行馬有利と言われております。またスタート後にすぐに急な上り坂があり、スローペースになりやすいのも逃げ・先行馬有利になる要因です。枠については、スタートから１コーナーまでの距離が長いため、あまり影響がないと言われています。

## 3.阪神2200mの単勝分析
まずは、1着をあてる単勝の分析をしてみたいと思います。
単勝の還元率は80%ですので、すべての出走馬の単勝を購入しつづけた場合、払い戻し金額は購入金額の8割に近づいていきます。
（つまり購入金額の8割以上戻ってくれば、確率論的にはプラスの状態です）

単勝のオッズ（払戻金）を目的変数に入れて、適当に説明変数（以下、特徴量）を選んで分析してみます。基礎情報として、対象データ期間で阪神2200m（内回り）のレースは198レースあり、延べ2398頭の競走馬が出走しております。

以下がCHAIDという分析手法を用いて実行した分析結果になります。
（CHAIDについて詳しく知りたい方は[決定木分析とは？](https://ai365.jp/columns/decision-tree-analysis/)をご参照ください)
![4kaku1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3971791/b74317c9-cff1-4ee6-aac5-64486993a6a5.png)
（文字が小さい場合は図をダブルクリックして拡大表示してみてください）

グラフの見方ですが、一番上の「ノード０」は何も考えずにランダムで購入した場合、購入金額に対して、79.479%の回収率であることが分かります（単勝の還元率の8割とほぼ等しくなります）
１番目の特徴量である「４角」は第４コーナーの通過順を表しています。左上の「ノード１」をみると第４コーナーを1番目に通過した場合の回収率が321%であることが分かります。さらに「上り3Fが35.4秒以下」の「ノード４」をみると回収率が894%に跳ね上がっていることが分かります。つまり「4角先頭」「上がり3Fが35.4秒以下」で走る馬を見つけることが出来れば、高回収率になります。

## 4.予想のために特徴量の作成と単勝予測分析
上記の予想だけでもよいのですが、４角先頭は阪神2200mの分析のため、今回の出走する１７頭が同条件ばかり走っている訳ではありません。実際にはそれぞれにおいて、出走する「競馬場」「距離」「条件」などが異なるためそのまま利用するには無理があります。そこで予想するために普遍的な特徴量である「４角先行指数」を作成します。「４角先行指数」は各々のレースにおいて何頭立てで第４コーナーを何番目に通過したのかを表す先行力を表す指数になります。
（計算式：「４角先行指数」＝４角ポジション／何頭だて）
**つまり数値が低い方がより先行力がある**ことを表します。

同様に「３角先行指数」も追加してもう一度、CHAIDという分析手法を用いて、単勝予測分析を実施しました。
![4kakusenkousisuu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3971791/a6af25a4-90bf-43dc-9057-77e2d792cecd.png)
（文字が小さい場合は図をダブルクリックして拡大表示してみてください）

グラフの見方ですが、前回と同様にみますと「4角先行指数」が0.375以下の場合、「ノード１」の回収率が134%になっているのが分かります。さらに「上り3F」が35.4秒以下の場合、「ノード５」の回収率が323％となり、「3角先行指数」が0.133以下の場合、「ノード12」の回収率が1056%と跳ね上がっているのが分かります。

## 5.宝塚記念出走馬の競争成績の編集
今年の宝塚記念に出走する17頭の競争成績から「3角先行指数」「4角先行指数」を算出します。各々のレース毎に「3角先行指数」「4角先行指数」を算出し、各競走馬毎のデータの分布を確認します。これはデータのばらつきぐらいを確認し、指数の算出方法を決定するためです。
- 「4角先行指数」の出走馬の箱ひげ図
![hakohigezu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3971791/f079a51e-940f-4ad9-8ca3-0c26e834acc5.png)
- 「上り3F」の出走馬の箱ひげ図
![agar3f_hakohige.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3971791/06175d99-50c4-466c-917d-d584b7c75d24.png)

今回はデータのばらつきが大きいため、「３角先行指数」「４角先行指数」には中央値を採用し、「上り3F」はばらつきが少ないため、平均値を採用します。

各競走馬の「上り3F」「３角先行指数」「４角先行指数」は以下の通りです。
![jisseki.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3971791/38b4cb10-d194-46a2-811f-8ea1f745f191.png)

## 6.結論
「4. 予想のために特徴量の作成と単勝予測分析」で作成したモデルに「5.宝塚記念出走馬の競争成績」で作成した競走馬のデータを条件に当てはめました。

### 6.1 回収率1056%（ノード12）の該当馬
残念ながら該当する競走馬はいませんでした。
![kaishuuritu1056.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3971791/8661c3cc-a753-46d0-ac65-955ea612a792.png)

### 6.2 回収率323%（ノード５）の該当馬
以下の4頭が該当しました。
![kaishuuritu323.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3971791/73b700fc-764a-483a-916e-47d1c27d02b8.png)

このうち、べラジオオペラは前走の大阪杯（GI）を勝利していることもあり、1番人気になることが予想されます。以下が[「netkeiba」](https://race.netkeiba.com/odds/index.html?race_id=202509030411&rf=special_pickup)さんが発表している2025/6/13 7時時点の予想オッズになります。
![yosouodds.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3971791/41186144-a8e8-435f-8de4-c2b984ac9e29.png)

後は、当日のオッズを見ながらベラジンオペラを含めて購入するか、元本割れの恐れがあるので他の３頭で勝負するか、見送るかは皆様のご判断にお任せたいしたいと思います。

最後までご一読頂きありがとうございました。