【回収率153%】競馬予想AIの目的変数を最適化する【#22】
このシリーズでは、競馬予想AIを作ることを通して、機械学習・データサイエンスの勉強になるコンテンツの発信や、筆者が行った実験の共有などを行っていきます。
■今回やること
今回は、競馬予想AIの「目的変数」に着目します。
目的変数とは「機械学習モデルに予測させるターゲット」のことで、現状のモデルでは1着に入った馬を「1」、それ以外を「0」とラベル付けして二値分類を行っています。
インプットするデータのイメージは上記のようになっていて、機械学習モデルは「馬ごとの過去成績」や「騎手の過去成績」など大量の特徴量(=予測材料)と目的変数の対応関係を学習します。
今回は、この目的変数の設定を見直すことで、さらなる精度向上を目指していきます。
■動画(概要編)
ソースコードは、下に進んでダウンロード・解凍すれば使うことができるので、適宜手元で参照・実行しながらお読みください。
■筆者のプロフィール
東京大学大学院卒業後、データサイエンティストとしてWEBマーケティング調査会社でWEB上の消費者行動ログ分析などを経験。
現在は、大手IT系事業会社で、転職サイトのレコメンドシステムの開発を行っています。
定期購読をすると、今月更新される記事に加えて#1〜#4の記事が980円で全て読めるので、単品購入より圧倒的にお得です。
ソースコードのダウンロード
■ディレクトリ構成概略
.
├── common ・・・スクレイピングなど、データ取得部分
│ ├── data
│ └── src
├── v3_0_7 ・・・旧バージョン
│ ├── data
│ └── src
├── v3_exp8 ・・・今回の実験バージョン
│ ├── data
│ └── src
└── v3_1_0 ・・・今回作成する新バージョン
├── data
└── src
├── main.ipynb ・・・コードを実行するnotebook
├── create_population.py ・・・学習母集団を作成する関数を定義
├── preprocessing.py ・・・/common/rawdf/のデータを前処理する関数を定義
├── feature_engineering.py ・・・機械学習モデルにインプットする特徴量を作成するクラスを定義(学習時)
├── feature_engineering_prediction.py ・・・機械学習モデルにインプットする特徴量を作成するクラスを定義(予測時)
├── config.yaml ・・・学習に用いる特徴量一覧
├── config_odds_removed.yaml・・・学習に用いる特徴量一覧(オッズと人気を抜いたモデル)
├── train.py ・・・学習処理を行うクラスを定義
├── evaluation.py ・・・モデルの精度評価を行うクラスを定義
└── prediction.py ・・・予測処理を行う関数を定義
※転載・再配布はお控えください
※今回配布するソースコードには、
・v3_exp8/src/
・v3_1_0/src/
が含まれているので、上記「ディレクトリ構成」の配置になるよう、前回までのソースコードにコピーしてください。また、前回までのv3_0_7/data/をv3_exp8/data/ にコピーすることでデータを再作成せずに使いまわすことができます。
■ソースコードの実行環境
・OS: Mac OS 14.2.1
・言語: Python 3.11.4
・エディタ: VSCode 1.95.3
VSCodeやPythonのインストール方法については様々な記事で紹介されているので、適宜参照して設定してください。
また、以下のライブラリを使用しています。
beautifulsoup4==4.12.3
lightgbm==4.5.0
matplotlib==3.8.2
numpy==2.1.0
pandas==2.2.2
PyYAML==6.0.1
scikit_learn==1.4.0
selenium==4.23.1
tqdm==4.66.1
webdriver_manager==4.0.2
この記事が気に入ったらチップで応援してみませんか?