見出し画像

【競馬AI開発#17】血統データを予測材料に追加する

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

■今回やること
今回は、血統データを競馬予想AIの予測材料に追加することで、精度向上を目指します。

netkeiba.comでは「種牡馬リーディング」ページから、「各種牡馬(=父親)から生まれた馬がどのような成績を残したか」というデータを取得することができます。

https://db.netkeiba.com/?pid=sire_leading&year=2022 

今回はこのデータを競馬予想AIの予測材料にインプットして学習させていきます。

使用するソースコードは、下に進んでダウンロード・解凍すればそのまま使うことができるので、適宜手元で参照・実行しながらお読みください。

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


定期購読をすると、今月更新される記事に加えて#1〜#4の記事が980円で全て読めるので、単品購入より圧倒的にお得です。

ソースコードのダウンロード

■ディレクトリ構成

.
├── requirements.txt                ・・・必要なライブラリを記載
├── README.md                       ・・・ディレクトリ構成を記載(本ファイル)
├── common
│   ├── data
│   │   ├── html
│   │   │   ├── race
│   │   │   │   └── {race_id}.bin   ・・・スクレイピングしたraceページのhtml
│   │   │   ├── horse
│   │   │   │   └── {horse_id}.bin  ・・・スクレイピングしたhorseページのhtml
│   │   │   ├── ped
│   │   │   │   └── {horse_id}.bin  ・・・スクレイピングしたpedページのhtml
│   │   │   └── leading
│   │   │       ├── jockey_leading  ・・・スクレイピングした騎手リーディングページのhtml
│   │   │       ├── trainer_leading ・・・スクレイピングした調教師リーディングページのhtml
│   │   │       ├── sire_leading    ・・・スクレイピングした種牡馬リーディングページのhtml
│   │   │       └── bms_leading     ・・・スクレイピングしたBMSリーディングページのhtml
│   │   ├── rawdf                   ・・・Pandas.DataFrameのrawデータを保存するディレクトリ
│   │   │   ├── results.csv
│   │   │   ├── horse_results.csv
│   │   │   ├── horse_results_prediction.csv
│   │   │   ├── peds.csv
│   │   │   ├── jockey_leading.csv
│   │   │   ├── trainer_leading.csv
│   │   │   ├── sire_leading.csv
│   │   │   ├── bms_leading.csv
│   │   │   ├── return_tables.csv
│   │   │   └── race_info.csv
│   │   ├── mapping                 ・・・カテゴリ変数から整数へのマッピング
│   │   │   ├── around.json
│   │   │   ├── ground_state.json
│   │   │   ├── race_class.json
│   │   │   ├── race_type.json
│   │   │   ├── place.json
│   │   │   ├── sex.json
│   │   │   └── weather.json
│   │   └── prediction_population   ・・・予測母集団(開催日, race_id, horse_id)
│   │       └── population.csv
│   └── src
│       ├── create_rawdf.py                 ・・・htmlをDataFrameに変換する関数を定義
│       ├── main.ipynb                      ・・・コードを実行するnotebook
│       ├── dev.ipynb                       ・・・開発用notebook
│       ├── create_prediction_population.py ・・・予測母集団を作成する関数を定義
│       └── scraping.py                     ・・・スクレイピングする関数を定義
├── v3_0_4
├── v3_exp5                        ・・・実験用のバージョン
└── v3_0_5
    ├── data
    │   ├── 00_population       ・・・学習母集団を保存するディレクトリ
    │   │   └── population.csv
    │   ├── 01_preprocessed     ・・・前処理済みのデータを保存するディレクトリ
    │   │   ├── horse_results.csv
    │   │   ├── horse_results_prediction.csv
    │   │   ├── peds.csv
    │   │   ├── peds_prediction.csv
    │   │   ├── return_tables.pickle
    │   │   ├── results.csv
    │   │   ├── jockey_leading.csv
    │   │   ├── trainer_leading.csv
    │   │   ├── sire_leading.csv
    │   │   ├── bms_leading.csv
    │   │   └── race_info.csv
    │   ├── 02_features         ・・・全てのテーブルを集計・結合した特徴量を保存するディレクトリ
    │   │   └── features.csv
    │   ├── 03_train            ・・・学習結果を保存するディレクトリ
    │   │   ├── model.pkl           ・・・学習済みモデル
    │   │   ├── evaluation.csv      ・・・検証データに対する予測結果
    │   │   ├── importance.csv      ・・・特徴量重要度(一覧)
    │   │   └── importance.png      ・・・特徴量重要度(上位を可視化)
    │   │   ├── model_odds_removed.pkl           ・・・学習済みモデル(オッズと人気を抜いたモデル)
    │   │   ├── evaluation_odds_removed.csv      ・・・検証データに対する予測結果(オッズと人気を抜いたモデル)
    │   │   ├── importance_odds_removed.csv      ・・・特徴量重要度(オッズと人気を抜いたモデル)
    │   │   └── importance_odds_removed.png      ・・・特徴量重要度(オッズと人気を抜いたモデル)
    │   └── 04_evaluation       ・・・検証データに対する精度評価結果を保存するディレクトリ
    └── src
        ├── dev.ipynb               ・・・開発用notebook
        ├── 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           ・・・予測処理を行う関数を定義

ここから先は

53,855字 / 28画像 / 1ファイル
この記事のみ ¥ 1,980

この記事が気に入ったらチップで応援してみませんか?