機械学習による競馬予想について
こんばんは。よねよねくらぶです。
こちらの記事について結構読んで頂いているのですが、
かなり煩雑に書いているので書き直します。
今回は使っている予測の手法だけでなく、この記事を読みながら競馬予想のプログラムを実装できるようにしていきたいと思います。
0.モチベーション
初めて個人の成果物ができたので、
みなさんもぜひやってみてくださいというモチベーションです。
・趣味で何か成果物を作りたい。
・機械学習始めたい。(siganteとかkaggleもおすすめです)
・プログラミングをしてみたい。
という方を意識して書いています。
準備.機械学習と競馬予想
機械学習と競馬予想は相性が良いです。
機械学習アルゴリズムは、タスクを実行するように明示的にプログラムされることなく予測や決定を行うために、「訓練データ」として知られるサンプルデータに基づいて数学モデルを構築する。(参照wiki)
この訓練データとは教師あり学習の分野では入力データ(騎手、馬名、馬番など)と、出力データ(何着)で構成されており、この入力データと出力データから学習を行い、未知の入力データに対して予測を行ます。つまり、入力データに表せないような、現象がに影出力に影響するような題材は扱い辛いです。例えば、株価などの題材は、先日首相が辞任されましたが、その前から病院に行くや各政治家の方が体調について言及する場面がありました。そのような変化を入力データとして、明示的に示すのは難しいです。ですが競馬においてはそういった明示的に示しづらい変数はかなり少なくなります。先ほどの首相が辞任することによって競馬の着順に影響していることは0に近いからです。
ですので、機械学習に興味があるが、競馬予想に興味がない方でも、競馬という題材は非常に機械学習と相性が良いので、機械学習が初めてという方にもおすすめです。(さらに、機械学習においてデータを集めることも重要で、比較的競馬はデータが集めやすいです。)
環境はgoogle colaboratoryです。
google colaboratory は非常に優秀なツールです。IPythonが動き、pythonを環境構築不要で実行することができます。(Google アカウントがあれば)
詳しくはこちらを参考に
1.データを集める
データを集める方法はwebからデータを取得して、自分のパソコンもしくはクラウドに保存していきます。webからデータを取得することはスクレイピングといいます。
こちらに競馬データのスクレイピングの方法を書きました。
この記事を参考にスクレイピングしていけば過去の競馬データを集めることができます。また、「スクレイピング」もしくは「競馬 スクレイピング」と検索するとたくさん出てくるのでぜひ参考にしてください。(qiitaの記事はこちら)
2.データを機械学習用に成形する。
上記のようなデータを例に説明します。
ラベルエンコードについて
機械学習は定量的ではないデータは学習できません。具体的には牝・雄や
騎手・馬名などです。性別である牝・雄は牝→0,雄→1とすることで定量的に表します。騎手・馬名なども同様にxxx,yyy,zzzという馬がいた場合、xxx→0,yyy→1,zzz→2で表すことも可能ですが、馬名の数だけ数が増えるので得策ではありません。ですのでこの文字数の長さに変換するなどが考えられます。また騎手に関しても同様で、xxx→0,yyy→1,zzz→2で表すことも可能ですが勝率、勝利数などに置き換えて学習させるのがいいと思います。
性別である牝・雄は牝→0,雄→1はlabelencodeといいます。scikiti-learnを使うと簡単に実装できます。
標準化について
標準化とは各レースごとに意味にばらつきのあるデータを比べることのできるようなデータにすることです。例えば、8頭中の8位と16頭中の8位ではおなじ8という数字でも意味が変わってきます。そこで、標準化などの処理を行ます。標準化にはいろいろな方法がありますが順位に関する簡単な方法は各レースの出場頭数で順位を割るということが考えられます。こうしてデータを標準化します。
3.学習する。
いよいよ学習です。
書き始めたら長くなり、時間がなくなってしまいました。
すみません。
次回ここよりさきを書いていこうと思います。
この記事が気に入ったらサポートをしてみませんか?