シリコンバレーで習得した最先端のAI技術を活かして、機械学習を用いた競艇の解析を行ってみました。
どのような考え方で解析を進めたか解析していきますので、同じように競艇解析を行いたいと考えている方はご参考にしてみてください。
また、予測結果(ビジュアライズ結果)についてを、レジマグで毎日販売をしています。興味のある方は是非ご覧ください。
競艇とは
シンプルに言うと、6艇の着順を当てるギャンブルです。
ただ、ルーレットのように運で番号が決まる訳ではなく、
ボートレーサー、ボートの性能、モーターの性能、競艇場の天気など様々な要因が絡み合い、最終的に順位が決まります。
例えば、強いレーサーが絡む舟券は人気となり、オッズは低くなります。
基本となる賭け方は、2連単と3連単です。
2連単とは、1着と2着を予想する舟券。3連単とは、1着/2着/3着を予測する舟券です。
競艇で勝つための考え方
では、競艇で勝つためにはどのような考え方で舟券を買えば良いのか、説明していきます。
機械学習を使って競艇で勝つには、『オッズの歪み』を見つける必要があります。
『オッズの歪み』とは何かと言うと、実力とオッズが見合っていない舟券です。
つまり、実際に舟券が当選する確率と、大衆が考えた確率(=オッズ)に乖離がある場合、それは『オッズの歪み』があると言えます。
一例を示します。
特定の舟券に対する、実際に当選する確率とオッズ倍率を比較します。
その後、それら2つの値から期待値を算出することができます。期待値とは、戻ってくる「見込み」の金額です。
舟券 1-2-3 を例にすると、実際に当選する確率は40%であり、オッズは2.0倍です。
つまり、期待値は 0.4×2.0 = 0.8 となり、100円賭けた時に80円が戻ってくる「見込み」だと言うことが分かります。
ここで注目すべきは、期待値が1.0を超えている舟券です。ここでは、2-3-1の舟券が該当します。
2-3-1の舟券を買うことで、1.2倍が戻ってくる「見込み」ということです。
つまり、1万円を賭けた時は、1万2千円が戻ってくる見込みということを示しているわけです。
なぜこのような現象になるかと言うと、2-3-1の舟券については、大衆が予測している確率よりも、実際に当選する確率が高いからです。
2-3-1のオッズ倍率は 12.0 です。つまり、大衆は12回に1回は2-3-1が来るだろうと考えています。しかしながら、実際に当選する確率は10%なので、10回に1回は2-3-1が当選します。
大衆が予測している確率(オッズ倍率)よりも実際に当選する確率が高い舟券を探すことが重要
レースに関するデータの取得
競艇の解析に用いるためのデータの場所を説明します。
私はこのサイトからデータを取得しています。
番組表:https://www1.mbrace.or.jp/od2/B/dindex.html
結果:https://www1.mbrace.or.jp/od2/K/dindex.html
番組表・結果ともに同じ形式です。
取得したい日付を選択し、ダウンロード開始を押すことでデータをダウンロードできます。
データ形式はTXTです。
競艇場名、何日目、舟番、選手登番、選手名、年齢、支部、体重、級別、全国勝率/2率、当地勝率/2率、モータNo/2率、ボードNo/2率、今季成績
これらのデータを活用し、結果を予測していきます。
選手データの取得
こちらのURLから、レーサー期別成績ダウンロードができます。
レーサー期別成績:https://www.boatrace.jp/owpc/pc/extra/data/download.html
現在(2022/04/24)だと、2002年のデータから2021年前期のデータまでダウンロード可能です。
ダウンロードされるデータのレイアウトについてはこちらからご覧ください。
データレイアウト:https://www.boatrace.jp/owpc/pc/extra/data/layout.html
ざっくりとデータを説明します。
- ①選手情報
-
名前、級、勝率、年齢、1着回数、平均STな
- ②コースごとの成績
-
〇コース進入回数、〇コース平均ST、〇コース平均スタート順位、〇コース複勝率など
- ③選手等級
-
前期級、前々期級、前々々期級、期など
- ④コースごとの成績
-
〇コース1着回数、〇コース2着回数、〇コース3着回数など
目指すアウトプット
データを準備していくにあたり、目指していくアウトプットの形を決めていきます。
今回は、以下のようなアウトプットを目指します。
1月12日の若松競艇場でのデータをAI解析した結果を例にします。
各選手ごとのパワーバランスをレースごとに相対的にプロットしています。
算出した選手ごとのパワーをもとに、『オッズの歪み』を見つけていくという作戦を取ります。
選手ごとに算出されたパワーを更にもう一度AIで解析することで、そのレースにおいて任意の舟番が来る確率を算出することができるのです。
分かりやすい例を示すと、2レース目を見てください。
3-1-6が均等なバランスで並んでいて、他3艇はいずれもパワーが非常に低いことが伺えます。
私が解析をしたところ、このように結果が分かりやすいレースかつオッズが高いレースは狙い目です。
実際の結果を見ると、2レース目は3-1-6が当選し、2,110円のオッズとなっています。
つまり、大衆は3-1-6が来ることは約21回に1回の確率だと考えています。
しかしながら、パワーバランスを見ると、順当な結果なのです。
本ページで解説する戦略は、
こういった『オッズの歪み』を見つけ、歪みが発生しているレースに投資をする、というシンプルながら強力な戦略です。
解析に向けてデータ準備
ここから解析に移っていきます。
まずは、上記2つのデータを取得し、Pythonで読み込んで形を整えます。
私は以下のステップで行いました。
番組表のデータを読み込み、Dataframe形式に整えます。
選手データを読み込み、2つ目のDataframeとして準備します。
番組表データには各選手の名前や登録番号があります。
それらのデータをキーとして、選手成績データと結合を行います。
これにより、番組表データの中に各選手のあるコースにおける勝率など、より詳細な選手情報を含んだ番組表データが出来上がります。
STEP1 で読み込んだデータは1行で1コースから6コースまでの全てのデータを網羅しています。
よって、各コースごとの相対的なパワーを算出したいため、以下のようなデータにします。
予測対象が1コース目の選手、2コース目の選手、・・・といった具合にスライドしていくイメージです。
予測対象の選手が何位を取ったかを結果として付与します。
結果の付与の仕方としては、1位に100power、2位に50power、3位に10powerというつけ方で選手にパワーを振っていきます。
これにより、予測対象の選手の情報と、一緒に走る選手の情報5人分 それに対して結果が付与されたデータが生成されています。
ある選手がほかの5人と走るとき、その人のパワーはいくつになるかを推定するためのデータです。
以上で、データの準備は完了です。
ここからは学習及びビジュアライズを行っていきます。
データの学習
今まで準備してきたデータの学習を行います。色々な手法を試してみましょう。
予測対象の選手が〇コースで走るときに、他選手の情報を踏まえた上でパワーバランスを学習することができます。
色々な手法を試しましたが、やはりGradient Boosting系の手法が強いと感じました。
更に、シリコンバレーで習得した最新の様々な手法を活用し、データ前処理及びモデル作成を行うことで精度を向上させました。
ビジュアライズ
さて、最後に学習したモデルを使って結果を推定、ビジュアライズを行ってみましょう。
新たな日付のデータに対して、推定をしていきます。その結果、各選手のパワーバランスが推定できるかと思いますので、その結果を表にしていきましょう。
例としてはこのような表があるかと思います。
予測結果の有料販売
予測結果(ビジュアライズ結果)についてを、noteにて有料で毎日販売をしています。
1日500円で予測結果を販売しておりますので、興味のある方はぜひ購入をご検討いただけますと幸いです。
また、ソースコードについても有料販売を予定しております。
値段の設定に苦慮しているところですので、少々お待ちください。
上記のプログラムを実装してみたいけど知識がない、どうすれば良いか分からないという方向けに、個別でのレッスンも予定しております。
AI/機械学習の習得について
AI/機械学習を習得するための非常に優れたツールである『Udacity』についてこちらの記事で解説しています。
AI解析を身に着けたい方はぜひご覧ください。