メインコンテンツへスキップ
見出し画像

【競馬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系事業会社で、転職サイトのレコメンドシステムの開発を行っています。

    定期購読をすると、今月更新される記事に加えて#1〜#4の記事が980円で全て読めるので大変お得です。

    ソースコード

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

    あなたへのおすすめ