【Google Colab】XGBoostによる競艇予測(めっちゃ儲かる?)

機械学習

XGBoostを使って何かいいことしてみようということで、競艇予測をしてみます!開発環境はお財布が寂しい人は大好き、Google Colaboratory!:fist:

また、GitHubにもあげてます。そっちのが分かりやすいかも。

Daisuke0209/XGboost
Contribute to Daisuke0209/XGboost development by creating an account on GitHub.

また、機械学習を勉強するための参考書を以下で紹介しています!よかったら見ていってください。

機械学習を勉強するためのオススメ参考書(理論・Python・Webアプリ)
統計・機械学習に関しては授業で習ったところありますが、結構忘れてしまっています(。また、Rの演習の授業はありましたが、Pythonは学生のころには使っていません。機械学習・データサイエンスを勉強するにあたり、私が参考にしている参考書を一挙ご紹介したいと思います。

XGBoostって??ディープラーニングと比べてどうなの??

簡単な説明とディープラーニングとの比較を以下の記事で紹介しています。よかったら、こっちも見てみてください。

【Python】XGBoostとディープラーニングの比較(タイタニック号データで)
Kaggleで人気のXGBoostと、もう知らない人はいないほどのディープラーニング。ぶっちゃけ、どっちがいいのか、どのケースにはどっちを使うかってみなさん分かります?少なくとも、私はよく分かりませんでしたので、自分なりに比較をしてみます。

Google ColabからGoogle Driveへのアクセス

とりあえず、Google ColaboratoryからDriveにアクセスするためマウントを取ります

競艇予測に使用するデータの説明

各列ごとに、あるレースの色んな情報を意味。だいたい番組表+オッズのイメージ。これらのデータはPythonでスクレイピングして取ってきました。 以下に簡単な説明

  • Date:レース日
  • Place:レース会場
  • Race:レースNo.
  • Nth-rank:Nコース走者のランク(A1とかB2とか)をラベル化したもの
  • Nth-num:Nコース走者の選手番号
  • Nth-ratio:Nコース走者の単勝オッズ
  • Nth-exb:展示のタイム
  • 1st,2nd,3rd,4th,5th,6th:何走者が何位になったか (1st:5なら一位は5コース走者)

他にもいっぱいデータがありますが、ちょっと面倒なので省略。もう少し詳しく知りたい方は、下の記事をご参照ください!

【Python】競艇データをWebスクレイピング
競艇予測をするにあたり、競艇のデータを集めないといけません。レースごとの番組表などのデータはブラウザで閲覧できますが、機械学習に使えるようなデータセットはネットには転がっておらず、作る必要があります。今回はPythonを用いて競艇予測に使用したデータセットを、Webスクレイピングを用いて自動で作成する方法を紹介します。

データの全体像見たい方は、Gistの投稿を見てみてください。予想するのはとりあえず1stにしましょう!

説明変数と目的変数をセットします。とりあえず使ってみるなので、説明変数も少なめで。。(;´・ω・)

競艇学習データとテストデータの分割

とりあえず、8割を学習に使います。

モデル(XGBoost)の定義

XGBoostは簡単に定義できてしまいます。

XGBoostモデルの学習

何のパラメータも設定していませんが、お試しということで(;´・ω・)

また、XGBoostでは、次の一発で最終的に推論で使う決定木を見ることができます。

今回の例においては、以下のような決定木になります。

決定木

見辛いかもしませんが、ご容赦を!

XGBoostの予測精度の評価

モデルの予測は1位になるのは何コースの走者かを出力します。

正答率は55.51%です

んん~。正答率55%がいいのか悪いのか。。。(;´・ω・) ということで、購入シミュレーションをしてみる

競艇購入シミュレーション

競艇購入シミュレーション結果

おお(;´・ω・)めっちゃ増えとるやん!500レース以上におよびますが、資産が約1.8倍まで増えています。

ところがどっこい。この結果には裏があります。oddsが高いもののみかけてますが、oddsが完全確定したタイミングでは、もちろん、もうチケットを購入することができません。

まとめ

こんなに上手い話しは実はありませんが、もうちょっと工夫すれば競艇×機械学習でぼろ儲けできる可能性があるかもしれません。

 

コメント