Amazon Q in QuickSightで競馬分析してみた
はじめに
競馬と聞くと「ロマン」や「運」を想起しがちですが、データの力で勝てるのか?という問いは競馬ファンなら一度は考えるものではないでしょうか。
2025年7月8日にAmazon Q in QuickSight が東京リージョンでもリリースされたので、自然言語での分析体験が競馬にどこまで役立つのかを軽く検証してみました!
この記事は、「競馬分析に有用かどうかを見極める」ことを目的として触ってみた内容のレポートです
Amazon Q in QuickSightとは?
QuickSightに統合された生成AIアシスタントで、自然言語での質問に応じてデータを検索・集計・可視化してくれます。
たとえば以下のような質問をそのまま投げられます。
- 「horse_id = 2021100953 の馬のレース結果を日付順に表示してください」
- 「天候と勝つ確率(オッズ)の相関関係は?」
- 「オッズが5.0未満の馬が実際に勝つ確率は?」
使用したデータ
- レース結果
カラム名 | 説明 | 例・型 |
---|---|---|
id | 一意のレース出走ID | 202110095320250209 |
horse_id | 馬のID | 2021100953 |
dt | 開催日(yyyymmdd) | 20250209 |
racecourse | 開催場所 | 東京、中京など |
weather | 天気 | 晴、曇、雨など |
R_no | レース番号 | 11.0 |
race_name | レース名 | NHKマイルC(GI) |
number_of_horses | 出走馬の総数 | 18.0 |
frame_of_no | 枠番 | 5.0 |
horse_of_no | 馬番 | 10 |
odds | 単勝オッズ | 3.5 など |
goal | 着順 | 1, 2, 3 など |
index_of_time | 着差 | 0.0, 1.1, etc. |
pace, pass, upward | ペース、通過順、上がりタイム分析用 | - |
weight, amount_of_change | 馬体重とその増減 | 458, -4など |
pass_1〜pass_4 | 通過順(レース中間) | 第1〜第4コーナー |
time | ゴールタイム | 1:33.4 |
surface | 馬場種別 | 芝、ダートなど |
distance | 距離 | 1600.0 |
- 馬のレーティング
カラム名 | 説明 | 例・型 |
---|---|---|
ランク | 順位 | 2, 3, 4 |
レーティング | 馬の評価値 | 123, 121, 120 |
キログラム | 斤量(kg)※レース時に馬体重以外で馬にかかる負担重量 | 55.5, 56.0, 54.0 |
距離区分 | 距離のカテゴリ区分 | L, I |
馬名 | 出走馬の名前またはレース名 | ドウデュース, ドゥレッツァ |
実際にやってみた
質問1:各馬の勝利数と勝率を使って競馬の予想に役立てたい
複数のより具体的な分析内容を提示してくれた(以下例)
- 「horse_id が 2021100953 の馬のレース結果を日付順に表示してください」
- 「天候と勝つ確率(オッズ)の相関関係は何ですか?」(採用)
- 「馬の体重が10kg増えた場合、勝率はどう変わりますか?」
- 「全レースで最も勝率が高い枠番(frame_of_no)はどれですか?」
- 「オッズが5.0未満の馬が実際に勝つ確率はどのくらいですか?」
質問2:天候と勝つ確率(オッズ)の相関関係は何ですか?
分析にあたって複数のステップに分けて実施してくれた
- 勝利馬と各レースに関連する情報に注目してデータを準備する
- 前提
- 「goal」列の値が「1」の場合、それは勝利した馬を正確に表していると仮定。
季節的な変動は考慮せず、すべての天候条件を同等に扱う。
- 「goal」列の値が「1」の場合、それは勝利した馬を正確に表していると仮定。
- 前提
- さまざまな天候条件ごとの平均勝利オッズを計算する
- 前提
- 天候ごとのレース数に大きな違いがあるにもかかわらず、すべての天候条件が同等に代表的であると仮定。
- 前提
- 統計分析を行い、天候が勝利オッズに有意な影響を与えているかを確認する
- 前提
- 天候ごとのレース数に大きな差(例:晴れは8,232回、雪は12回)があるが、これは全体の分析結果に大きな偏りをもたらさないと仮定。
- 各レースの重要性や賞金の大小にかかわらず、すべてのレースを同等に扱う。
- 前提
結果
天候によって勝利オッズには違いがあることが判明。
晴れの天候が全体の 59.9% を占め、平均オッズは 7.68。
一方、雪や小雪などの天候はまれ(全体の 0.2%)で、平均オッズは高め(例:小雪で 8.91)。
ただし、晴れ(8,232回)と雪(12回)のように天候ごとのレース数に大きな偏りがあるため、特に珍しい天候タイプに関しては比較の信頼性に影響が出る可能性がある。
可視化の例
ステップ1
ステップ2
他のデータとのjoin
質問1:レーティングの高い馬はどの天気で走ることが多いとかありますか
結果
「結合後のデータセットが空であり、一致するIDが存在しない可能性が高い」とのこと
質問2:追加したデータと馬の名前で紐付けてレートと勝率の相関関係を調べて
結果
先ほどと同様ステップに分けて結果を出力される。
可視化例
各馬がどれくらいの頻度で勝っているか
まとめ
項目 | 評価 |
---|---|
実用性(競馬分析向き) | ★★★★☆(勝率やオッズの傾向把握には十分役立つ) |
柔軟性 | ★★☆☆☆(血統や騎手など複数データの結合には前処理が必須) |
学習負荷 | ★★★★★(自然言語で質問するだけで分析可能) |
日本語対応 | ★☆☆☆☆(2025/7月末では出来ないようでした |
予測分析の拡張性 | ★★☆☆☆(相関は出せるが因果推定や予測モデルはまだ難しい印象) |
発見的分析(仮説検証) | ★★★★☆(「特定条件で勝率は?」といった探索には強い) |
データを渡してSQLなしで簡単に分析できるため、専門知識が入らないのはかなりの強み。
自分の場合は分析してもグラフまで作るのは手間なのと、そこまで必要性に迫られないのでやらないが、これだけお手軽なら全然良い。
また、自然言語系のAIはカジュアルに使いたい場合、口語的に質問できるのも良さだと思うので、雑質問でも複数のより具体的な質問案を返してくれるのは個人的に好きなポイントだった。
ただ、ここからレース結果を予想する領域はまだ人の手を入れる方が精度が高そうだが、今後の発展に期待。
今度はもう少し絡むの物理名を揃えるなどして、joinが正常にされるかや、過去データを使って、自走のレースの予測をしてみるなど試してみたい。
Discussion