見出し画像

【競馬AI開発#10】払い戻しテーブルを取得・前処理する

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

■今回やること
前回の記事では予測時のコードが完成し、学習〜予測までの一通りの流れが完成しました。

ここからは、精度を上げて回収率100%超えを目指していきます。
それにあたって、まずは回収率のシミュレーションをする必要があります。

そのために各馬券の払い戻し情報が必要なので、netkeiba.comのraceページからデータをまとめて取得していきます。

払い戻しテーブル
https://db.netkeiba.com/race/202306010101/

一見すると、計算に使いづらそうな形式になっていて「こんなのどうやってシミュレーションに使えば良いの?」と思うかも知れませんが、pandasの各種メソッドを駆使することで、以下のような複雑なデータをわずか10行程度のコードでシミュレーションに利用可能なデータに変換することができます。

払い戻しテーブルのrawデータ。
これをシミュレーション可能な形に整形したいが、どんなコードを書けば良いか?

▼実行結果

return_tables_preprocessed = preprocessing.process_return_tables()
return_tables_preprocessedの中身。
2023年全てのレースの払い戻しテーブルを、全て3列にまとめて保存する。

動画

今回の記事は、以下の動画のソースコードをまとめたものになります。

また、本記事のみでも実行できるように、動画中のソースコードに加えて、途中で必要になるraceページのbinファイルを、サンプルとして5レース分取得するコードも載せています。

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


ディレクトリ構成

今回実行するコードに関わる部分のディレクトリ構成です。

.
├── common
│   ├── data
│   │   ├── html
│   │   │   ├── race
│   │   │   │   └── {race_id}.bin   ・・・スクレイピングしたraceページのhtml
│   │   │   └── horse
│   │   └── rawdf
│   │       └── return_tables.csv
│   └── src
│       ├── create_rawdf.py         ・・・htmlをDataFrameに変換する関数を定義
│       └── main.ipynb              ・・・コードを実行するnotebook
└── v3_0_0
    ├── data
    │   └── 01_preprocessed         ・・・前処理済みのデータを保存するディレクトリ
    │       └── return_tables.pickle
    └── src
        ├── dev.ipynb               ・・・開発用notebook
        ├── main.ipynb              ・・・コードを実行するnotebook
        └── preprocessing.py        ・・・/common/rawdf/のデータを前処理する関数を定義

ここから先は

6,200字 / 6画像

¥ 480

期間限定 PayPay支払いすると抽選でお得に!

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