🏺

CompetitionだけではないKaggleの魅力

16 min read

はじめに

この記事はKaggle Advent Calendar 2020の13日目の記事です。

この記事ではCompetitionだけではないKaggleの魅力と題して、NotebookやDiscussion、Datasetに投稿をする楽しさやメダルを取りやすくなる心がけについて紹介していこうと思います。

自己紹介

Kaggle Competitions MasterかつDiscussion Masterです。Notebooksもあと銀メダル一枚でMasterですが、DatasetsだけはまだContributorです。

Kaggle Masterってコンペだけの話じゃないの?

と思う方も少なくないかと思いますが、KaggleではCompetitions、Datasets、Notebooks、Discussionの4つのランキングが設けられそれぞれについて一定の基準を満たした場合にMasterやGrandmasterのようなtierを得ることができます。

Expert以上の各tierの獲得条件はいずれの場合も一定数のメダルを獲得することです。下の表には各ランキングにおけるExpert以上のtierの獲得条件をまとめたものです。

Expert Master Grandmaster
Competitions
Datasets
Notebooks
Discussion

メダルの獲得条件などより詳しい条件はKaggle Progression Systemに書いてあります。また、カレーさんのブログにも日本語で詳しくまとまっています。

各ランキングのtierごとの人数は、2020年12月12日現在で

Novice Contributor Expert Master Grandmaster
Competitions 84,725 57,311 6,142 1,511 197
Datasets 1,530 2,464 344 20 8
Notebooks 7,337 11,501 1,509 130 35
Discussion 5,177 12,094 1,282 63 22

となっています。この表を見るとCompetitionsの圧倒的人気が分かりますね。

さて、Competitionsの人気と比べると見劣りしてしまいますが、NotebooksやDiscussionでもランキングに入っている人は多くいて、その中でMasterやGrandmasterのtierを目指していくことはそれなりに大変でやりがいがあります。

世界的に有名なKagglerたちの中にも複数のランキングにおいてGrandmasterを取ることを大きな目標としている人たちがおり、それを達成することは名誉なこととされています。Kaggle GrandmasterのAbhishek Thakurが世界初のTriple GrandmasterになったのがKaggleというプラットフォームが開かれてから9年経った2019年という事実[1]は、これがいかに大変なことかを示唆しています。

その他にも、NVIDIAのRAPIDS.aiチームのGrandmasterたち(Chris,CPMP,Dieter...)[2]やH2O.aiのGrandmasterたち(Psi,Vopani...)は複数のGrandmaster持ちも多く、世界的なKagglerの一員となる一つの条件はCompetition以外でも活動的であることが挙げられると思います[3]

一方、日本のKagglerたちに焦点を当ててみると圧倒的にCompetition志向であることが気になります。
以下のツイートは先日日本初のDatasets MasterになったTawaraさんによる2020年5月時点の調査結果ですが、CompetitionsではいずれのtierでもJapanが4位につけている一方で、それ以外のランキングにおいてMaster以上のtierを持っている人は片手で数えるほどです。

日本のKagglerにNotebook MasterやDiscussion Masterが多くないのは、圧倒的なコンペ至上主義やNotebookのみのMaster/Grandmasterを下に見る傾向などもありますが、最も大きな原因はほぼ全てのコミュニケーションが英語で行われることにあると私は考えています。

Notebookなどを投稿するモチベーション

わざわざ不慣れな英語を書いて貴重な知見をshareしてもメダルをもらえるだけだとやる気が起きないなあ、という方も多いのではないかと思うのですが、NotebookやDiscussion、Datasetを投稿することはメダルがもらえる以上の意味合いがあると私は考えています。それらをいくつかの点にまとめて挙げていこうと思います。

適切なスターターの存在はコンペの趨勢を左右する

KaggleのCompetitionは様々な題材が取り扱われていますが、近年はシンプルな題材のコンペティションはほとんど出題されることがなく[4]、ドメイン知識が必要なもの[5]や、どう取り組んでいいのかすぐにはわからないようなコンペ[6]などが多くなってきています。

これらのコンペは適切なスターターNotebookなどがない場合参加人数が少なくなりがちになり、結果としてCompetitionの金メダルを取るための競争は熾烈になりがちです[7]。逆に足掛かりとなるようなスターターNotebookがある場合には参入障壁が下がるため参加者が増え、金メダルの枠が増えるので自身が金メダルを取るオッズも高くなるという理屈です。

例としてCornell Birdcall Identificationにおける私の経験を一つあげようと思います。

このコンペはカーネルオンリー形式のコンペティションでしたが、Notebookをコミットする段階ではテストデータが一切与えられずSubmitボタンを押してRerunされているときに初めてテストデータが入っているディレクトリが出現するという仕様になっていました。したがって参加者はコミット時とSubmit時で異なる処理をするようなコードを書く必要があったのですが、Kaggleの仕様でRerun時にエラーが発生した時のフィードバックが非常に少ないこと、1日2サブしかできないことなどの理由で開始1週間経過時にsample submissionを超えられるサブができた人はいませんでした。

これらの状況を鑑みて、私はようやくサブが通ったsample submissionよりわずかに上のスコアが出るNotebookを公開しましたが、これにより参加者が増加し最終的には1,390チームが参加することになりました。

チームを組みやすくなる

これは至極単純な理屈で、NotebookやDiscussionでアクティブに活動している人は目立つので覚えられやすく印象もよくなりがちです[8]。結果、チームマージの依頼も通りやすいという話です。

自身のスキルアップに繋がる

Notebookを一つ用意することや関連研究を調べてまとめてDiscussionに投稿すること、Datasetを作成して公開することはいずれも大変です。しかしその作業を通して様々なスキルを身に付けることができるのも一つの魅力です。

例えば、私が最近公開したNFL 1st and Future: Impact DetectionのNotebookでは、選手の各時刻における位置などを記録したtrackingと呼ばれるデータをアニメーションとして可視化してDatasetを作るものですが、私はこれまでmatplotlibFuncAnimationを使ってアニメーションを作成したことがなかったためmatplotlibのドキュメントを読みながら作成しました。このNotebookを作った理由の半分はメダル欲しさからなのですが、その結果としてFuncAnimationを使ってアニメーション作成できるスキルを身に付けられたわけです。

このように、メダルをモチベーションにしていてもそれ意外の面でもご利益があるというのはお得感があるものです。

メダルを取りやすいNotebook/Discussion/Datasetって?

ここでは、どのような書き方、お題の選び方をするとメダルを取りやすいか、あるいは取りづらいかについて私なりのTipsを書いていこうと思います。

Notebook

メダルを取りやすいNotebookには例えば以下のようなものがあります。これ以外にも取りやすいものはあるかと思いますが、あくまで思いついたものをあげています。

  • スターター
  • ハイスコアNotebook
  • 知見を共有する系のNotebook

スターター

スターターNotebookは先ほども述べたものですが、ここではコンペ初期のベースラインのようなものだと考えています。最初に出たベースラインはupvoteをもらいやすい傾向にありますが、そうでなくても

  1. コンペを進める上でいろいろカスタマイズしやすい
  2. naiveなやり方ではたどり着けないくらいには高いスコアがちゃんと出る

ようなNotebookはupvoteをもらいやすいです。例をあげるとFreesound Audio Tagging 2019daisukelabさんのスターターは、コンペ開始してすぐに公開されたものですが、audioデータというKaggleではあまり見られないデータ形式に対して有効な2DCNNアプローチをいち早く共有したNotebookとして高く評価を受けています[9]。なお、スターターのコードはコンペ参加者の多くが利用するため、後にまで残るようなスニペットなどはここから生まれていたりすることが多いです[10]

近年はNeural Networksを使うようなコンペの急増と、Kernel Onlyコンペの登場により、TrainingとInferenceを分けるような場合も多く、両方を公開することで一気に2つ金メダルを狙うことができる、というお得感のある要素もありますので、手の速さに自信がある方はスターターの公開に全力を注ぐのも一つの楽しみ方ではないでしょうか?

ハイスコアNotebook

非常にわかりやすいですが、ハイスコアNotebookは非常によくforkされますし、よくupvoteされます。スターターとハイスコアNotebookはほぼ同義にも聞こえますが、ここではスターターを改変するような形でハイスコアを達成できるものをハイスコアNotebookと呼ぶことにします。

ハイスコアNotebookはupvoteされやすいと書きましたが、一定の評価を得るためにはある程度条件があると考えています。

  1. その時点でのBest Score、あるいはほぼ同じくらいの若干低いスコアが出ていること
  2. 既存のNotebookの単なるcloneではなく、目新しさのある独自の取り組みがあること

1.に関しては説明の必要もないとは思うのですが、多くの人はNotebookを見るときにScoreでソートして上の方に来たものしか見ません。多くの人の目に留まるためにはある程度高いスコアが出ていることが前提です。

2.に関しても書いてあるとおりなのですが、なんらかの独自の考えなどに基づいた要素が追加されていることが多くの人に評価される必要条件です。近年はNotebookをただforkしただけのものが何も知らない人にupvoteされてメダルをもらっていることもありますが、これで取れるメダルはせいぜい銅メダルです。多くの人はなんの目新しさもないNotebookを全く評価しませんし、むしろdownvoteができる機能があったらdownvoteしたいくらいのことを思っています。

「独自の考えなどに基づいた要素」ですが、例えばモデルの変更や特徴の追加、Data Augmentationの追加などが挙げられます。例としてはOpenVaccine: COVID-19 mRNA Vaccine Degradation PredictionコンペのtitoさんのGRU+LSTM with feature engineering and augmentationなどが挙げられます。このNotebookはxhluluさんのOpenVaccine: Simple GRU Modelをベースにしたものですが、特徴の追加とData Augmentationの追加により大きくスコアを改善しているもので、高く評価を受けています。

知見共有系

知見共有系とまとめてしまいましたが、これには様々なものが含まれます。例えば危険な特徴が混入していることを警告するNotebookライブラリの使い方よく知られていないドメインのお作法の解説データの偏りを指摘するNotebookなど、様々なものがあります。

これらの知見共有系のNotebookが評価されるには

  1. 公開時点でDiscussionや他のNotebookでは共有されていないこと
  2. コンペの役に立ちそうということがはっきりとわかること

の2点があると考えられます。1.に関してですが、ほぼ同一内容の知見の共有があった場合には当然ながら先に共有されていた方にupvoteが多く集まります。

2.に関しては、何を当たり前のことを、と思う方もいるかもしれませんが、非常に重要なことです。コンペの役に立つことが一眼でわかるのなら極めて短いスニペット程度のNotebookでも評価されますし、逆にいえばよくあるEDAカーネルのようにただいろいろグラフを描画しただけのNotebookは(一部の初期の分析を除いて)見向きもされません。

Discussion

メダルを取りやすいDiscussionには以下のようなものがあります。

  • nth place solution
  • CV vs LBスレ
  • 関連論文やリンクのまとめなど
  • バグ報告 + 解決法など
  • アイデア共有
  • お悩み相談

なおDiscussionはMasterやGrandmasterになる条件としてtotalのメダル枚数もある[11]ため、1upvoteつけばもらえる銅メダルを集めることも重要になってきます。

nth place solution

コンペ終了後恒例となっているnth place solution[12]はDiscussionで金メダルをとるチャンスとも言えます。コンペティションメダル獲得や金圏でないとnth place solutionでメダルは取れないのではないか、と思われる方もいるかもしれませんが、実は順位よりもいつ投稿されたかどの程度詳細に書かれているかの方が重要な要素なのではないかと私は考えています。

例えばCornell Birdcall IdentificationのTakamichi Todaさんの167th Place Solutionは詳細な解法だけでなくコードの共有もされており、コンペ終了直後に公開されたこともあり金メダルを獲得しています。一方、Freesound Audio Tagging 2019における私たちのチームの7th place solution with commentary kernelは公開がコンペ終了からしばらく経ってからだったこともあり残念ながら金メダルを獲得できませんでした(後悔しています)。

このように仮にコンペティションで金メダルを取ったチームの解法であっても公開が遅れてしまうとメダルを貰い辛くなってしまうのでなるべくコンペ終了直後に投稿できるようにするのが望ましいです。また、順位に関わらず、詳細な取り組みを公開すると評価されやすいため皆さんも順位を気にせずどんどん解法のshareをすることをお勧めします。

CV vs LB スレ

自分の現在のCVとLBの比較を書いていく恒例のスレッドです。一緒にどのような手法でそのスコアが出たかをかいつまんで書いておくとupvoteを貰いやすい他、updateがあったときにコメントで続けて書いておいたりするとそれぞれにメダルがつきやすいです。

手法について書いておくことは自分のやり方をshareしてしまうので嫌だという方もいるかもしれませんが、そこに書いたことを正確に真似できる人はほとんどいないので気にせずどんどんshareしていった方がいいと私は思っています。手法について書いておくと、それについて質問してくる人がいたりして議論が発展しやすく、その過程で自分も新しい知見を得ることができたり、それぞれのコメントにメダルがもらえやすくなるというメリットもあります。

なお、CV vs LBスレの変種としてConfusion Matrixを見せ合うスレが立つこともありますがこちらも同様です。

関連論文やリンクのまとめなど

コンペ序盤に現れやすいスレッドで、金メダルを取りやすいです。過去の類似コンペを調べてその上位解法のリンクを貼ったり、関連研究の論文をいくつか読んでリンクと簡単な説明をつけたり、と様々ですが、これをやるメリットとしてその過程で自分もいろいろ知見をためることができる、というものがあります。

自分がドメイン知識がある分野の場合や、リサーチ力には自信がある場合にはこれで金メダルを狙うのはカタいと思います。

バグ報告 + 解決法など

最近はKernel Onlyのコンペが多いこともあり、submissionにまつわるエラーなどが出やすいという傾向があります。これらについての報告やそれをどう解決したか、という情報は他の人にとっても非常にありがたいことが多く、高く評価されやすいです。

アイデア共有

言うまでもないことですが、重要なアイデアの共有はいずれのコンペにおいても歓迎されます。重要なアイデアなんだからあまり共有はしたくないと思う方もいるかもしれませんが、実際のところそれを生かしてスコアをあげるチームはそれほど多くないことがほとんどです。

本当に重要だと思っていることは秘匿しつつ、その他の効くかもしれないアイデアを公開すると誰かが実験してくれてその結果を教えてくれることもあります。順位が下がることを恐れずどんどん発言をしていくとDiscussionメダルは稼ぎやすいです。

お悩み相談

自分が何かに悩んでいるとき、他の誰かも同じような悩みを抱えていて、別の誰かは同じ悩みを抱えた上で解決しているかもしれません。例えば、CVとLBが全く相関しない!と思ったときそれは他の参加者も同じだったりするかもしれません。そんなとき、Discussionで悩みを打ち明けてみると、いろいろなコメントやupvoteがもらえる可能性があります。

Datasets

残念ながら私はまだDatasetsではほとんどメダルをもらったことがないですが、次のようなデータセットはメダルを多くもらっているのを見かけます。

  • External Data
  • コンペデータを加工したデータセット
  • ライブラリ
  • 学習済み重み

External Data

コンペのルールでExternal Dataが認められている場合、収集したExternal DataをKaggle Datasetとして公開したものをDiscussionでshareしておくと高い評価を貰いやすいようです。

例としてはCornell Birdcall Identificationにおいてtrain dataと同じソース(Xeno Canto)からクローリングしてtrain dataと同じ形式のデータセットを公開したvopaniさんのデータセットなどが挙げられます。

コンペデータを加工

最近のコンペでは、入力に時間がかかる前処理を施す必要があることもあります。これらのコンペで時間がかかる前処理を施したあとのデータセットを新しいデータセットとして公開すると評価されやすいようです。

例としてはやはりCornell Birdcall Identificationにおいてtrain dataのサンプリングレートがまちまちだったものを32kHzに揃えてリサンプリングしwav形式に直したTawaraさんのデータセットなどが挙げられます。

ライブラリ

Internet使用不可のコンペではKaggleのdocker imageに入っていないライブラリを使いたい場合、Kaggle Datasetsにライブラリを加えてそれをNotebookで読み込むようにするやり方が広く使われています。コンペにおいて重要なライブラリなどをDataset化して公開すると多くの人から評価されるようです。

例としてはY.Nakamaさんのiterative-stratificationなどが挙げられます。

学習済み重み

ハイスコアNotebookを重みも公開した状態で公開すると重みの方にもupvoteがつきやすくなると言うトリックがあります。金圏や銀圏上位にそのまま入れてしまうようなNotebookの重みの公開は快く思わない人もいるようですが、コンペ終盤でない限り多くの人に歓迎されています。

私はスターターにつけておいた重みに期せずしてupvoteを頂くことができました。

英語が苦手なのはどうすればいい?

実際のところ英語が苦手なのはNotebookやDiscussionを書いていく上で障害にはならないのではないか、という気もしています。というのも近年はGoogle翻訳やDeepLなどの機械翻訳の精度も非常に高いためです。

例として私が作成した、音のAugmentationに関するNotebookは日本語+英語で書いたものですが、実は英語の大部分は日本語をDeepLにかけたものをそのまま貼っています。このようなNotebookでも90以上のupvoteをもらえることを考えると、内容さえよければ多少英語がお粗末でも全く問題ないと私は考えています。

もう1つ例をあげると、Kaggle GrandmasterのY.NakamaさんによるCassavaコンペのスターターNotebookは説明は最初に数行あるのみで、残りは適切なセクションわけとコードのみですが高い評価を集めているNotebookです。このように内容さえ良ければ実際のところ英語で説明を書く必要はほとんどないのです。

終わりに

長々と書いてしまいましたが、私がこの記事を通して伝えたかったのは、日本のKagglerはもっとDiscussionへの参加やNotebookの公開をしてもいいんじゃない?と言う話でした。

この記事がNotebookやDiscussionに参加する時の一助となれば何よりです。

脚注
  1. なおAbhishekはその後新設されたDatasetsでもGrandmasterを獲得し、現在は4xGMなどと呼ばれています ↩︎

  2. KAggle GrandMaster of Nvidia(KAGMON)と呼ばれているそうです ↩︎

  3. 「世界的なKaggler」は主観的な表現で、これを満たしていなくても世界的に非常に有名なKaggle Grandmasterは数多くいますが、例えばRAPIDS.aiチームに入るためにはただのGrandmaster(=コンペで好成績をおさめているだけのGrandmaster)では声がかからないという話を聞いたことがあります ↩︎

  4. メダル無しがついていないコンペとして出されることもありますね ↩︎

  5. PLAsTiCC Astronomical ClassificationPredict Molecular PropertiesOpenVaccine: COVID-19 mRNA Vaccine Degradation Predictionなど ↩︎

  6. Abstraction and Reasoning ChallengeLyft Motion Prediction for Autonomous VehiclesNFL 1st and Future - Impact Detectionなど ↩︎

  7. 参加者が少ない方が金メダル取りやすいのではないか、という疑問を持つ方もいるかもしれませんが、日本の上位Kagglerたちの多くはその逆だと考えています。金メダルを当たり前のように取る世界的なKagglerたちはどのようなコンペにおいても強いため、参加者が少なく金メダルを取れる順位の枠が小さい場合はTop Kagglerたちを押しのけて上位に入るだけの実力と運が必要になってきます ↩︎

  8. もちろん問題発言やカーネル乱立など迷惑がられる行為を繰り返していれば逆効果です ↩︎

  9. daisukelabさんはこのNotebookや加工済みDatasetの共有、Discussionへの貢献などで評価されFreesound Audio Tagging 2019ではChallenge Citizenship Awardとして表彰されています ↩︎

  10. Freesound Audio Tagging 2019でdaisukelabさんが使用していたmono_to_colorという関数はその後のCornell Birdcall Identificationでも使用されています。daisukelabさんは失敗したと考えているとのことですが、私は非常にためになるコードだと思います ↩︎

  11. Masterは200枚、Grandmasterは500枚必要です ↩︎

  12. writeupという人もいますね、違いがわからん・・・ ↩︎

Discussion

ログインするとコメントできます