keiba-blog1

作った競馬予想AIの解説

2024/10/26
2025/01/30
関連ワード:AIpython競馬

作った競馬予想AIとサイト上の挙動について解説します。

詳しくはgithubを見てください

使用するデータ

使用しているのは

  • レースデータ
  • 競走馬の成績
  • 父・母父の成績

の3つです。

レースデータ

これは文字通り開催されるレースの詳細データで、項目としては

  • 日付(その年の1月1日からの日数で扱う)
  • 競馬場
  • ラウンド数
  • コース(芝かダートか障害か)
  • クラス
  • 距離
  • 天気
  • 馬場

のレースそのものの情報と

  • 枠番
  • 馬番
  • 性別
  • 年齢
  • 斤量
  • 体重(増減含む)

の馬ごとの情報の2種類からなっています。

競走馬の成績

データ長をそろえるために最新10回分の成績を使用しています。

項目はレースデータと同じです。

父・母父の成績

こちらでは出走したすべてのレースを

  • 競馬場
  • クラス
  • 距離
  • コース
  • 馬場

ごとに分類したうえで、1着、2着、3着、4着以下の回数を集計しています。

それぞれのデータはそのままだと項目数が多すぎるので適宜圧縮を行ってます。

モデル

モデルについてはニューラルネットワークを採用しています。

隠れ層は128ニューロン×2で3着以内に入る確率を1~18の各馬番に対して出力するようにしています。

活性化関数は出力層にシグモイド関数、その他の層は ミッシュ関数を使用しています。

作成したモデル

サイト上の仕様

レースのない日は必要な情報の収集と、収集したデータを予想に使用できる形式に整形する処理を行っています。情報の収集は12,20時に行い、整形の処理は深夜の時間帯に行っています。

レースのある日は直近3レースに対して馬体重などの当日に公開される情報の収集を行い、取得出来しだい予想をしています。それぞれの馬に対して3着以内に入る確率を予測し、上位5頭に対して確率が高い馬から順に印を打っています。

今後について

実装はしているものの精度は正直良くないので、改良はしていきたいと思っています。

今思いついているのは

  • 騎手データを入れる
  • 父・母父のデータに産駒成績を入れる
  • データ圧縮の改善(情報のロスを少なく、圧縮率を高く)
  • 予想モデルの改善(隠れ層の数、ニューロン数を変える。モデルから変えてみるのも良さそう)

ぐらいですが、何か思いつけば試したりしようと思います。

また、スクレイピングが重いのかエラーで当日の情報が取れず予測がされていないレースを割と見かけるので、そこも修正しようするつもりです。

ローカルでは再現できていないのでサーバースペック起因の可能性もありますが、ひとまず処理を軽くできそうな箇所があれば軽くしていこうと思います。