「ベースボールデータハッカソン」エンジニアリング部門で準優勝しました
昨日と本日の2日間にわたって開催された「パ・リーグ×パーソル ベースボールデータハッカソン」にて、エンジニアリング部門で準優勝しました。
賞品として、パリーグ6球団タオルセットを頂きました。ありがとうございました。
本記事では、ハッカソンの概要や私が取り組んだことなどをまとめます。外部に公開できない情報などの問題で理解が難しい部分があるかもしれませんがご了承ください。ご質問いただければ可能な範囲で対応いたします。
ハッカソンの概要
1日目の朝10時にデータが公開され、19時までに以下の2つから参加する部門を選択する形式のハッカソンでした。
- データから予測精度を競う「エンジニアリング部門」
- データから新しい発見を導き出す「コンサルティング部門」
今回は全32名が参加し、うち26名がエンジニアリング部門、6名がコンサルティング部門を選択しました。チーム参加も可能で、私は友人と3人チームでエンジニアリング部門を選びました。
エンジニアリング部門では、予想精度の高い上位4チームが予測手法などに関してプレゼンしました。(プレゼン内容自体は順位に関係なく、純粋に予測精度だけで順位が決まりました)
コンサルティング部門では、提出したプレゼン資料を基に選抜された上位2チームがプレゼンし、最優秀チームを決めました。
エンジニアリング部門の課題
エンジニアリング部門の課題は、「ファンクラブ会員が特定の試合に来るか否か」の予測でした。
約14万人分のうち半分の7万人についてはgame1〜45に来場したか否かの情報が、残りはgame1〜42に来場したか否かの情報が公開されました。ここで「隠されたgame43〜45に来場するか否かの値を予測する」という課題です。
ファンクラブのマーケティングに関する情報以外に、今回は「ベースボールオペレーション」のデータが公開されたのが特徴的でした。
- 各打者の試合ごとの個人成績
- 各投手の試合ごとの個人成績
- 各試合の打席ごとの結果
これらの野球のプレイデータをどのようにして来場予測に繋げるか、がハッカソンの鍵となりました。
また外部データの使用は禁止されていました。
部門の選択
まず、データを探索的に分析しながら2つの部門のどちらに出すかを考えました。
実のところ、当初はメンバー的に強みがあるコンサルティング部門へ参加するつもりでした。しかし、下記の理由で最終的にはエンジニアリング部門への参加を決めました。
- 最初に立てた仮説と真逆の分析結果が出たため、チームで納得行く解釈ができなかった
- バックアップとして進めていたエンジニアリング部門の予測の精度がそこそこ良さそうだった
特徴量生成と予測モデル
今回、game43とgame44&45で予測方法を分割して考えました。その理由は下記の通りです。
game43〜45の来場情報が公開された7万人のうち、それぞれ何人が来場しているかを分析したところ、概ね以下のような結果になりました。
- game43 → 7万人中5000人
- game44 → 7万人中1000人
- game45 → 7万人中1500人
game1〜42についても同様の分析をしたところ、ほとんどは14万人中1万人以上(つまりは7万人中5000人以上)の結果が出ていました。game44&45は過去のデータと比べて極端に数字が少ないため、過去のデータを基に予測モデルを作成しても上手くいかないと考えました。
3人の主な役割としては、game43の予測モデルを私が、game44&45を他2人のチームメンバーが担当しました。
game43について
- 特徴量
- ファンクラブ会員が「今季初めて参加した試合」のプレイデータの情報
- 予測モデル
- sklearn.ensemble.GradientBoostingClassifier
- グリッドサーチでハイパーパラメータ調整
- ランダムシードを変えて7回予測し、多数決で最終予測結果を決定
私のチームが作った特徴量として独自性があったのは、ファンクラブ会員が「今季初めて参加した試合」のプレイデータの情報だと思います。
ファンクラブ会員が(特定の試合に限らず)来場するか否かは、今季初めて参加した試合での「良質な体験」が利いてくると仮説を立てました。良質な体験とは「得点がたくさん入る」「ホームランがたくさん出る」「奪三振が多い」などを指します。
どういうものが良質な体験かを考えるのは機械学習に任せるのが良いと思考停止で思ったので、「ベースボールオペレーション」の3データについてそれぞれpandasのgroup byで大量に特徴を作成しました。
あとは勾配ブースティング分類器に突っ込み、ハイパーパラメータを調整しアンサンブルといった流れです。
game44&45について
上述した通り、game44&45は来場者が非常に少ないことが予想されます。さらに、過去のデータを活用した予測モデルの作成は困難でした。
そこで、無理に来場を予測することで精度を下げるリスクは取らず、「過去全試合に来場している人」など絶対に来そうな人だけを人力で確認する方針を取りました。具体的には7万人のうち、ほぼ全員を来場しないと予測し、5人だけを来場と予測しました。
予測対象の3分の2に当たるgame44&45のデータについて「機械学習を全く使わない」という戦略は、プレゼンで結構ウケました。無理に機械学習に頼らず人力に頼るのが大切な場面もあるなと感じました。
ちなみに人力でラベル付けは会場盛り上がりました😆
— takuoko (@takuoko1) October 7, 2018
感想
率直な感想として、野球という自分が関心を持っているデータを触れるのは純粋に楽しかったです。
上位4チームに入りプレゼンができたこともあり、懇親会では多くの方と交流できました。こちらも実りある体験でした。プレゼンを多くの方に褒めていただき「データ分析を楽しんでいるのが伝わってきました」と言ってもらえたのが非常に嬉しかったです。
今回、game43の予測には機械学習を、game44&45では人間の力を大いに活用しました。イベントに関連したパネルディスカッションの中で「Data drivenとKnowledge drivenの関係性」のような話がありましたが、課題に応じて両者を適切に使い分けるのが大事だなと改めて実感する機会になりました。
最後に順位について。2位という結果は満足できるものではありますが、勝ち切ることができなかった経験を糧に今後も邁進していきたいと思います。
これからもデータ分析を楽しみながら、精進していきたいです。