NCAAコンペ反省文(2019)

はじめに

下記のNCAAコンペに参加した反省文です。

このコンペのタスクは全米大学体育協会NCAA)が毎年春に主催するバスケのトーナメントにおいて、その各対戦の勝率を予測するというものです。未来のトーナメント結果を予測するタスクなので、運の要素が比較的大きいことが特徴です。またこのコンペは毎年開かれており、今年で6回目の開催になります。

去年はメダルなしのコンペだったのですが、今年はメダルもつくようになりました。 (ソリューション見てるとこのコンペはメダルなしで良い気がしていますが)

実質的に使った時間は2日くらいですが、反省すべき点が多かったので内容をまとめておきます。

実施手法について

不確実性の影響が大きいため、モデルの精度を上げるよりもどのようなケースでもある程度耐えうるようなロバストなモデルを作成しようと思い、ベイズモデリングで予測値を算出してみることにしました。

手法としては以前テニスの選手の強さと勝負ムラを算出した方法と同様です。

各チームのパフォーマンスは正規分布に従うと仮定し、チームごとの強さの平均と分散をベイズモデリングによって算出します。

勝敗のデータの他、明らかにホームとアウェイの影響があったのでその影響も加味して以下のようなモデル式を立てました。

使用したデータは2019年のシーズンデータのみです。

performance [ g , 1 ] \sim \operatorname { Normal } \left( \mu [Loser] , \sigma _ { p f } [Loser] \right) , \quad g = 1 \ldots G

 { per formance } [ g , 2 ] \sim \operatorname { Normal } \left( \mu [ W i n n e r ] + H \times homeflag[Winner]-H \times awayflag[Winner], \sigma _ { p f } [ {Winner } ] \right) , \quad g = 1 \ldots G

performance [ g , 1 ] \lt performance [ g , 2 ] , \quad g = 1 \ldots G

\mu [ n ] \sim \operatorname { Normal } \left( 0 , \sigma _ { \mu } \right) , \quad n = 1 \ldots N

\sigma _ { p f } [ n ] \sim \operatorname { Gamma } ( 10,10 ) , \quad n = 1 \ldots N

Nはチーム総数、nはチームIDで、各チームの強さは平均0、標準偏差\sigma_{\mu}正規分布に従うと仮定しています。 Hは各チーム共通のホーム効果です。

stanを用いて各チームの正規分布の平均と分散のパラメータを推定し、対戦する2チームの正規分布からランダムサンプリングした値の比較を10000回実行することで、各対戦の勝率を算出しました。

女子の部だとBaylorとNotre Dameが上位2チームになったのですが、推定した分布を図示すると下記のようになります。

f:id:rmizutaa:20190417222010p:plain

Balorの方が少しだけNorte Dameより平均のチームの強さが上回っています。 この分布から算出したBaylorがNortre Dameに勝利する確率は0.5567でした。

提出した予測値にはホーム効果を入れていませんが、推定の結果ホーム効果が0.417と出ていたので、 もしNortre Dameのホームでこの2チームが対戦したとすると分布は以下のように逆転する結果となります。

f:id:rmizutaa:20190417222028p:plain

ファイルは2つ提出できるので、もう一つは昨年の女子の部1stのraddarのコードに少し修正を加えたものと上記ベイズモデルの結果の平均値を提出しました。 男子と女子で使用したモデルは全く同じです。

結果について

男子:387th/866  女子:192th/500 でした。

これはアンサンブルしたモデルの順位ですが、検証したところraddarのモデルのみの方がアンサンブルモデルより結果は良く、 ベイズモデルが足を引っ張っていました。

この結果の原因としては、ベイズモデルではかなり保守的な予測結果を提出してしまったことが挙げられます。

下記の図はベイズモデルの予測値とraddarベースのモデルの予測値のヒストグラムです。

f:id:rmizutaa:20190417222107p:plain

ベイズモデルは0や1に近いと判定されるものが少なく、かなり保守的なモデルになっていることがわかります。

トーナメント序盤で上位シード次々破れるような場合はもう少し希望があったかもしれませんが、今年はそれなりに強いチームが順当に勝ち上がるような結果だったので、保守的なモデルだとあまり順位が上がらない結果になったのではないかと思います。

また、2019年のシーズンの勝敗のデータしか使用していないので、これだけ多くのデータが使用できる環境だと機械学習の手法に比べると単純に精度が落ちていると思います。チームの強さは正規分布に従う、ホーム効果は全チーム共通、シーズン成績の強さはそのままトーナメント強さを示すなど仮定をいくつもおいて人が理解できる形での最適点求めているのでまあそれはそうという気がしています。 ランダムサンプリングで推論するのはかなり時間がかかるので過去データでvalidationするのをサボったのも良くありませんでした。

ちなみに今年のWomenの1stの人の予測分布は以下のようなヒストグラムになっていて、中々独創的だなと思ったりしました。

f:id:rmizutaa:20190417222301p:plain

上位のソリューションについて

Women's

Men's

男女の上位2/4が昨年のraddarのモデルをベースにしており、3チームがモデルの予測値を手動で上書きしていました。

メモ

  • NCAAコンペはもう6年もやっているのでモデルとしては伸び代の部分はあまりなく、勝つためのシナリオを作ることの方が重要
  • 精度のみが要求される場でベイズモデルを使うのはやはり厳しい
  • validationはしましょう

使用したコードは以下

github.com