学びの日記 -Indirect Learning Diary-

理工系修士卒→情報系民間企業研究職→母校研究員(現在)→他校博士課程進学予定(2018年4月~)

「NCAAバスケットトーナメント試合結果予測コンテスト」2014年優勝者のモデルをまとめてみる

1.コンテスト概要

さて今回は、最近知人に教わって始めた、「kaggle」というデータ解析系のプログラミングコンテストに関するお話です。「kaggle」についてざっくり説明すると、主催者が問題とデータを与えて、参加者が与えられたデータをもとにその問題を解決するアルゴリズムやモデルを開発する、というコンテストです。一番良いモデルを作った人は賞金を受け取るかわりに、主催者にモデルを提供する、といった感じです。

今回はその中でも、「March Machine Learning Mania 2015 - Predict the 2015 NCAA Basketball Tournament -」に参加してみようと思います。こちらもざっくり説明すると、「NCAA男子バスケットボールトーナメント」という、毎年3月に開催される全米大学対抗バスケットボール大会のトーナメント試合結果を予測する、というもので、今年の3月に実際に行われる試合結果を最も良く予測した参加者が優勝となります。つまり、コンテストの結果がわかるのは、今年のトーナメントの試合が全て終わってからとなります。

ということで今回はこのコンテストに参加してみようかと思います。が、その前に、これ毎年やってるんだったら去年もやってるんじゃないか?と思ったので調べてみたら、案の定やってて、しかも 、昨年の優勝者のモデルに関する論文「Building an NCAA mens basketball predictive model and quantifying its success」まであったので、実際に参加する前に、この論文のモデルについてまとめてみようと思いました。ちなみに、「優勝者インタビュー」なんてのもありました。余談ですが、優勝チームのMichael J. LopezさんとGregory Matthews さんは大学の教員みたいです。

2.問題設定

モデルの内容に実際に入る前に、まずは問題設定を明確にしたいと思います。トーナメントの参加チーム数は68チームで、8チームは1回戦があり、残りの60チームは2回戦から(128チームのトーナメントで60チームがシード)となります。全部で67試合(頭の体操とかでよくある問題で、優勝チーム以外が試合で負けるので、全試合数 = 敗者数 = 68-1) あるので、この試合の結果を最も良く予測できたチームが優勝となります。では、モデルの良さはどうやって評価するのでしょうか?Team1対Team2の試合の予測の良さは以下の「Log Loss」と呼ばれる損失関数によって評価します。

(Log loss) = -(yt log(yp) + (1 - yt) log(1 - yp))

yt:Team1がTeam2に勝つ真の確率、yp:Team1がTeam2に勝つ予測確率であり、yt は真の確率なので、Team1が勝つか負けるかで{1,0}の2値のどちらかをとります。式をみてもパッと入ってきませんが、 yt = 1 (Team1が勝つ)の場合を考えてみると、

(Log loss) = - log(yp)

となります。yp = 1、つまり正しく予測をしたときは(Log loss) = 0 となり、yp = 0、つまり間違った予測をしたときは、(Log loss) = ∞となります。y = - log(x) ( 0 ≦ x ≦ 1)を見てみるとわかりますが、Team1が勝つ自信があるのであれば、yp を限りなく1に近づけるべきですが、もし外れると物凄いペナルティを受ける、といった関数になっています。yt = 0 のときも確率が反対になるだけで、基本的に考え方は同じになります。

この(Log Loss) の値を全67試合に対して合計して、一番損失が少なかったコンテスト参加チームが優勝となります。ただし、トーナメントが始まる前にはどの67試合が実際に行われるのかわからないので、コンテスト参加チームは、全試合パターン 68*67/2 = 2278 の試合結果の予測確率を提出することになります。実際に使われるのは67/2278 という悲しい現実ですが、全パターンに対してうまくモデルを立てる必要があります。。。

3.2014年優勝者のモデル

 では、実際に2014年優勝者のモデルについて説明したいと思います。「kaggle」から過去のトーナメントの勝敗結果や詳細なスコアデータが与えられていますが、コンテストのルールとしては、外部から自由にデータを持ってきても良いとのことです。とうことで、データの選択がまず第一の肝となります。今回、優勝者は2つのデータを利用しています。

1つ目のデータは、「Las Vegas point spread」というものです。「Las Vegas point spread」はスポーツギャンブルで使われる値で、ある試合における(Las Vegas point spread)= -5.5である場合、(1)ホームチームが5.5点以上差をつけて勝つ、あるいは、(2)ホームチームが5.5以下で勝つ or 負ける、のどちらかに賭ける、というものです。この値が適切であれば、(1)と(2)の確率が5分5分となるので、この値は、チームの勝利確率に関する情報を統合したものであると考えることができます。

2つ目のデータは、「 Efficiency metrics」というもので、過去の試合結果の得失点とボール保有率をもとに算出された値で、データに基づいたそのチームの強さを表しています。このデータはKen Pomeroy さんが作成したウェブサイトから入手できます(有料っぽいけど。。。)

これら2つのデータをもちいて、2つのモデルを作成しています。それぞれのモデルは、ロジスティック回帰という「Log Loss」と関連性のある(ロジスティック回帰の尤度関数を最大化する確率=Log Lossを最小化する確率)シンプルなモデルを用いて作成します。そして、それら2つのモデルを重みづけして組み合わせたモデルを最終的なモデルとして提出しています。モデルを作成する際に訓練データとして、過去のトーナメント結果のみでなく、トーナメント参加者を決めるレギュラーシーズンの結果も用いることで、訓練データ数を増やしていることも特徴の一つです。

4.シミュレーション結果

 このモデルによって、彼らは見事に優勝を勝ち取ることができましたが、実際の試合結果がたまたまよかっただけかもしれない、ということで、論文では実際にシミュレーションも行っています。自分たちの作成したモデルによる予測確率分布Pが正しかったとして、その予測確率分布Pから10000通りの試合結果を生成したときに、それぞれの試行でその予測確率分布Pがコンテストで何位になるかを検証する、というシミュレーションです。結果としては、

  • コンテスト平均順位:14位
  • コンテストで1位になる確率:11.65パーセント
  • コンテストで10位以内に入る確率:44.47パーセント

で、たとえ正しく確率分布を予測できていたとしても、コンテストで1位になる確率は10パーセント近くしかないのだとか。。。結局、これだけ大量なパターンのなかから1つのパターンを予測するので、優勝するにはある程度運要素が必要である、と結論付けています。

5.まとめ

 インタビューや論文で、彼らは以下のように述べています。

  1.  モデルの精巧さよりも、どのデータを使うかが重要 
  2. 訓練データとして、トーナメント結果に加えてレギュラーシーズンのデータも使うのは重要(使えるデータは使おう)
  3. なんやかんやで、コンテストに勝つためには、運も必要。 

ということで、昨年の優勝モデルについて勉強したので、締切の3月中旬ごろまでに、実際にモデルを作ってみようと思います。kaggleのコンテスト参加自体がほぼ初めてなので、最初は半分より上ぐらいを目指したいですね。