はじめに
この記事はKaggle Advent Calender 2022の17日目の記事です。
今回初めてKaggle Advent Calendarを書かせていただきます。
最近、Kagggle Community Competition機能を使った内輪コンペを開催する機会があり、その際に工夫した点や、今後の開催時に注意すべきポイントなどをまとめたいと思います。
Kaggle Community Competitionとは
ご存じの方も多いかと思いますが、Kaggleには"内輪でコンペが開催できる機能"が用意されています。
「Kaggle Community Competition(旧称:Kaggle Inclass Competition)」と呼ばれており、無料で使用できます。
公式サイト https://www.kaggle.com/c/about/community
なお、現在登録されているコンペは、KaggleのCompetitionsページから「Community」で検索できます。
開催までの流れ
1.公式サイト下部の「Create a Community Competition」ボタンを押します。
2.遷移先の画面で、コンペの名前、説明、URLを入力します。
URLはコンペ名から自動生成されますが、変更することもできます。
ここで、公開範囲について「Invite Only」を指定することでクローズドなコンペとなり、参加者を限定することができます。
入力が終わったら「Create Competition」ボタンを押します。
3.これでコンペの枠が完成しました。
この時点ではHost(主催者)のみが参照できるページとなっています。
ここから各種設定を加えていきます。[Host]タブに切替えます。
4.「Launch Checklist」に公開までに設定すべきことのリストが挙げられています。
以下の8つをクリアすれば公開できるようになります。
【未】①期限の設定
【済】②必要なページの登録(この時点で要件を満たしておりチェック済になっています)
【未】③コンペ概要・データ・評価方法・ルール説明の設定
【未】④評価指標設定・正解データのアップロード
【未】⑤Submitサンプルデータのアップロード
【未】⑥trainデータ・testデータのアップロード
【未】⑦正解データの予測対象列のマッピング
【未】⑧Submitサンプルデータの予測対象列のマッピング
それぞれの右側にあるリンクから各設定の画面に遷移することができます。
4ー①)期限の設定
[Host]タブの「Settings」から設定します。
期限の他に、最終結果発表日、チーム人数・Submit回数の上限なども設定できます。
招待用のURLもここで変更・確認ができます。「Invitation Only」にしていると、参加専用の特殊なURLが発行され、このURLを知っている人しか参加できないクローズドなコンペになります。
内容を変更したら、「Save Changes」ボタンを押します。
4-③)コンペ概要・データ・評価方法・ルール説明の設定
[Overview]タブの「Description」でコンペの説明、「Evaluation」で評価方法の説明、[Data]タブでデータの説明、[Rules]タブでルールの説明を記載できます。
Kaggleなどではしっかり説明が書かれていたりしますが、簡単な説明でも問題ありません。なお「Add Page」ボタンを押すと新たな項目を追加することもできますが、追加しなくてもコンペの開催には差し支えありません。
右上の「Edit」ボタンで編集し、終わったら右上に表示される「Save」ボタンで保存します。
4-④)評価指標設定・正解データのアップロード
4-⑤)Submitサンプルデータのアップロード
4-⑦)正解データの予測対象列のマッピング
4-⑧)Submitサンプルデータの予測対象列のマッピング
[Host]タブの「Evaluation」で設定します。
まず、評価に利用する指標を選択します。RMSE、AUCなど一般的な評価指標はもちろん、選択肢が非常にたくさん用意されています。これらからコンペ内容に適した評価指標を選択します。
(ちなみに、今回の内輪コンペは回帰問題で、予測対象の値が指数関数的に大きくなる傾向があることからRMSLE(平均二乗対数誤差の平方根)を選択しました。)
次に、正解データのCSVをアップロードして、予測対象とする列を指定します。
ここで、PublicリーダーボードとPrivateリーダーボードの各評価に用いるデータの割合を設定することができます。デフォルトでは50:50になっています。データは設定した割合に基づいて、ランダムで自動的に分割されます。
同様に、Submitのサンプルデータもアップロードして、予測対象とする列を指定します。
4-⑥)trainデータ・testデータのアップロード
[Data]タブで「Upload first version」ボタンを押すとアップロードファイルの選択画面に遷移します。
5.ここまで完了したら、[Host」タブの「Launch Checklist」再確認します。
全てのチェックがつき、「Your competition passes our automated checks」のメッセージが表示されたら準備完了です。
「Launch Competition Now」ボタンを押すと、コンペが公開されます。
6.参加者に招待URLを伝えて、コンペを開始しましょう。
工夫や注意すべきポイント
・Public、Privateの分割を手動で実施したい場合
コンペティションの性質によっては、PublicとPrivateをランダムではなくて、手動で分割したいケースがあります。例えば特定のグループ単位で分割したり、時系列データにおいて日付を分けて分割するようなケースです。
今回の内輪コンペでも特殊な条件で分割したかったため、手動で分割を行いました。
あらかじめ正解データにPublicとPrivateを指定する列(Usage)を設けてアップロードをすることで、ランダムではなく指定に基づいて分割をしてくれます。
・開催期間の設定
提出締め切り後、遅くとも1週間以内にPrivateスコアを公開する必要があるようです。(1週間より未来日付を指定しようとするとエラーとなる。)
今回の内輪コンペでは、提出締め切りから約2か月後の表彰会までPrivateスコアを公開しないことを検討していましたが、この仕様により、残念ながらそのようなことはできないことが分かりました。
・チームマージの設定
通常のコンペでは、1週間前までがチームマージ期限となることが多いように思いますが、このような機能は用意されていませんでした。内輪コンペということもあり、システム上の制約は設けずに参加者にコンペルールとしてお伝えすることにしました。
・途中でのチーム脱退
業務多忙につきチームを抜けたいというメンバーが発生しました。(チームの人数上限があるため、チームとしては他のメンバーと入れ替えたいという要望)
機能的にチームから脱退させるのは不可能であることが分かり、事前にチームマージについては慎重に進めること、とアナウンスしておくべきだったと反省しました。 Kaggleに慣れている人であればチームマージは慎重に対応されると思いますが、不慣れな人も参加するコンペの時には、特に注意が必要だと思います。
・クローズドな環境にするための工夫
InvitationOnlyの設定にすることで招待用のURLが発行され、このURLを知っている人しか参加できない仕組みとなっています。
このURLはボタン1つで無効化&再発行できますので、例えばコンペへの参加期間を最初の1週間だけと決めて、以後はこのURLをリセットしてしまえば、以後は新たな参加者が参加することはできなくなります。なるべく参加者を知っている範囲に絞りたいケースではこのような工夫が有効になると思います。
・中間チェックポイントの設定と共有
おおよそ1週間ごとに中間チェックポイントを設け、参加者同士のグループチャットにリーダーボードのキャプチャを貼付けて共有していました。
どのチームも少しずつスコアが改善していき、また着実にsubmit数が増えていることが分かりました。参加者同士も接戦になっていることに気づいて意識しあったり、お互いの励みになっていたようです。
開催してみての感想
これまでの内輪コンペでは、お題とデータを提供した後、最終的な予測結果をもらって開催者側が手動で評価する、ということをしていました。
今回KaggleCommunityを活用したことで、評価が楽になり開催時の負担が減っただけでなく、開催期間中の参加者同士のディスカッションや、ベースラインコード・EDA・新技術のお試し情報など、その他参考になる情報を次々に投稿してくださる方がいて、非常に有難く感じました。
また、社内にKaggle経験者の方が意外といることが分かり、とても刺激を受けました。これからも定期的にこのような内輪コンペティションを開催することで、もっとKaggleの面白さを多くの方に知ってもらえたら良いと感じました。
最後まで読んでいただきありがとうございました。この記事が少しでも参考になりましたら幸いです。