NCAA全米大学バスケの勝敗予測 ~ kaggleのデータコンペ
kaggleで面白そうなデータコンペやってる
予測モデルやデータ分析のコンペティションのkaggle。 今回はスポーツに関連したコンペで、大学バスケの勝敗(勝率)予測です。
NCAAってなんだろ?
バスケは全然詳しくないので、、NBAは知ってるけど、NCAAって聞いたこともなかった。 この辺の前提知識がないと、予測もできないと思うので、ちょっと調べてみた。
まず、NCAAとは、アメリカ大学体育協会(National Collegiate Athletic Association)のことで、バスケとか野球とか、アメフト、ホッケーなどなど、いろんな大学スポーツを運営しているらしいです。
つまり、NCAAバスケは全米大学バスケチームのNO.1を決める大会というわけですね。
出場校は、各地区レギュラーシーズンを勝ち上がった代表68チーム。トーナメントは3月途中から試合が始まり、アメリカ全土が熱狂するころから「マーチマッドネス」と呼ばれてるそうです。詳しくは、このあたりを→ WOGのNCAA講座!
kaggleからダウンロードするデータ
- 各チームのデータ(idと名前だけ)
- レギュラーシーズンの試合結果(得失点)
- トーナメントの試合結果(得失点)
- トーナメントの組み合わせ
以上のデータが18年分もらえます。
実際に予測するものは、各試合の勝敗。\( y_i \)は勝敗の結果、0 or 1。\(n\)はゲーム数。\( \hat{y}_i \)は勝率。基本的に全ての項にペナルティがついて、勝率を高く予想して勝ったときには小さいペナルティ、負けてしまったら大きなペナルティになります。 同じくらいの実力のときは、どちらが優勢か分からないので、勝率を0.5に設定して、傷を浅くするようなイメージ。 ペナルティの総和が小さいほど、正確な予測ということです。
\( \textrm{LogLoss} = - \frac{1}{n} \sum_{i=1}^n \left[ y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right] \)
チェスのレーティング
とりあえず、kaggleのベンチマークにチェスのレーティングモデルを使ったものがあったので、それを試してみます。
計算方法は、wikipediaをみていただいて。。 イロレーティング - Wikipedia
どこかでみたことある数式だと思ったら、映画「ソーシャルネットワーク」で、ザッカーバーグ達が「facemash」のアルゴリズムとして、窓に書いていましたね。
強いチームから勝つとレーティングが大きくあがり、弱いチームに負けるとレーティングが大きく下がります。
とりあえず、csvのデータをMySQLにぶち込んで、18年分の試合結果を基に、各校のレーティングを計算してみました。 上位校は、
順位 | 大学名 | レーティング |
---|---|---|
1st | Kentucky | 1772 |
2nd | North Carolina | 1769 |
3rd | Louisville | 1767 |
4th | Kansas | 1759 |
参考までに、2013年の優勝はLouisville、準優勝はMichigan。2012年は優勝がKentucky、準優勝がKansas。 ちなみに最下位の大学(578)が、Louisvilleと試合をすると勝率0.1%となってしまいます。 チェスのレーティングには「レート差が200以上あるときは、勝率を75%に固定する」というルールがありますが、レート差が開いてるときの勝率をうまいこと決めることができれば、いいスコアが出せそうです。
3月はスポーツバー行って、予測結果を見ながらワイワイ観戦します。