MIXIには、探究心溢れるエンジニアがたくさん在籍しています。その探究心は業務で扱う技術に留まらず、趣味で書いているプログラムだったり、個人的に研究している言語だったりと、自身の気になった技術への追求も留まることを知りません。
今回は『netkeiba.com』で使われているAIによるオッズ予測を開発している開発本部の渡辺莉央(写真右)と宮脇祐太(写真左)に、その取り組みをたっぷり語ってもらいました!
特徴量とアルゴリズムを二人三脚で開発
━━これまでの取り組みについて教えてください
渡辺: 私はMIXIに新卒で入社して、最初はファイトリーグというゲームにおける、ゲームバランスを調整するためのAI開発に関わっていました。今回のような公営競技に関係するようなAIに携わったことはありませんでした。
本AIについては、最初は宮脇だけ取り組んでいたのですが、途中から私も参加し、二人で協力しながら改善を進めていきました。
宮脇: 私は前職から、競馬をはじめとする公営競技の予測を行うAI開発に関わっていました。その縁もあって、MIXIに入社しています。『netkeiba.com』では勝ち馬を予想するAIと、オッズ予想を行うAIの両方に関わっています。この2つのAIは求められる結果は異なりますが、インプットになるデータは似ていますし、実装も近いものになります。
━━二人の役割分担はありますか?
渡辺: 宮脇は前職から競馬に関わってきているので、血統ベクトルなどオッズ予測に効きそうな特徴量のピックアップを行っています。学習アルゴリズムや損失関数については、私が中心に決めていきました。いい具合に役割分担ができたかなと思っています。
騎手データのレーティングが有効だった
━━AI導入前のネット競馬での課題について聞かせてください
宮脇: オッズというのは馬券を買った結果が反映されるものです。そのため、正解は出走後にしか分からないものです。
旧システムでは、『netkeiba.com』の提供する俺プロ(ユーザーが自分の予想を投稿するサービス)のデータを使ってオッズを予想していました。この時の課題感としては、ある程度のデータが集まらないとオッズ予想が出せないということです。つまり人気のないレースだったり、データ件数がとても少ないとオッズのブレ幅が大きくなります。また、俺プロ自体が一部のレースにしか対応していなかったため、未対応のレースについては予測オッズ自体提供できていませんでした。
もう一つの課題として、俺プロはあくまでも投票だけであって実際に購入する訳ではないという点です。これによって、特定の馬のオッズを操作できてしまいます。実際、ソーシャルメディアなどを通じて特定の馬に対して投票が集中し、オッズが恣意的に操作されてしまいました。
これらの課題について、AIを用いて事前にオッズを予想できれば解決できるのではないかと考えたのが発端です。
━━一般的なAIモデルとオッズ予測AIで違いはありますか?
渡辺: オッズは人が決めるものなので、レース全体のオッズを完璧に予測することは困難です。人が決めるということは、オッズが人間という不確実な要素を内包し続けるからです。たとえば、YouTubeで話題になった馬を買おうと思う人がいたりして、世の中にある事象すべてを取り込まないと確実なモデルはできません。そのため、元々完璧なものはできないと考えていました。
そうした意味ではチャレンジングな課題でした。とはいえ勝ち馬の予測はできるので、現実世界のオッズに近いものはできるのではないかと考えていました。
━━実際の開発はどう進めましたか?
渡辺: 何が有効なのかが分からない中での作業でした。AIは特徴量と呼ばれるデータとラベルと呼ばれる正解のデータをもとに、予め決められた学習アルゴリズムに沿って学習と予測を行います。また、どの特徴量をどれくらい優先するかはAIが決めるのでブラックボックスとなります。そのため、データの扱いと学習アルゴリズム、どちらも重要になることからお互いに役割分担しながら開発を進めていきました。
━━オッズの掲載について
渡辺: AIによる予測オッズは出馬表が出たタイミングで出しています。俺プロは投票によって変わるので、出走が近づくにつれて(投票が増えることで)より正確になります。AIの場合は投票に依存しないので、早めに出せるのがメリットです。
宮脇: 元々、俺プロは投票がないとオッズが999.9といった数字になってしまったのに対して、AIの場合は出馬表が出た直後でも妥当と思えるオッズが出せるようになっています。
━━そもそも、ユーザーがオッズを知りたい理由はなんですか?
渡辺: オッズの数値の方が、馬ごとの強さが連続的に分かります。人気1位と2位でどれくらいの差があるのか、オッズによって視覚化されます。オッズは、ぱっと見で馬の強さが分かるのがユーザーメリットです。
また、オッズは回収率にも関わります。常に強い馬に賭け続けても、回収率は上がりません。早めにオッズが分かれば回収率も分かるので、どの馬に賭けるかの指標になってきます。これは順位だけでは分からない情報です。
もちろん、実際の購入情報に基づく数分前のオッズには敵いません。しかし、ある程度正確なオッズ予測を事前に知ることで、馬の過大・過小評価を含めて馬券購入の材料にできます。
━━精度向上に効いたデータはありますか?
宮脇: いろいろありますが、たとえば騎手のデータがあります。ユーザーは騎手を見て購入している傾向があるようです。この騎手データは、AIでは使いづらいデータです。AIは、継続的に蓄積されたデータを利用して未来を予測するのが得意です。それに対して騎手は引退や、AIの学習時にはいなかった騎手がデビューする場合があります。そのためAIとしてはまったく知らない、または知っていてもほとんど影響しないデータになってしまいます。
そこで、ゲームで対戦相手を決めるアルゴリズム(Glicko2 rating)を用いて、騎手同士のレーティングデータを作り、AIの特徴量として加えてあります。
━━さまざまなデータを見ているのですね
宮脇: 馬券を購入する方が、どういったデータを見ているか知りたいですね。とはいえ、人の判断なのでAIほどは広く見ていないと思っています。もう少し分かりやすいポイントを押さえて購入しているのではないでしょうか。
━━バージョン4までありますが、それぞれの違いはどこにありますか?
渡辺: バージョン1は、まずベースラインになるものを作って、それでテストしました。これは、私の所属部署でよく行っている方法です。
バージョン2では、予測値をオッズから支持率に変更しています。なぜかというと、オッズをそのまま出力値としてしまうと、上位人気になればなるほど、出力する値がどんどん低くなっていくので、値の大小差が大きい上に場合によっては負の値になってしまうという問題があったためです。また、予測した出力値は、比率の値になってないので、再度比率として計算し直して、最終的な出力値としています。これによって、バージョン1より大幅に改善しています。
またバージョン1からバージョン2の改善割合が大きく見えてしまいますが、バージョン3や4でも特徴量の追加や学習アルゴリズムの変更をおこなって改善を重ねています。その中には、先ほどの騎手データもあります。元々は騎手を単なるIDとして取り込んでいましたが、レーティングによって騎手同士の力関係が分かるようにしたことで精度が向上しています。
QuerySoftmaxによって精度が向上
━━学習アルゴリズムについて教えてください
渡辺: 学習アルゴリズム自体は、どのバージョンにおいても構造化データに対する予測でよく使われるGBDTを用いています。ただバージョンで違っているのが損失関数です。馬の血統ベクトルを特徴量として取り込み、支持率を予測値としたバージョン2の時点では、通常の回帰予測でよく使われるRegressionを使っていました。しかし、特定の条件では精度が低いなどの問題があったため、学習アルゴリズム内における損失関数の見直しを行い、検証していく中で採用したのがQuerySoftmaxです。
また、オッズの算出フローでは、オッズを予想するAIとは別に順位を予測するAIも内部で利用しています。この順位予測AIでは損失関数としてPairLogitを採用しています。そして、この結果も含めて最終的なオッズ予測をしています。
━━順位予測とオッズ予測で2つに分かれているのはなぜですか?
CatboostとQuerySoftmaxを用いたオッズ予測モデルではそのまま利用すると下記人気を優先する設計になっています。しかし、オッズは人気の高い馬ほど正確なオッズが求められます。そこで順位予測モデルの結果を用いて順位による重み付けを行うことで、人気の高い馬ほど損失を下げるロジックになっています。
宮脇: バージョン1ではシンプルにオッズの数字を予測していました。しかし、オッズというのは1.1倍のような小さいものから、1000倍を超えるような巨大な数字まであります。これはAIでは扱いづらい、誤差の大きくなりやすいのが問題です。順位予測に基づくスケールはどのレースでも0〜1で決まりますし、すべてのレースで合計は1になります。こうして扱いやすいデータに変換しています。
本来のオッズも、購入数をもとに比率を計算しています。その意味でも、比率を採用したことでオッズ予測が改善できたのは良かったです。
━━順位の計算精度はどうですか?
渡辺: オッズ精度より若干精度が高いです。なぜかと言うと、予測オッズを低い順に並べればそれは順位予測になり、予想オッズAIはさらにそこにオッズ値の誤差が求められますが、順位予測は順番さえ合っていれば良いためです。実際に予測オッズAIをそのまま順位に変換した結果と、順位予測に特化した結果を比較したところ、若干順位予測の方が精度を上回っており、これはより問題設定が簡単な順位予測の方が、誤差を小さくできているためだと考えています。
YouTuber、海外のベッティングサービスでも利用されている
━━AIを作っていく中で、面白い知見は得られましたか?
渡辺: これは統計的なデータのある話なのですが、オッズは擬似的な勝率に近いらしいです。たとえばオッズが2倍だとすると、支持率は40%、つまり勝率も40%に近いといわれています。人が2倍のオッズを見たら、かなり固い馬なんだろうと考えると思いますが、実際には6割負けてしまうんです。1.5であっても勝率6割です。
━━オッズ2倍と勝率40%では、ずいぶん見え方が違いますね!
そうですね。オッズを支持率に直すと、みんながどういう判断をするのかは気になりますね。
━━他、AIならではの知見はありますか?
渡辺: AIに関する知見という意味からは少しずれてしまうかもですが、AIの実装後に今までうまくオッズが出せていなかった新馬戦や1勝クラスでも高精度でオッズが出せるようになったことにより、馬主さんに喜ばれているという話もあります。新馬戦は馬のデータがまったくないので、血統情報や騎手の情報を特徴量として追加することでオッズ予測を実現しています。
━━この予測データは他の場所でも利用されているらしいですね
渡辺: そうですね。たとえばYouTuberの方や、海外ベッティングサービスで使われていると聞きました。
━━YouTuberの方が利用しているんですね!
競馬の予想を行うYouTuberの方が、このデータを利用してくれています。競馬の予想を公開する場合、直前オッズは購入に間に合わないので利用できません。そこで、このオッズ予測を利用して着順予想を行っているようです。
ただ、その方の予想によって票数が変わり、オッズが変化してしまいます。その辺りも含めて面白いですね。
━━海外のベッティングサービスではどう使われていますか?
海外のベッティングサービスでは、日本のように胴元が20%確保するといったことはありません。さまざまなデータを元に、運営側が独自のオッズを発表します。『netkeiba.com』では日本のレースを扱いますので、データソースの一つとしてオッズ予測データが利用されています。
ユーザーが求めているものに絞って改善を続ける
━━今後の改善について聞かせてください
渡辺: 大きなレースでのオッズ改善があります。いわゆるGIのような大きなレースは、ユーザーの目にとまりやすいです。こうした有名なレースでは俺プロの投票も多く、オッズ精度が高くなります。AI予測では、このような大きなレースに対する上位人気馬のオッズに対する予測にまだ若干課題があると考えており、今後も改善したいポイントです。
また、完全にすべてAIだけで解決するのが最適解ではありません。俺プロのオッズは投票数が集まると強力なデータになりますので、これもすでに活用をはじめています。そのため、完全にAIではなくハイブリッドとして動作しています。今後もこのAIとユーザー投票のいいとこ取りをしながら精度を高めていきたいと考えています。
宮脇: 特徴量についてはまだまだ入れられるものはあります。しかし、どれくらい精度が高くなるか、ユーザーメリットがあるかは未知数です。そのため、ユーザーが注目している、違和感を感じる部分に注力していこうと考えています。それが先ほどのGIレースのような大きなレースでの高人気馬のオッズ改善になります。
本当はいろいろとやれることはあるのですが、自己満足にしかならない面も多々あります。その中から絞って、ユーザーが求めているものに取り組んでいこうと考えています。