神戸のデータ活用塾!KDL Data Blog

KDLが誇るデータ活用のプロフェッショナル達が書き連ねるブログです。

Kaggleで初めてのメダルを獲得できた話【GBRコンペ】:コンペ参加編

こんにちは。株式会社神戸デジタル・ラボ DataIntelligenceチームの原口です。

今回は「Help Protect the Great Barrieer Reef」(以下GBR)のコンペをどのように進めていったかご紹介します!

前回の記事をご覧になられていない方は以下のページからご覧ください。

kdl-di.hatenablog.com

参加までの流れ

時は2022年1月。私たちのチームはSIGNATEの次はKaggleだ!ということで、2021年9月23日から2022年1月14日まで開催されていた Pawpularity Contestに参加していました。(SIGNATEの取り組みはこちらをご覧ください。)

Pawpularity Contestは、撮影された犬・猫の写真からその写真の魅力度を測定するという内容のコンペです。

期間中全力で取り組み様々な施策を講じて精度向上を目指しましたが、結果は3,538チーム中659位と上位18%まで迫りましたが、惜しくもメダルを獲得できずKaggleの高い壁を感じたと同時にKaggleでもある程度戦えるということが分かった瞬間でもありました。

Pawpularity Contestでの結果

全力でPawpularity Contestに取り組んだこともあり、当分コンペは全力で取り組めない......という気分でしたが、そんな私に悪魔のささやきが。

「今ツイッターでヒトデを見つけるコンペが流行っているらしいよ」

どうやらPawpularity Contestに参加していた多くの参加者が(Twitterで確認できる範囲でですが)ヒトデを見つけるコンペに参加しているようです。

とりあえずどんなコンペかだけ確認しておこうと思い、Kaggleのページにアクセスしヒトデの写っているコンペをクリックしました。

いばらの道に通じる扉

内容を読み進めていくとある思いが湧き出てきました。

「このコンペ、もしかしたら入賞できるのでは?」

というのも前回の記事にあるように、このコンペは「画像中にヒトデがどこにいるか」を検出する内容でした。

前回のコンペでは犬・猫の魅力度というあいまいな指標に頭を悩ませましたが、今回のコンペはヒトデがどこにいるかという単純明快な内容に、私の参加意欲が高まっていくのを感じました。

燃え尽きていたはずの「コンペ欲」に火が付いたのです。


その日の終業後、個人的な時間を使いKaggleのDisscussionを読み、ベースラインコードを確認、自身のモデルを実装し提出しました。

結果は......

コンペの始まりの合図

少し改良を施しただけで見たこともない順位に到達しました。

次の日、私はチームメンバーに向かってこう言いました。

「GBRコンペで勝ちにいきませんか?」

これがブロンズメダルへ至る茨の道だと知らずに......。

コンペの進め方

チームで参加するにあたって、二人の役割を以下のように分けることにしました。

  • 原口:モデル構築担当
  • 高木:後処理担当

コンペでは主にKaggleのNotebookとGoogle Colaboratoryを用いてモデル構築や実験を行いました。ただし、いずれも実験環境のリソースに限りがあり、チーム全員がモデル構築を行うと前処理や後処理の実験ができないため、原口がモデルを、高木はモデルに対して後処理を加える方針で実験を行うことで効率化を図りました。

コンペ参加時の連絡はDiscordを利用して行いました。画面を見ながら説明したい場合はボイスチャットを、ちょっとした議論の場合はテキストチャットを利用して意見交換、のように機動性が高く、使い分けもしやすいのでコンペには欠かせないツールとなりました。

チームでコンペに参加する際に工夫した点は以下です。

  • 前日したこと・その結果の共有
  • Disscussionで得た知見を共有
  • その日する実験の共有
  • 思いついたアイデアの共有
  • 出来るだけフランクに話せる場を設ける

「前日したこと・その結果の共有」では、立てた仮説を検証した結果を報告します。この内容に対してチームで議論することで新しいアイデアがたくさん生まれるようになります。そのため実験の結果がどうであれ、行ったことはチーム内に報告するようにしました。

また、これまでの経験から「Disscussionで得た知見の共有」と「思いついたアイデアの共有」は、コンペおいて最も重要なことであると考えています。

「Disscussionで得た知見の共有」は、その情報を知っているかどうかでスコアが大きく変わる場合もあるため、得た知見はできるだけ共有できる環境を作りました。

「思いついたアイデアの共有」は仮説・検証のサイクルをどれだけ多く回せるかに関わっていきます。そのためには思いついたアイデアを共有し、そこからスコア向上に寄与するか?実験する価値があるか?といった議論を行うようにしました。

最後に「フランクに話せる場を設ける」です。「お疲れ様です。以前お話した実験の件で、結果が得られたので.....」といった形式ばった会話では、チャット分を打つ時間がタイムロスとなるうえ、気持ち的にもこわばってしまいます。その結果、我々が求めるスムーズなスムーズなアイデアの共有・議論は行えません。 そのため軽い気持ちで連絡が出来るような雰囲気づくりを意識しました。

Discordでの議論

コンペ参加時の波乱

コンペに参加して数日、リーダーボード(以下LB)のスコアを上げるために、KaggleのDisscussionにある情報を画面に穴が開くほど読み込み、Codeにある公開コードから得られる知見を搾り取っていました。

ここでリーダーボード・Disscussion・Codeについて簡単に説明します。

リーダーボードとは、評価用データを用いて計算された参加者のスコアと順位を示したものです。

課題に対するソリューション(前処理・後処理を含めたAIモデル)を構築出来れば、コンペ参加者はそのソリューションを提出フォームから提出します。

提出したソリューションは、Kaggle内部にある評価用データによってスコアが計算されます。

計算が終わるとその結果をリーダーボードに反映されます。

コンペ期間中はこのリーダーボードの順位を上げることを目標にして課題に取り組みます。

リーダーボードの例

Disscussionとは、そのコンペでの疑問点や知見について議論するための場です。非常に活発に議論されており、様々なアイデアや面白い洞察がたくさんあるため、Disscussionを読むためだけでもコンペに参加する価値があります。

Disscussionの例

Codeとは、そのコンペで利用できるコードが投稿されるページです。新しい実装方法が記載されたものや、最新の論文モデルで試した際の結果、さらにはベースラインコードと呼ばれる一通りコンペについて学べるコードなど、様々なコードが投稿されます。このページから新たな実装方法を学ぶことができるので、コンペ参加時には必ずチェックするページです。

Codeの例

Kaggleの説明は以上です。では内容に戻りましょう。

様々な手法を試すことで少しずつ実験方法が確立し、スコアが改善されていきました。データサイエンスの醍醐味である仮説・検証・考察が回り始めた状態です。

さあこれからいろんな手法を試すぞ!とチームで意気込んでいたその時です。Kaggleに新しい公開コードが投稿されました。

新しい知見が得られるかもしれない、そう思いながら私たちは新しいコードを開きました。

するとその公開コードは、コピーしてそのまま提出すると高スコアが得られるレベルの内容でした。

投稿されて数時間でたくさんの参加者がコピー・提出が行われたため、私たちのチームの順位は大きく下がることとなりました。

いろんな手を打って向上させたスコアが公開コード一つで抜かれてしまったこともあり、チーム内のモチベーションが大きく下がってしまう.......、こともありませんでした。

というのも、過去に参加した「間取り図解析アルゴリズム作成コンペ」にて、LBを気にし過ぎたあまり最終結果が悪くなるという苦い経験があったためです。

前回のコンペでの苦い経験はこちらから確認することができます。まだご覧になられていない方はぜひご一読ください!

そのため高スコアに焦りつつもモチベーションが大きく下がることはありませんでした。ただ、なかなかチームのスコアが上がらない中、公開コードを利用してどんどん追い抜かれていく状況を見て毎日胃がキリキリしていたのは覚えています。


このコードを皮切りに、本コンペでは様々な高スコアをたたき出す公開コードが出現しました。

そのたびにたくさんのチームに追い抜かれ胃がキリキリする、という経験することとなりました。(思い出すだけで胃が痛くなりそうです)

コンペ参加の意義

胃がキリキリするコンペですが、実務にどう生きてくるのでしょうか?

私が感じたコンペ参加への意義は大きく三つあります。

  • 有用な最新モデルとその利用方法を学べる
  • 斬新なアイデア・コーディングを学べる
  • 仮説・検証のサイクルを回す練習ができる

有用な最新モデルとその利用方法を学べる

昨今様々なモデルが毎日のように登場しています。その中からビジネス課題に利用できるモデルを通常業務と並行して調査し続けるのは非常に困難です。

この問題を解決してくれるのが、コンペのDisscussionです。

Disscussionでは、参加者がコンペ課題に利用できる様々な最新モデルを利用し、その結果を共有しています。

さらに、その中で精度の高いモデルがあれば、多くの参加者がそのモデルを利用するようになります。

そのためコンペに参加することで、自然と様々な最新モデルへの知見が高まり、さらには精度が高いモデルの利用方法についても学ぶことができます。

斬新なアイデア・コーディングを学べる

ビジネス課題を解決するためのアイデアを生み出す能力は、一朝一夕では学べません。一般的には様々なお客様の課題を解決していく中で磨かれるため、長い時間を必要とします。

この問題を解決してくれるのが、コンペのDisscussion・Codeです。

Disscussionでは新しい解法やモデル同士の組み合わせ方、さらには新しいデータの見方など様々なアイデアが記されています。

さらにCodeには、Disscussionにあるアイデアの実装方法も公開されている場合があります。

これらのアイデアを吸収し実装方法を学ぶことで、アイデアの引き出しを増やすことができます。

仮説・検証のサイクルを回す練習ができる

コンペに参加する最大のメリットは、仮説・検証のサイクルを大量に回せる点です。

データサイエンティストにおいて最も重要なのは、ビジネス課題に対して様々な仮説を立て、検証を行うことです。

しかし普段の生活や業務内では、仮説・検証のサイクルを大量に回す機会はほとんど無く、この能力を向上させるのは簡単ではありません。

この問題を解決するのがコンペです。

コンペでは与えられた課題に対して、高スコア・高精度を出すために様々な施策を打つ必要があります。そのため必然的に仮説・検証を回すことが多くなり、結果的に仮説・検証を回す能力の向上につながります。


上記の理由から、データサイエンスの能力向上という観点でコンペの参加は実務に大きく還元されると考えられます。

まとめ

今回はコンペ参加からチーム内でのコンペの進め方、コンペ内であった波乱、についてご紹介しました。

進め方では以下に注意して進めることで、円滑なコミュニケーションを達成するだけでなく、ブロンズメダルに到達できたと考えています。

  • 前日したこと・その結果の共有
  • Disscussionで得た知見の共有
  • その日する実験の共有
  • 思いついたアイデアの共有
  • 出来るだけフランクに話せる場を設ける

また業務でコンペに取り組む3つの意義についてもご紹介しました。

  • 有用な最新モデルとその利用方法を学べる
  • 斬新なアイデア・コーディングを学べる
  • 仮説・検証のサイクルを回す練習ができる

1つのコンペに参加するだけで一皮も二皮もむけたデータサイエンティストを育成できる可能性があります。

次回はどんな手法を用いてモデルを作ったかご紹介します!お楽しみに!

原口俊樹

データインテリジェンスチーム所属
データエンジニアを担当しています。画像認識を得意としており、画像認識・ニューラルネットワーク系の技術記事を発信していきます