こんにちは。takapy(@takapy0210)です。
本記事はKaggle Advent Calendar 2020 22日目の記事です。
明日は、本エントリで紹介するMoAコンペでチームを組んだsinchir0さんの予定です。
タイトルからしてとても楽しみです!(プレッシャー)
はじめに
本エントリは、先日行われたMoAコンペ*1に5人チームで参加したときに行っていたアレコレについて書いたものです。
5人チームで取り組むのは私自身初めての経験であり、どのようにコンペを進めて行ったのか(主に知見共有などのTips)について残しておこうと思います。
今後、分析コンペなどをチームで取り組む際の参考になれば幸いです。
(GithubでのIssue管理などはソロで参加する際にも役立つものになるのではないかと思っています)
ちなみに結果は34/4373 で銀メダルでした。解法については下記を参照ください。
www.kaggle.com
また、後日談としてTawaraさんが興味深い実験を行ってくださったので、興味のある方はこちらもどうぞ。
tawara.hatenablog.com
チームでやったこと
下記リポジトリに歴史が詰まっています。(懐かしい・・・)
工夫というほどの工夫でもないですが、ざっくり下記のような方針で行いました。
- 「こんな実験をしようと思っている」「このDiscussionを読んだ」「このnotebookをサブするぞ」はGithubのIssueで管理
- ローカルCVとPublicLBのスコアはスプレッドシートで管理
- ここはMLFlowとか使うと楽になるよな〜というのはありつつ、コードコンペということで今回はアナログ管理です
- 日常のコミュニケーションはslackで行う
- Githubの対象リポジトリをsubscribeさせて、Issueやコメントなどはslackの方にも自動的に流れてくるようにしました
- 毎週1回、オンラインでのチームMTGを行う
- この議事録もGithubのIssueに残しました
※今回はコードコンペだったこともあり、各自のコードをGithubで管理するということは意図的に行っていません。あくまで、情報共有ツールとしての位置付けでGithubを用いました。
コミュニケーション
slackのワークスペースを作成して、そこで諸々やりとりをしました。
ですが、あくまでslackはコミュニケーションツールなので、知見の蓄積などはGithubにて行っていました。
slackのチャンネルは下記の3つを作りました。
#general
- 主に雑談用
#kaggle_moa
- 主にコンペの内容を話す場所。先述したGithubに登録された内容もここに流すように設定。
#submission
- submissionする時に「今日分のサブ使いますね〜」と報告する場所。
submit回数を無駄にしないために
kaggleは日本時間のAM9時に、その日のsubmit回数が初期化される仕様*2になっているため、
#submission
チャンネルでは毎朝8時30分にリマインダーを仕込み、submit回数をなるべく無駄にしないようにしました。
(本コンペでは1日にsubmitできる回数が3回と少なかったため、なるべくこの3回を毎日使い切りたいよね〜という想いもありました)
slackのリマインダーは下記を使うと簡単に作れたりします
slack-remind-creator.netlify.app
知見の共有
チームで取り組むメリットはいくつかあると思うのですが、例えばチーム内で同じような実験を複数人がおこなうと、「単位時間あたりの試行回数が増える」というメリットが活かせなくなってしまいます。
そこで、各人がやろうとしていることなどはGithubのIssueを作成するルールにしました。
このIssueの作成ですが、少しでも負担を下げるために Issueテンプレート*3を設定しておくと良いと思います。
今回は下記3つを作成していました。
(後述しますが、submissionは別にIssueにしなくてもexpetimentのコメントに紐づける形で良いかもと思いました)
- discussion(kaggleで気になるdiscussionの概要を共有するもの。同じdiscussionを複数人で読んじゃった〜という事態を防ぐため)
- expetiment(どんな実験をしようとしているかを共有するもの)
- submission(どの実験・notebookをsubmitしたかを共有するもの)
それぞれのIssueにどのような内容を書いていたかは先述したリポジトリを見ていただきたいのですが、 Issueで管理する方式は、Issue起点でコミュニケーションが生まれたり、関連しているものを簡単に紐付けられたりと、とてもよかったと思います。
submitした結果(スコア)は下記のようにスプレッドシートでアナログ管理していました。
(これは結構煩雑だったので、どうにかしたいところ)
また、チームMTGの議事録はこんな感じで残していたりしました。
次にチームで参加するなら
基本的には上記のやり方で良さそう〜とは思うのですが、細かい点をいくつか改善できるかな、と思っています。
submitのIssueはいらないかも
今回はsubmitする際に、expetiment
とは別にsubmission
のIssueを作ろうというルールでやっていましたが、これは結構手間だったりしたので、expetiment
のIssueコメントに紐づける形で管理しても良いかもしれません。
(そもそもコードもGithubで管理できれば、Issueに紐づくPRを作れば良いことなのですが、今回のようなコードコンペの場合はそうもいかないと思うので)
Issueのタイトルだけで判断しやすくする
これはatmacupに参加していた時に作ったIssueなのですが、 Issueテンプレートのタイトルに絵文字を入れることで実験やドキュメントの区別が容易になりました。
なので、タイトルには良い感じに分かりやすい印を付けられると良いのかなぁ、と思います。
最後に
やっぱりチームで参加するとモチベーションも保てますし、議論もたくさんできたのでとても楽しかったです。
Team90'sで戦ったくださったみなさん、ありがとうございました!!!&またどこかでチーム組めたら嬉しいです!
そして本エントリが分析コンペをチームで戦う人たちの一助になれば嬉しいです!