この記事の内容
- 開催までの経緯
- コンペの準備と大事件の発生
- 開催!
- よかったこと、反省ポイント
- 運営の感想
はじめに
こんばんは! @abap34 です。情報工学系のB2で、アルゴリズム班Kaggle部の部長をしています。
さて、Kaggle部では、かねてより告知の通り、8/20~27の七日間、部内データ分析コンペを開催しました。
最終的に37チームから、772件ものサブミッションがあり、Discussion・Codeも32件の投稿と、とても盛り上がりました!
コンペは、情報工学系M2の@YumizSuiさんが Public / Privateともに中盤から首位を守り抜き、見事1位を獲得されました。おめでとうございます!
この記事は運営後記です。
部内コンペは開催をはじめて2年目になりましたが、相変わらず反省ポイントがたくさんあります。コンペ運営の知見みたいなものはなかなか転がっていないので、せっかくなので運営後記を残しておこうかと思います。
開催までの経緯
Kaggle部では、六月半ばから七月にかけて、新入部員向けの教育の一環として機械学習講習会などを開催しました。
資料の公開が、なかなか修正をする やる気 暇がなくできていないのですが、近日中に公開できるよう頑張ります。
さて、機械学習講習会は実装もたくさんしたつもりではありますが、やはり時間的な問題もあり実践的な部分はやや不足していました。
そこでKaggle部では、昨年度も実施した「データ分析コンペ体験会」をより発展させて、今年度も部内のデータ分析コンペを開催することにし、実践的な知識・Kaggleのようなデータ分析競技のおもしろさなどを布教することにしました。
するとちょうどそのタイミングで、ピクシブ株式会社のエンジニアの方から「Kaggle部の活動を手伝わせてほしい」、というお声がけがあり、ミーティングさせていただいた結果、このコンペをスポンサーしていただくことになりました!
より具体的にはコンペに参加した部員の一部向けに、オフィス見学やピクシブ社で機械学習エンジニアをされている方々とお話をさせていただく機会などをご提供いただきました。
「機械学習とかKaggle興味あるけどきっかけがなぁ...」と思っている、Kaggle沼に落ちる淵にいるサークルメンバーがたくさんいることは感じていて、このようなプラスワンの機会があるとそのような部員をKaggle沼に蹴飛ばす最後の決め手になるので、これはチャンスだぞ〜と思いながらコンペの準備を始めました。
コンペの準備と大事件の発生
今回のコンペは、初心者でも楽しめるよう、以下のような目標をたて、コンペに使うデータセットを探し始めました。
- 初心者でも扱えるレベルのデータの複雑さにする
- 誰でも簡単にデータを確認できる一般的な形式であること
- 計算資源ゲーにしないこと
- 大きめなモデルのFine-Tuning前提など、計算資源がないと勝負にならないものは当然NG(短期コンペなので、無料枠系も消費し切る可能性が高く、厳しい)
- ラスト一押しの工夫ポイントでディープな手法を使う、などはOK(短期コンペなので、必ずしもその立ち回りがベストとは限らず、計算資源がなかったことで「無理ゲー」にはならないため)
- 評価指標が簡単なこと
- できれば参加者に身近なデータだと良いですね
この条件を満たすのは基本的にはテーブルデータだろうということで、KaggleのDatasetsからテーブルデータを絞り込み、頭からスクロールしてはクリックという作業を延々繰り返します。
結局、参加者にとって身近なテーマでもあり、ちょうど都合よくピクシブ社の方でもよく取り組まれているタスクに近しいということで、ユーザのアニメへのレビューデータのデータセットである、いわゆるアニメデータセット
を使い、「アニメのレコメンド」を題材にしようということになりました。
さて、データの選定が落ち着き、大学がテスト期間に入ったこともありしばらく作業から離れていたのですが、いよいよ夏休みも間近となり開催も迫ってきたところで、ある日Twitterを見ていると...
すいません。atmaCupさんと、ネタが被りました。
実は、被ると、まずいです。
- 開催するのは一週間の短期コンペであること
- 参加者は比較的初心者も多い
ということもあって、このままではかなりレベルの高いatmaCupさんのsolutionをみんなでなぞるバトルになってしまう可能性が高いです。
一旦他のデータセットなども検討したのですが、最終的にはこれから準備しても間に合うか不透明ということで、
- アニメデータセットのままでいく
- データセットをもっとがっつり加工・収集して、atmaCupさんとは競技性がかなり違う方向に持っていく
という方針で行くことになりました。具体的にはユーザのデータを充実させたり、テキストデータを多く入れたりと、「別ゲー」になるよう頑張りました。コンペ終了後に上位入賞者の部員に話を聞くと「atmaCupの存在には気づいていて、同じじゃんと思っていざ中身を見たら、結構違った」とのことで、コンペが破綻するような状況は回避できたようです。よかった...
さて、コンペの設計がなんとかなったところで次にコンペ周りのサポートについてです。部内コンペ、それも初心者の人にも積極的に参加してほしい!という性質のコンペですから、しつこいくらいに初心者サポートをやるぞ!というのは最初から決めていました。
まず行ったのはコンペ初日の「ベースライン作る配信」です。
これは実際にDiscord上で配信を行いつつ、簡単なsolutionを作るところを配信するという取り組みです。そもそも pandasをはじめとした周辺ライブラリ等にも慣れてない部員も多くいるだろうという想定で、そのあたりの導入からかなり丁寧に行いました。
さらに、配信を見れない人や自分のペースで進めたい人もいるだろうということで、同じ内容を動画にすることにしました。
さて、先ほど
プラスワンの機会があるとそのような部員をKaggle沼に蹴飛ばす最後の決め手に
と書きましたが、今回はプラスワンの機会として
ずんだもんに登場してもらい、コンペの実況プレイをしてもらいました。
作成したNotebookをCopy & Editするところからコンペをスタートしてもらうことで初心者の人も比較的順調に滑りだせたかと思います。
さらに、順位争いを盛り上げるために部内SNSとかと連携したいところです。というわけで順位お知らせbotも作ります。親切にもkaggle apiで順位表が取得できるので、順位の更新を検知して部内SNSに投稿します。
そして最後がディスカッション関連です。
コンペの盛り上がりを大きく左右するディスカッションですが、ディスカッションという文化自体が競技プログラミングなどではあまりなく、盛り上がるかやや心配です。
そこで、ディスカッションを盛り上げるための施策として「ディスカッション賞」も設けました。投稿のうち、
- 最多upvote
- 最もユニークだと運営が認めたもの
をピクシブ社様の方から表彰してもらうことにしました。
upvote の上位2人でもよかったのですが、むしろ入賞基準があいまいな方が「コンペ終盤だけど、ワンチャン....」 とか、「実装とか下手くそだけど、ワンチャン...」みたいな感じで投稿が増えるんじゃないかと妄想してこんな基準を設けました。
さらに、コンペ終了後も感想戦で盛り上がって欲しいところです。
そこで、感想戦を盛り上げるための施策として、上位入賞者にはsolutionの公開をルールで義務付けることにしました。
コンペ開催!
さて、色々ありましたがなんとか開催まで持っていくことができました。
最終的には、
- ユーザのプロフィール情報 (生年月日, 性別 etc...)
- アニメの情報 (放送期間, あらすじ, 放送期間, etc...)
- ユーザのアニメへのレビュー (アニメ, ユーザ, 評価文, 評価値(10段階))
が与えられるので、
(アニメ, ユーザ) の組から評価値(10段階) を予測せよ、というタスクになりました。
内容としては基本的なレコメンデーションの手法が使える感じですが、評価文には実は全体の評価値とは別でより詳細な評価値 (アニメーション:3点、物語:8点、総合:6点 のようなもの) が入っていて色々な特徴が取れたりするところや、テキストデータがいろいろなところで入っていて、うまくこの辺りの表現を生かしていくところにやり込み要素がありそうなところが結構お気に入りです。
いざコンペが始まると後は見守ることが残りの運営の仕事です。
見守りの結果、最終的には、37チームが参加し、32個のディスカッションの投稿、772件のサブミッションと、大盛り上がりでした!
コンペの結果は、
優勝者: @yumizsuiさん (情報工学系 M2) (Public 1位)
第二位: @trastaさん (情報通信系 B3) (Public 2位)
第三位: @toshi00さん (情報工学系 B4) (Public 4位)
となりました!おめでとうございます!🥳🍾
yumizsuiさんは中盤から首位をキープしていて、なんと5個もの公開カーネルを投稿し、Public/Privateともに首位と見事な完全制覇でした!solutionも実験量を含めかなり完成度が高かったです。「そのユーザがレビュー数が多い上位28人か」という特徴量がユニークで印象に残っています。おめでとうございます!
trastaさんは他の参加者の人があまり取り組んでいなかった / あまりうまくいっていなかったNNをアンサンブルに組み込んでいたのが印象的でした。おめでとうございます!
toshi00さんは先ほど書いた評価文の特徴量をかなり丁寧に拾っていただいていてにっこりしました。また、「ポケモンかどうか」という特徴量が個人的にはめちゃくちゃウケました。おめでとうございます!
なお、表彰式の様子(スライド)は、
https://www.canva.com/design/DAFsqB3ENhg/Uyurnt23NIZYUWfMpIwR7A/view
から見ることができます。
そのほか、
4位. yuyu5510 さん (情報工学系 B3)
5位. konkoma さん (情報工学系 B2)
6位. shirasu_oisi さん (情報理工学院 B1)
7位. cp20 さん (情報理工学院 B1)
8位. urtun_trap さん (情報工学系 B4)
9位. ponjuice さん (情報理工学院 B1)
という結果になり、新入生からも3人が上位入賞しました!
おめでとうございます!
よかったこと、反省ポイント
ここまで書いてきたように初心者の人を含めてコンペを楽しめるように色々施策を打ちました。ここでは少しこれらの効果を振り返ってみようと思います。
まず、初心者向け配信・Starter Notebook・ずんだもん(?) は、どれもほとんどのKaggle初心者の参加者に見てもらえ、かつStarter Notebookを元にして徐々にスコアを上げていくという感じで取り組めてもらったことで、「バグって何もできないままコンペが終わってしまった...」という参加者が出てしまうことはかなり防げたと思います。
また、順位変動お知らせbotについても、どうしてもKaggleというサイト上でやっている影響でサークルのメインのコミュニケーションの場である部内SNSに盛り上がりが伝わりづらいところを、このBotの投稿とそれへの反応 (主に、順位が上がった人による「やったぜ!」という引用) によってかなり宣伝ができたと思います。
一般のコンペでも、Twitterや参加者Slackなどで同様のbotを稼働させるのはかなり良さそうと感じました。
また、ディスカッション賞・上位の参加者のsolution公開義務化は、今のところ完全にやってよかった!と思っています。どちらもコンペ中・終了後の盛り上がりに非常に大きく貢献してくれたと思います。
(実は去年のコンペでは、自分(運営)以外からのディスカッションの投稿がなく、根に持っていたのでリベンジを果たせてよかったです。)
さて、肝心の反省ポイントですが、Starter Notebookを宣伝しすぎたのか、solutionの多様性が若干低めになってしまったかな、と感じています。
Starter Notebook内では、例えば「欠損値は適当にこれで埋めます〜埋め方を考えてみてね」「モデルは適当にこれを使います〜 他にもこんなのがあるので試してみてね」というような感じの触れ方はなるべく至る所でしたのですが、むしろそれによってそれ以外の場所で工夫してみようという発想が生まれにくかったような感じがしました。Starter Notebookにもっと色々な手法に派生させていくための仕掛けを仕込んでおくべきだったかと思います。
また、それに加えてコンペ中盤などで適切に示唆を与えるノートブックを投下するなどしてある程度コンペの流れを制御したりするのも良さそうかなという感じがします。とはいえ、もちろん競技性としてはあまりにも運営が関与するのはイマイチですし、運営する人がどれくらい初心者をサポートしたいかによりそうです。
運営の感想
昨年に続いて二度目のコンペ開催ですが、一気に本格的になり、規模の面でも盛り上がりでも大きくステップアップできました。
ここだけの話、1年前、Kaggle含め機械学習をやる気満々でtraPに入部したのですが、当時はやっている人が本当に誰もいなく、かなり「(大丈夫か...?)」と思っていたのですが、今や40人近くがコンペに参加してくれるようになってとても嬉しいです。
部内SNSでの "Kaggle" というワードの発言数 (日数あたり、14日間の移動平均) を調べたのですが、じわじわと盛り上がり、コンペ開催期間中に爆発(?)していてとても満足です。
最後になりますが、スポンサーをしていただいたピクシブ株式会社様にはデータセットの選定でも相談に乗っていただきとてもお世話になりました。コンペ後のオフィス見学・参加者との交流でもコンペのタスクであるレコメンド関連のお話を色々と伺わせていただきました。本当にありがとうございました。
さて、このコンペですが、今後もKaggle部で毎年継続的に行なっていく予定です。
この記事を読んでいる東工大生・未来の東工大生の方は、ぜひtraPに入部して年々パワーアップしていくコンペに参加してください!
(また、Kaggle部と一緒に何かしたい!という方は、@abap34のTwitterまでお気軽にご連絡ください!)
以上です。