ARISE Kaggle部活動記 #2

Kaggle部

ARISE analyticsの越智です。ARISE Kaggle部の活動記、連載第2回目です!

私たちは世界的に知名度の高いKaggleを中心に、国内外の分析コンペティションへ参加し、上位ランクインを目指して頑張っています。Kaggle部は20215月現在、参加人数は約38名で、業務に支障のない範囲で楽しく活動中です。部員はARISEのプロパー社員だけでなく、ARISEに所属している様々な勤務形態のメンバーで活動しています。ちなみに私もKDDIからの出向者ですが、所属関係なく仲良く切磋琢磨しています。

今まで参加したコンペは下記の通りです。

  • M5 Forecasting – Accuracy @ Kaggle (398/5598 銅ランク)
  • 対戦ゲームデータ分析甲子園 @space50/567 銀ランク、72/567 銅ランク)

今回は2チームで参加しそれぞれ銀・銅ランクになった対戦ゲームデータ分析甲子園(https://prob.space/competitions/game_winner)で取り組んだ分析内容と工夫した点についてご紹介します!

対戦ゲームデータ分析甲子園 参戦(20209月~)

今期はどのコンペに参加するか検討する中で、いくつかの候補のうちメンバーが最も興味を持ったものがProbspaceの「対戦ゲームデータ分析甲子園コンペ」でした。有名オンラインゲーム「スプラトゥーン2」の勝敗予測をするという内容です。前回同様メダル受賞を目標に3人ずつ2チームで参加しました。

そして結果は、567チーム中ARISE glassチームが50位で銀ランク、ARISE yamaチームが72位で銅ランクでした。どちらもメダル受賞達成という素晴らしい結果でした!

以下では、コンペの詳細と両チームの解法について説明していきます。

本コンペについて

概要

今回は有名オンラインゲーム「スプラトゥーン2」の対戦の勝敗を予測するコンペでした。このゲームの経験者は両チームとも1名ずつでしたので、チーム内でのドメイン知識共有も鍵となりました。

「スプラトゥーン2」について

オンライン上で8人で行うゲームで、プレイヤーは44でチームに分かれ5種類のルールの元で競うゲームです。

データ構造

バトルごとのユニークなテーブルデータで、内容はステージやプレイヤー情報となっています。2チームはABという名前、各チームの4人のプレイヤーはそれぞれA1A4B1~B4という名前が振られています。このデータを用いてAチームの勝敗を予測します。

勝敗予測モデル

受賞した2チームの各モデルについて説明します。

ARISE glassチームモデル (50/567 銀ランク)

  • ベースモデル

今回は使い慣れていることもありLightGBMを用いたモデルを採用しました。決定木と勾配ブースティングを使った手法です。

  • 外部データ結合

Probspaceには参加者がトピック投稿する場がありそこで許可のとれた外部データを使用することができます。今回利用できるのは3種類あり、

  1. ステージの面積のデータ(csv形式)
  2. プレイヤーの装備するブキに紐づくサブブキ(補助ブキ)・スペシャルウェポン(ゲージを貯めて使う特殊ブキ)のデータ(csv形式)
  3. ブキごとの性能が掲載されているwikiページのデータ(形式無し)でした。

    ①、②は既に整形されているのでそのまま学習データに結合して使用できました。ですが③はWiki作成者が独自でパラメータを定義し測定したものでブキの種類により数値が複数あったりパラメータの数が異なっていたりと整形に時間を要しました。そのためwebスクレイピングによるデータの取得、Excelでの細かい整形をチームで分担して行いました。イメージのわかないパラメータは実際にゲームでそのブキを使ってみて採用する数値を決めるなど工夫しました。

    • 特徴量エンジニアリング

    仮説を元に特徴量を追加、修正していきました。プレイヤーのブキ×バトルルールの勝率を追加したことが最も効果的でした。

    • その他:チューニング

    Optuna(オープンソースのパラメータ最適化フレームワーク)を用いてLightGBMのハイパーパラメータをチューニングすると決定木の分岐の個数3、末端ノードの最小データ数7が最適となりました。シンプルな決定木ということで精度が上がるのか半信半疑でしたがチューニングをしたモデルが最も良いスコアとなりました。

    ARISE yamaチームモデル (72/567 銅ランク)

    • ベースモデル

    本コンペのデータはカテゴリカル変数を多く含むためカテゴリカル変数の扱いに長けているCatboostを用いたモデルを採用しました。LightGBM同様、決定木と勾配ブースティングを使った手法です。

    • 外部データ結合

    ARISE glassチームモデル同様3つの外部データを結合しました。

    • 特徴量エンジニアリング

    ARISE glassチームモデル同様に特徴追加、修正をしました。

    • その他:条件ごとのモデル作成

    モデル予測結果から、バトルルール、プレイヤーランク帯域ごとに正答率に偏りがあることが判明しました。そのため比較的正答率の高い条件と低い条件を分け、それぞれの条件に特化したモデルを構築しました。

    考察

    今回のデータは情報が少なく1位入賞のモデルでもaccuracy0.58という非常に推定しづらいデータでした。ARISE glassチームモデルで行ったチューニング結果を反映することでスコアが伸びたように、シンプルなモデルにすることで過学習を防ぐことが重要だったのだと考えます。

    またバトルルールによって有利な装備があること、熟練者と初心者で装備の傾向が異なることに目をつけて、ARISE yamaチームモデルのように条件ごとでモデルを使い分ける手法も効果的でした。

    他にも興味深かった解法の一つが、上位入賞者が行っていたA1プレイヤーの推定です。本コンペのデータの提供者はA1プレイヤーとしてデータに載っていることから、同一A1プレイヤーが何人かいるはずだとプレイ日時やレベルから推定していました。データ収集方法という観点でデータの特性を発見するのは盲点でした。

    今回の取り組みで工夫したこと

    チームメンバーで協力して効率的にモデル精度を高めていくために、チーム運営として工夫した点を紹介します。

    頻繁な定例の実施

    チーム定例を週2で行いました。コンペの取り組みは日々の業務の合間に行うためどうしても優先度が低くなってしまいます。ですが頻繁に定例を行ったので、効果的なもしくは効果のない特徴量や手法についての情報を高頻度で共有でき、個人のトライ&エラーを素早く回すことができました。また、モチベーションの維持・向上に繋がりました。

    明確な役割分担による効率化

    本コンペに参加したのが残り1ヵ月のタイミングだったので、チームメンバーで協力して効率よく進めていくことが重要でした。提供データの構造理解、外部データの収集・整形、トピック投稿情報収集などモデルに関係なく共通する作業は役割分担をして実施していました。

    チーム内勉強会による知識の平準化

    コンペ中に活用したい各種ツールや手法について、習熟しているメンバーの知見を未習熟のメンバーに共有する勉強会を設定しました。これにより、メンバーの知識レベルを底上げすることができました。

    おわりに

    今回参加した両チームともにメダル受賞という目標を達成することができました。今回はチームごとに分析の進め方を自由に設定して行いましたが、これまでの経験を元にチームで分析に取り組む上でより効率的に進められる体制の整備もしていきたいと思っています。また今後Kaggle部として強力な分析基盤を導入予定ですので高スペック処理を必要とする分析コンペにも参加できるようになります。

    分析はチームワークが大事です。役割を決めお互いの強みを持ち合う事で、一人で行うより何倍も効率的に分析課題に取り組めます。我々と一緒にKaggle部を盛り上げてくださる方はこちら(https://www.ariseanalytics.com/recruit/)のページからご連絡お待ちしています!

    関連記事