#2】競艇順位予想AIを作ってみたコーポレートAIはじめに初めまして、AI事業開発部の湯原と申します。私たちAI事業開発部では、社内に向けたAIの啓蒙活動と、社外への情報発信を主な目的として、「AIを使ってとにかく面白そうな事をやってみる」という活動を本気で実施しています。今回はランク学習というアルゴリズムを利用して「競艇順位予想AI」の開発にチャレンジしました。#1】AIに本気の作詞をさせてみたなんで競艇?さて、読者の皆さんは「競艇順位予想AI」と聞いて一つ疑問が浮かび上がると思います。「なんで競艇を選んだのか?」と。競艇を選んだ一番の理由として「年間のレース回数が多いこと」が挙げられます。調べてびっくりしたのですが競艇は雨が降ろうが雪が降ろうがレースが行われており、また全国各地のボートレース場でほぼ毎日どこかでレースが開催されています。こちらで2018年のレース数を集計したところ、54511回のレースが開催されているようです。一般的にデータが多ければ多いほど機械学習に向いています。毎日のレース結果がある=データが大量に存在するということは競艇はAIでの予測に向いていると考えました。2番目の理由は「モーターボートは機械であるため不確実性が低いこと」です。レーサーの成績や勝率はその日のコンディションなどの様々な要素が絡み合い、左右されるのではとなんとなく想像できると思います。(もちろんレーサーはプロであるため一定の成績を残せるよう訓練して不確実性を減らしているということは認識しています)それとは対象的にモーターとボートの性能が日によって変わるのではなく、ある程度一定の性能を発揮できると仮定できると考え、予測しやすくなるのではと考えました。余談になりますが2012年4月より以前の競艇では持ちペラ制度という選手個人でカスタマイズしたプロペラを持ち込んでよかった時期がありました。その持ち込んだプロペラの性能が競技結果に大きな影響を与えていたそうです。2012年4月以降持ちペラ制度は禁止になり、各競艇場がプロペラを用意するルールに変更されました。いう話も上記の理由の一因になっています。持ちペラ制ランク学習とは冒頭でお伝えした通り、今回は「ランク学習」というアルゴリズムを利用しています。ランク学習というワードは聞き慣れないかと思いますが、皆さんが日常的に使われているGoogle検索のような検索システムが具体例に挙がります。「トライフォート」と検索したときに検索キーワードと関連度が高い順に並べられたWebページのURLが結果として表示されます。このように、あるクエリに対する結果の順序(ランク)を予測をすることがランク学習の目的となります。クエリというものは自由度が高く、検索システムではキーワードでしたが競艇では1レースをクエリとして考えます。検索システムでは大量の記事の順位を結果として返すものでしたが競艇の場合はレーサーが6人で固定されているため、1位から6位までの順位を結果として返します。なんでランク学習を使うのかではなぜ、今回のチャレンジで、ランク学習を選んだのか。それは、「順位」を学習してほしいと考えたからです。分類問題として1位や2位の確率をそれぞれ求めたり、回帰問題として1位から6位までの値を0から1までの値に正規化した値をある閾値毎に例えば0から0.5までを1位・・・とおいて解くこともできます。それらは結果を見た僕らが順位毎の確率を見て並び替える必要があったり閾値を設定したりと、最終的に予測したい順位を求めるまでに一工夫する必要があります。ご説明した通り、ランク学習はクエリに対して順位を返します。さきほど挙げた一工夫も含めて学習してくれるわけです。これが分類問題や回帰問題ではなく、ランク学習を選んだ理由です。ダウンロード・他、こちらのリンク先にあります競走成績を使いました。1レース毎の結果がこんな感じに表データとして格納されています。こちら順位でソートされていますので上から1位、2位、3位・・・6位という順位になっています。この表にのっているデータ全てを学習に使ったわけではなくスタートタイミングとレースタイムはレースが終わらないとわからない情報なので学習には使っていません。コース場毎の特性を考慮する必要があると考え、学習に使うデータのレース場は唐津に固定しています。実際にレース結果を予測してみた予測対象のレースはこちらにしました。ブログ執筆時が8月15日でしたので当日のレースを対象にしています。1位と2位を当てることができました!すごい!AIが出した予測と実際のレース結果との比較表を掲載しておきます。実際のレース結果はこちらになります。1Rレース結果さすがにまぐれ当たりじゃないかと言われそうなので8月15日に行われた別の2レースも予測してみました。こちらが2レース目の結果になります。あれ?・・・3位と6位は当てられているのですがこれはさすがに外れですね・・・残念。こちらは実際のレースの出走表とレース結果です。最後に3レース目の結果になります。うーん・・・ぴたりと順位を当てているわけではないですが3位まで入賞する選手を予測できています。この場合舟券の買い方を工夫(3連複など)してていれば儲けが出てくれていそうですね。こちらは実際のレースの出走表とレース結果です。別のレースの結果はどうなのと気になるところですが今回は「予想AIの序章」ということでこの程度でとどめておきます。私の感想として簡単な特徴量のみを使うだけでそれなりに予測が当たってくれていて大満足な結果でした。振り返りこの競艇順位予測AIを作ったあとに気づいたこととして、1コース(一番内側のコース)の選手が1位になる確率はコースごとにばらつきはありますが約50%あり、とりあえず1コースを選んでおけば約50%の確率で当たるわけですね。(ただしそんなことは周知の事実のためオッズ(倍率)は低くなりリターンもあまり期待できません)参考情報として多摩川ボートレース場のコース別入着率のリンクを貼っておきます。コース別入着率そういう情報を加味すると1位から6位まで全てを当てるという課題設定をするのではなく、1位は1コースがなるとし2位3位を当てるような課題設定をしたほうが精度が出るのではないかという仮説が湧き上がってきました。今回学習に使ったデータとしてレーサーの登録番号やモーターやボート、コースの長さなどの簡単なもののみを使って予測したということもあり精度が出なかったと考えています。出走表も見るとレーサー毎に体重や年齢、級(レーサーランクのことです)、モーター・ボード毎の勝率も記載されており、これらを追加のデータとして使うだけでも精度が上がりそうだと思いました。以上の反省を踏まえまして次の記事ではパワーアップした競艇順位予想AIをお披露目したいと考えております。最後まで読んでいただきありがとうございました。トライフォートで働きませんか?弊社ではエンジニア、デザイナー、ディレクター、プランナーを随時募集しています。ゲームやサービスが好きで、新しいことにチャレンジしたい、世界に強いインパクトを残したい、という人を探しています!我こそは、という人は是非ご応募ください!詳しくはこちら!祝・トライフォート7周年!記念祭開催しました。(4)トライフォートのサービスアイラインツナゲル×ハジケル。新感覚・爽快パズルゲーム。Playlist+1タップでプレイリストを作成。