見出し画像

【競馬AI開発#11】的中率・回収率のシミュレーションを作成する

この【競馬AI開発】シリーズでは、競馬予想AIを作ることを通して、機械学習・データサイエンスの勉強になるコンテンツの発信や、筆者が行った実験の共有などを行っていきます。

■今回やること
今回は、機械学習を使って実際に馬券を買った際の的中率・回収率のシミュレーションを行います。

【シミュレーション設定】
2023年1月〜9月のレースを学習させた機械学習モデルを使って、2023年10月〜12月のレース(=検証データ)を予測した時に、各馬券の的中率・回収率はどうなるか?

今回のコードを実行することで、以下のように各馬券の的中率(hitrate)・回収率(returnrate)を、人気順に買った場合と比較して出力することができます。

evaluator = Evaluator()
evaluator.summarize_box_top_n(n=1, save_filename="box_summary_top1.csv")
予測スコア上位1頭を単勝・複勝で買った場合。
_modelが機械学習による予測で、_popが1番人気で賭けたもの。
# 上位2頭をBOXで全通り買った場合
evaluator.summarize_box_top_n(n=2, save_filename="box_summary_top2.csv")
# 上位3頭をBOXで全通り買った場合
evaluator.summarize_box_top_n(n=3, save_filename="box_summary_top3.csv")

今後、機械学習モデルの精度を上げる実験をしていきますが、その際の成功/失敗の目安として、この指標を使うことができます。


このように、本シリーズでは、一度きりの「機械学習で競馬予測してみた」で終わるものではなく、本格的に運用できる競馬予想AIの作成を目指し、ソースコードを解説付きで公開しています。
ソースコードは下に進むとダウンロードできますので、解凍してお使いください。

■動画

■ソースコードの実行環境
・OS: Mac OS 14.2.1
・言語: Python 3.11.4
・エディタ: VSCode 1.87.0
VSCodeやPythonのインストール方法については様々な記事で紹介されているので、適宜参照して設定してください。

また、以下のライブラリを使用しています。(詳細はソースコード中のrequirements.txt参照)

beautifulsoup4==4.12.3
lightgbm==4.3.0
matplotlib==3.8.2
pandas==2.2.2
PyYAML==6.0.1
selenium==4.21.0
tqdm==4.66.1
webdriver_manager==4.0.1

■ディレクトリ構成
今回のコードに関わる部分のディレクトリ構成です。(詳細はソースコード中のREADME.md参照)

.
├── common
│   ├── data
│   └── src
└── v3_0_0
    ├── data
    │   ├── 01_preprocessed     ・・・前処理済みのデータを保存するディレクトリ
    │   │   └── return_tables.pickle
    │   ├── 02_features
    │   ├── 03_train            ・・・学習結果を保存するディレクトリ
    │   │   ├── model.pkl           ・・・学習済みモデル
    │   │   ├── evaluation.csv      ・・・検証データに対する予測結果
    │   │   └── importance.png      ・・・特徴量重要度
    │   └── 04_evaluation       ・・・検証データに対する精度評価結果を保存するディレクトリ
    │       ├── box_summary_top1.pkl    ・・・各レース予測スコア上位1頭賭けた場合の的中率・回収率
    │       ├── box_summary_top2.pkl    ・・・各レース予測スコア上位2頭賭けた場合の的中率・回収率
    │       └── box_summary_top3.pkl    ・・・各レース予測スコア上位3頭賭けた場合の的中率・回収率
    └── src
        ├── dev.ipynb               ・・・開発用notebook
        ├── main.ipynb              ・・・コードを実行するnotebook
        ├── train.py                ・・・学習処理を行うクラスを定義
        └── evaluation.py           ・・・モデルの精度評価を行うクラスを定義

■筆者のプロフィール
東京大学大学院卒業後、データサイエンティストとしてWEBマーケティング調査会社でWEB上の消費者行動ログ分析などを経験。
現在は、大手IT系事業会社で、転職サイトのレコメンドシステムの開発を行っています。

ソースコード

ここから先は

11,976字 / 18画像 / 1ファイル
この記事のみ ¥ 1,000
期間限定 PayPay支払いすると抽選でお得に!

この記事が気に入ったらサポートをしてみませんか?