DEVELOPER’s BLOG
技術ブログ
Kaggleバスケコンペ(NCAA)解法の紹介
NCAAコンペ概要
全米大学体育協会バスケットボールトーナメントの試合の勝敗を予測するコンペでした。男女別にコンペが開かれました。リーグ戦の試合結果の詳細とトーナメントの試合結果のデータが年ごとに与えられ、今年のトーナメントの試合結果を予測します。評価指標はLoglossでした。
結果
新型コロナウイルスの影響で、大会自体がキャンセルになってしまいました。リークなしのLBの最も良いスコアは0.52586です。
取り組み内容
コンペの内容を理解してから
LBの順位が参考にならないということを一番意識しなければならないと感じました。
というのも、LBは2015~2019年の予測のスコアなのですが、その答えはすでに与えられたデータに入っているため簡単にスコアを0にすることができ、リークに気を付けないと簡単に誤ったスコアが出てしまいます。
どのコンペでもCV(Cross Validation)は重要ですが、今回は特に必要でした。公開されているノートブックにもリークをしたものが多かったため、もしコンペが中止にならなければかなりのshakeが起きていたと思います。しかし、リークを防ぐことに関するディスカッションもいくつかあり、そこに注意できている参加者もいました。
また、過去数年間は毎年NCAAコンペは開かれているため、それらの上位成績者の解法を読み参考にしました。しかし、一貫した特徴はなく様々な解法であった為、自分なりの方法を考える必要がありました。
前処理 • 特徴量エンジニアリング
基本的には、リーグ戦の合計得点などの試合の詳細データをチームごとに集計し、それを特徴量としました。
また、与えられているデータにチームのランキングなどもあったため、欠損値を補完しながら特徴量に加えました。Kenpom.comという、リーグとトーナメントのデータを集計しているサイトがあり、その独自の集計方法が特徴量として使えそうであったためスクレイピングをしたのですが、トーナメントのデータをリークしているためそのまま使うことはできず、自分でコーディングして作り直しました。
このうちのピタゴラス勝率やポゼッション率は比較的重要な特徴量となりました。また、各チームのプレースタイルの特徴を掴む為、チームごとのリーグ戦の試合内容に対してPCA分析をしてその結果を加えるといったこともしました。特徴量選択はまだしていませんでした。
CV(Cross Validation)
交差検証の仕方についてですが、2014年までのデータ12年分を用い12FoldのGroupKFoldで行いました。去年、一昨年などの戦績を反映した特徴量を作っていないため、リークは起きていないと思います。年によってValidationのスコアが全然違うことから、やはりスポーツの予測は難しいなということを感じました。ジャイアントキリングの多く起こった年のスコアはかなり悪くなってしまいます。
モデリング
LightGBM、CatBoost、DNNのアンサンブルです。シングルモデルのスコアにそれほどの違いはなかったのですが、出力の分布は大きく違い、アンサンブルをすることでスコアを向上することができました。僕の場合は、LightGBM、CatBoost、DNNの配分を、3:2:5にした場合が最もスコアが良くなりました。
XGBoostは他のモデルに比べスコアが良くなかったため使いませんでした。ハイパーパラメータチューニングはまだしていなかったため、これをするとさらに良くなったかもしれません。
まとめ
コンペ自体がキャンセルになってしまい非常に残念です。しかし、今までしっかりできていなかった、シングルモデル作成→複数モデル作ってアンサンブル の流れに慣れてきたという点や、LBの順位が全く信用できない中でCVだけを頼りに取り組むという点においては学びが多く、良かったと感じています。来年はコロナウイルスの影響も収まりコンペがまた開かれると思うので、その時に今回の取り組みの成果を出したいです。
Twitter・Facebookで定期的に情報発信しています!
Follow @acceluniverse