B.LEAGUE2021-22 予測コンペに参加しました
名城大学の小中先生が主催するB.LEAGUE2021-22 予測コンペに参加したので、そちらで使用した手法をまとめようと思います。
一言でいうと以下のツイートのように、ホームアドバンテージを考慮したElo Ratingモデルです。
コンペについて
本コンペはB.LEAGUEのB1リーグの勝敗を予測するもので、2021年12月11日から12月15日の33試合、2021年12月24日から2022年1月3日の55試合の計88試合が予測対象となっています。
単純にどちらが勝つかを予測するのではなく、ホームチームの予測勝率を提出し、Log lossという指標で評価されます。
上の図は予測値とLog lossの関係を表しており、予想通り(=予測値が大きい)な結果ほどLog lossが小さく、予想と違う(=予測値が小さい)結果ほどLog lossが大きくなります。
例えば、予測値0.9(=ホームチームが90%勝つ)として、ホームチームが勝った場合のLog lossは約0.152ですが、負けてしまった場合は0.1の事象が起きたとしてLog lossが約3.322となります。予測値0.5(=ホームチームが50%勝つ)とした場合は勝っても負けても1です。これを試合ごとに算出し、その平均値が最終的なスコアとなります。
そのため、自信のある試合は0か1に近い値を、微妙な試合は0.5に近い値を提出する必要があります。
(注: Log lossの計算には対数の底がネイピア数 eの自然対数が用いられることが多いですが、本コンペでは対数の底が2の二進対数が用いられています)
また、使用データについての制限はなかったのですが、私自身は今シーズンのB1試合結果のみを用いました。
(昨シーズン以前の試合結果等も使いたかったですが、時間の都合で最低限のデータを使う方針にしました)
Elo Rating
次に、私の予測モデルのベースであるElo Ratingについて説明します。
Elo Ratingとは各チームの強さを定量化したもので、基本的な考え方は以下のようなものとなっています。
レーティングが大きいほど強い
レーティングは試合ごとに更新され、勝てば増加し、負ければ減少する
順当な結果(=レーティングが大きいチームが勝った)場合のレーティングの変化は小さいが、番狂わせ(レーティングが小さいチームが勝った)場合は大きく変化する
このような性質があるため、レーティングが過大評価されているチームは減少しやすく、過小評価されてるチームは増加しやすいため、試合を繰り返すうちに本来の実力に近いレーティングに収束することが期待されます。
(数式を用いた説明はwikipediaのものがわかりやすいので、そちらをご参照ください)
ホームアドバンテージ
ホームアドバンテージとは、様々な理由からなるホームチームの優位性のことです。この優位性は競技によって異なるですが、本コンペの前半提出前まで(=1~9節)における今シーズンのB1の結果を集計したところ、
ホームチームの勝率が約62%
平均得点も約8点ホームチームが多い
といった結果になったので、ホームアドバンテージを考慮することにしました。
Elo Ratingモデルへの考慮の仕方は単純で、ホームチームのレーティングにホームアドバンテージ分の数値を加えるだけです。
グリッドサーチ
上記のような考えでホームアドバンテージを考慮したElo Ratingモデルを作成することにしたのですが、
試合ごとのレーティング変化量の最大値
ホームアドバンテージ
をパラメータとして決定する必要がありました。
試合ごとのレーティング変化量の最大値については、小さすぎると本来の実力に収束するまでに多くの試合を要し、大きすぎるとレーティングが安定しなくなります。
また、ホームアドバンテージについても適切な値を指定してあげないと影響を過大/過少評価することになってしまいます。
そこで、適切なパラメータを決めるべく、グリッドサーチという手法を用いました。グリッドサーチとは、指定したパラメータの組み合わせを全て試し、最も良い組み合わせを探索する方法です。
今回は、
1~6節までの結果から7節の結果を予測する
1~7節までの結果から8節の結果を予測する
1~8節までの結果から9節の結果を予測する
といったやり方で、指定したパラメータの組み合わせにおける7~9節の結果を評価し、最終的なパラメータを決定しました。
おわりに
このように、今シーズンのデータのみを用いた比較的シンプルな手法で13チーム中3位という成績を残すことができました。
とはいえ、本コンペは運要素が大きいので、4位以下の方のモデルが長期的には優れている可能性は十分にあると思います。
補足1: モデル詳細
Elo Ratingにおける勝率$${p}$$の計算式は、レーティング差を$${x}$$として、$${p = \frac{1}{1+10^{(-x/20)}}}$$としています。グラフにすると以下のようになります。(式の20の箇所は正の数ならいくつでも大丈夫です。変更したら下図の横軸の値が変わるだけです)
また、最終的なパラメータは、試合ごとのレーティング変化量の最大値を3、ホームアドバンテージを5としました。
ホームアドバンテージの5という値は、仮に同じレーティングで戦った場合、ホームチームの勝率が約64%になるのでそこそこ大きい値だと思います。
試合ごとのレーティング変化量の最大値が3というのも実は大きめです。今回は今シーズンのデータのみを用いてるので、早めに収束する必要があったためだと思います。
補足2: モデルの改善点
今回は時間が限られていたので、実ははじめからElo Ratingモデルにすることを決めて挑みました。
時間があれば以下の優先度でモデルを改善していたと思います。
1: データ期間の拡大
ある程度は昨シーズンの強さを引き継ぐと思われるので、単純に昨シーズン以前のデータを追加してElo Ratingを求めたら精度が上がると思われます。
2: ロジスティック回帰モデルによる予測
平均得点数など、Elo Ratingでは考慮できない特徴をモデルに組み込むことができます。しかし、対戦相手の強さを考慮するのは難しいので、Elo Ratingとどちらがうまくいくかはやってみないとわかりません。Elo Ratingを特徴量の一つとして使ったりして組み合わせるのがいい気がします。
3: 決定木・ランダムフォレスト・LightGBMによる予測
ロジスティック回帰のように、Elo Ratingでは考慮できない特徴をモデルに組み込むことができます。ロジスティック回帰とは違って非線形な関係も学習できるので、うまくやれば高い精度を出せるかもしれません。
この記事が気に入ったらサポートをしてみませんか?