AIを使った予測オッズのベースモデル

渡辺莉央氏:ここまでが予想オッズの内容になりました。次に、AIを使った予測オッズについて紹介します。AIを使った予測オッズですが、ベースモデルとして代表的な、最初に作ったモデルを紹介します。

まずAIに学習させる値ですね。こちらはオッズではなくて支持率を使っています。この内容については次で触れます。

概要ですが、もともとデータの前処理、モデル、後処理みたいなところの内容がありますが、前処理については少し割愛させてください。

モデルについてですが、LightGBMを使った回帰予測をしています。LightGBMは勾配ブースティングモデルなので、基本的な構造化データに対しての予測になります。出した支持率の数値をレースごとに集め直して比率に直した後、オッズに変換しています。

ラベルに支持率を採用している理由を紹介します。オッズはもともと値が小さいほど、より上位の人気馬となります。ですが、このままオッズを回帰予測してしまうと、オッズが1倍に近づくとともに、予測値が負値に近づいてしまいます。

そうなってしまうと、実際に負値が出力され、後処理ではなんとかしづらいところもあるし、そもそも正しくないオッズの値がたくさん生まれてしまうという問題がありました。

そのために支持率を採用していて、支持率を使うことによって、より上位人気の馬に対して値が大きい状態が生まれます。そうすると、オッズがより1倍に近づくとともに予測値が負値から遠ざかり、マイナスになることはなくなっていきます。後処理での比率計算などもしやすくなり、最初はこちらの状態を採用していました。

(スライドを示して)先ほど概要で話した内容を図に起こしたものが、こういったかたちとなります。データの前処理を行って特徴量を作り、その特徴量を機械学習モデルで回帰予測します。予測した一つひとつの支持率をレースごとに集めて、比率で再計算します。それをオッズ変換して、最終の予測オッズを出しています。

学習と予測フローも、数値の例も含めて紹介します。

前処理のデータを使って、LightGBMを使った回帰予測を行います。予測した支持率と正解の支持率を使って、学習ではLossを使った最適化計算を行っています。

(スライドを示して)取得した値は、比率計算の括弧の中に入っている値がそれぞれレースごとに集められて、括弧に入っている値は足したら1にならないような状態なので、最終的に足したら1になるように比率で再計算しています。その後、オッズの変換を行っています。

以上がベースモデルの話になります。

ベースモデルの問題点

ベースモデルの問題点として、まず単体予測であり、レースでの力関係が考慮されていないという問題がありました。

みなさんが投票を使って「どの馬が勝つか」を予測する時、基本的には、どの馬がどのレースに走っているのかを意識した上で、どの馬が勝つかを予測するかと思います。

もともとの実オッズも集合知の塊になるので、レースでの力関係を考慮したいという課題点がありました。

あともう1つの点ですが、後処理で出力調整を行っているために、予測値とラベル値が一致しないという問題もありました。

先ほど、予測値と実際の出力のズレの話をしましたが、比率計算を見てもらうとわかるとおり、0.40を後処理で0.33に変えています。

こちらのほうが精度が高いということを実際に検証した上で、こちらの対応をしています。

ですが、このまま入れてしまうとLossにこの計算が入らないため、例えば極端な話でいうと、Lossが0の状態でも比率計算をしたことによって、実際のLossは0で正解とまったく同じ値になっているのに、比率計算によって値がゆがめられて、実際はズレているみたいな問題が起きてしまうので、こういった数値の計算も中に入れたいという問題がありました。

最後の部分になりますが、下位順位になるほど予測値が負値になるという問題もありました。学習する支持率のラベルが、どんどん小さくなるにつれて予測オッズも高くなるので、支持率の値がどんどん低くなって、負値が入るという問題があります。

先ほど上位人気のオッズに対して値が大きくなるようなかたちの操作を入れましたが、そうすると逆転現象で下位人気の馬に対して負値が出てしまうような問題が起きて、これもできれば出力を制限することによって解決したい問題でした。

これらの問題を解決するために、以下のような対応を行っています。内容は、このままなので、時間の関係上、「こういったことをしました」というところだけ触れています。

改善策としてのQuerySoftmaxの活用

この対応をするために何をしたかというと、QuerySoftmaxという、CatBoostの中にある損失関数を使った支持率予測を行っています。

このQuerySoftmaxがどういったところで使われるかというと、CatBoostで提供されているランク学習アルゴリズムの1つで、グループ内のTop1を予測する際に使用されます。

(スライドを示して)この文章の左側でいうと、例えば文章のTop1を予測する場合に、ラベルとして「1」「0」「0」が振られているとします白い文章を1番として予測したいので、機械学習モデルに食わせて「0.6」「0.3」「0.1」というスコアを得ました。一番高いスコアを採用して、白いものが1番、Top1ですという予測をするようなかたちです。

この損失計算は別に「1」「0」「0」ではなくて、支持率のように「足して1」になるような数値に対しても使えます。

例にある「0.5」「0.27」「0.23」という数値が一致した時にLossが一番低くなるというかたちで、同じような回帰の予測でも使えるので、レースの支持率を予測する場合に、QuerySoftmaxを使った予測を今回は採用しました。

ここも話すと長くなってしまうので簡単に説明すると、今回のQuerySoftmaxを使って、支持率が低い馬というものの誤差改善を優先してしまいます。

(スライドを示して)このグラフを見てもらうとわかるのですが、実際に支持率が0.5、0.6とだんだん数値が大きくなるにつれ、Lossの減少率が下がっているのがわかります。なので、このグラフで見てしまうと、支持率が高い馬を優先するようにしたいのに、支持率が低い馬の誤差改善を優先してしまっています。

そのための改善として、Rank Weight対応を行っています。その対応は、順位予測モデルを追加することで行っています。

改善後の現行モデル

(スライドを示して)今話した内容をモデルに起こした概要がこちらになります。AIに学習させる値は同じく支持率になります。

概要についても、大きくは変わらないのですが、モデルの部分と後処理の部分が変わっています。もう少し詳しく言うと、前処理のデータの部分も変わっているのですが、今回は割愛します。

モデルの部分でいうと、CatBoostを用いた順位予測を行った後に、QuerySoftmaxを使った支持率予測を行うことで、2つのモデルを使って支持率を出して、その後、後処理でオッズを出力しています。オッズの出力は、先ほど言った払戻率の計算と支持率を使った計算のみで、比率変換は不要になりました。

(スライドを示して)今話した内容の構成図がこちらになります。前処理したデータを使って、まず順位予測モデルを作り、それで予測を行います。その予測で作られたWeightを使ってオッズ予測を行い、その予測した支持率を使ってオッズに変換して、最終的な予測オッズを出力しています。

今話した内容が、現行モデルを使った「学習/予測フロー」というところで表現されています。これも話すと同じ繰り返しになってしまうので、後で資料などを見てもらえればと思うのですが、同じようなかたちで順位のWeightを使って、オッズの変換を行っています。

モデルの評価結果

最後に、モデルの評価についても触れていきたいと思います。RMSE(Root Mean Squared Error)という数値は、オッズのズレに対する数値の誤差を評価しています。一番左側のものが「俺プロオッズ」で、もともと従来の予想オッズとなっているものです。

今回我々が作った現行モデルが一番右側のもので、数値も一番改善されている。一番低い状態が一番誤差がない状態なので、精度として一番いいものができている状態になります。

次に重賞レースについてですね。重賞レースについても、グレードの高いレースに対しては「俺プロオッズ」は投票が多いので精度が高いのですが、それに対しても優れた精度を出すことができました。

もう1つは新馬戦ですね。新馬戦になると過去のデータが使えない状態になります。実際にどれぐらいのデータが使えるかというと、特徴量も半分以下に使えるデータが落ちてきてしまうのですが、モデルの改善とまた別で特徴量の改善とかも行っていて、それによって新馬戦においてもある程度の精度を出すことができました。

これまでがオッズの誤差の話でしたが、(それ以外に)順位の部分も精度比較を行っています。(スライドを示して)こちらは実際の予想オッズですね。従来の一般的な集合知を使ったオッズ算出のものと、現行のAIモデルを使って順位の正解率を比較しています。

一番左側が全レースに対する正解率の比較で、オレンジ色がAIを使ったもので、青いものが従来のものとなります。真ん中が新馬戦で、一番右のものが重賞レースになります。どれにおいても、基本的にはAIの精度が高いので、採用に至ったかたちになります。

数値精度および順位精度において、従来モデルよりも高精度に

最後にまとめですね。実際に予測オッズの改善ということで、いろいろな取り組みを行ってきた中で、集合知による予想オッズからAIによる予測オッズにすることで、投票数や人為的な操作を受けないようなかたちにすることができました。

予測オッズの手法ですが、支持率を予測して、後処理でオッズに変換することで、オッズを予測しています。その後、改善した現行モデルでは、ランク学習を用いることで出走馬の力関係を考慮した支持率予測に対応しました。

その後、QuerySoftmaxの話もしましたが、損失関数を用いることで比率計算をモデルの中に含めることができ、外での後処理が要らなくなったため、精度の改善をすることができました。

最後に比較検証を行い、数値精度および順位精度において従来モデルより高精度だということが確認できました。

本日は以上となります。ありがとうございました。