検索
連載

Kaggle初心者のためのコンペガイド ― Titanicの先へ僕たちのKaggle挑戦記

Kaggle初心者がKaggleに挑戦した過程や得られた知見などを記事化していく新連載。初回である今回は、準備編として初心者向けにコンペを簡単に紹介します。また、連載目的やKaggleを始めて「これが良かったよ」という筆者の体験を共有します。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
「僕たちのKaggle挑戦記」のインデックス

連載目次

 機械学習やディープラーニングを勉強してきて、書籍やWeb上のコンテンツで用意された練習問題から、より実践的な問題で腕を磨きたいと思ったときに、データサイエンス/機械学習の世界的なコンペティション(以下、コンペ)プラットフォームであるKaggleや日本のSIGNATEを使ってみようと考えている人は少なくないと思います。そして書籍やWeb情報を基に、KaggleでTitanicコンペでSubmission(提出)をしてみた後、次はどんなコンペに参戦しようかを迷う人も少なくないのではないでしょうか?

 そんな人に向けて今回は、既に終わっているコンペを厳選してKaggle初心者向けに紹介します。終了したコンペには、コンペ期間中に蓄積された「参考になるノートブック」や「Discussion情報」が豊富にあります。初心者にとっては、これらが実践力を鍛えるのに役立つのではないかと思います。

 本題に入る前に、今回は連載1回目なので、この連載がどういう目的で企画されたのかを簡単に紹介させてください。その後、タスク別に数個ずつコンペをリストアップします。本稿の後半では、筆者がどのようにKaggleを始めて、どんなことをしたら良かったかをまとめます。

本連載の目的

僕たちのKaggle挑戦記

 この連載の名前は『僕たちのKaggle挑戦記』にしました。ちょっとダサい感じになっていますが、連載名の「僕たち」とは、Kaggle初心者として挑戦していくDeep Insiderスタッフなどの執筆者だけでなく、初めてKaggleに挑戦したい/挑戦しようとしている読者の皆さんのことを指しています。

 ……と今、適当な理由付けを考えました。が、そういう読者目線でユーザーフレンドリーでフランクでユルい内容を目指し、できれば皆さんと喜怒哀楽をともにできるような連載にしていきたいと思っています。肩肘を張って「これを見て勉強してね」というコンテンツは目指していませんし、そもそもKaggleグランドマスターでもないのにそういうコンテンツは書けませんので。そういう前提で読んでいただけるとうれしいです。

 執筆者ら自身が、あくまで初心者Kagglerです。世の中にある本やコンテンツとは逆に、執筆者も読者も初心者だからこそ、

  • 「Titanicコンペの次はどうしたらいいの?」「私はこうしてこうなったよ」と同じ初心者レベルで意見交換できたり
  • 「こういうところでつまずいたけど、こう回避できたよ」という初心者ならではの悩みの共有ができたり
  • 「Kaggleコンペ参加に当たっていろいろと調べてみたよ」という便利ツールや手法、Tipsの情報提供ができたり

するのではないかと考えています。コンテンツの基本は「コンペに参加してこういうことがあった」という内容になると思いますが、それに限らず意見交換/悩み共有/情報提供できるものなら何でも発信していく予定です。

 読者の皆さんのことを(勝手にですが)「僕たちのKaggleチームメンバー」「僕たちのKaggleフレンド」だと思って、皆さんに向けて僕たちのKaggle挑戦記を少しずつ書いていきたいと思います。自己紹介として、当面の執筆予定者の2人の予定や意気込みを短くコメントしておきます。


かわさき

 どうも、かわさきです。Deep Insiderでは主にPython(やVisual Studio Code)に関連した記事を執筆しています。知識量としてはPython >>>> 機械学習という状態といってもよいでしょう(PyTorchはちょこちょこと使っていて、連載記事も書いたりしていますけど)。そういう意味では、上にあった「初めてKaggleに挑戦したい」とか「Titanicコンペの次はどうしたらいいの?」というのはまさしく自分のことです。

 先日まではKagglerにとってのHello Worldともいえる(?)Titanicコンペへの参加も躊躇(ちゅうちょ)していたのですが、この連載が始まるからということで挑戦をいよいよもって始めることになってしまいました。プロレス風にいえば「時はきた! それだけだ」(苦笑い)ってやつです。

 というわけで、少しは知っているPyTorchをメインの武器に、何でもかんでも取りあえずはDNNに突っ込んでみて、考えるのはそれからだ、というスタンスで取り組んでいこうと思っています。DNNでは良い結果が得られないことがたくさんあるはずです。そうなったときの悪戦苦闘を楽しみにしていただければと思います。



一色

 今回の記事を執筆している一色(いっしき)です。Kaggleに登録したのは、3年前みたいなのですが、Titanicコンペだけで終わっていました。理由は、Kaggleをやろうと思ったら、それなりに時間が取られるために覚悟が必要だったからです。

 そんなときに『Kaggle入門』連載が始まって勇気づけられたことと、「編集部でもKaggleをやろう」という機運が生まれたことが、ようやく覚悟を決めるきっかけになりました。

 かわさきさんとのすみ分けなどは考えておらず、かぶる内容でもそれぞれに思ったことを記事にしたいと思っています。私の方はTensorFlow/Kerasも追いかけていますので、ディープラーニング方面ではそれを中心に使う予定です。それが唯一のすみ分けになります。


 さて、連載紹介と自己紹介が終わったところで本題に入りましょう。

初心者のためのコンペガイド

 このコンペガイドは、本連載を企画した際(数カ月前)に「Kaggleにはタスク種別ごとにどんなコンペがあり、どんなコンペなら僕たち初心者でも練習問題として使えそうか」を調査してリストとしてまとめたものです。Kaggle初心者が学ぶための情報がそろっていると考えられる「終了済みの過去のコンペ」に絞っています。また、リストがコンパクトになるように、タスク種別ごとに最大5個程度を厳選ピックアップしました。

 ちなみに調査した当時の筆者の感想は、以下の通りでした。あくまでKaggle初心者の視点です。


一色

 表形式データの回帰/分類/レコメンデーションは、コンペが盛り上がっているみたいですね。それらの領域にはディープラーニングは入りづらいので、XGBoostなど勾配ブースティングと呼ばれる手法で取り組むのがメインになるのかなと思います。

 ディープラーニングの出番である非構造化データだと、画像認識や音声認識、テキスト分類といったタスクはそこそこ参加者が多いようです。しかし、それ以外はあまり多くないですね。人気タスクはいずれも挑戦する価値があると思います。


  • 凡例:
    • 【Started】と表記:「Getting Started Prediction Competition」…… 入門コンペ
    • 【Playground】と表記:「Playground Prediction Competition」…… Startedより一段上の「お楽しみ」コンペ
    • 【Featured】と表記:「Featured Code Competition」…… 一般的なコンペ
    • 【Research】と表記:「Research Code Competition」…… Featuredよりも「実験的な問題」を扱うコンペ
    • 【Recruitment】と表記:「Recruitment Prediction Competition」…… 参加者の採用を目的としたコンペ
    • 【InClass】と表記:「InClass Prediction Competition」…… (大学の学内だけなど)クラス内限定のコンペで、外部者はSubmissionできない
    • 【+……】と表記:『Kaggleで勝つデータ分析の技術』で示されていた代表コンペ例
    • 【*……】と表記:『Kaggleコンペティション チャレンジブック』で示されていた代表コンペ例

 執筆時点で「Tabular Playground Series」というPlaygroundコンペが毎月実施中で、それも4つほど含めました。

構造化データ

表形式データ

  • 不正検知(=二値分類。異常検知の直近のコンテストはなかった)

非構造化データ

画像/動画

音声

テキスト/言語

ゲーム/ロボット

 以上、参戦してみたいコンペはあったでしょうか。こういったもので経験を積んでから、本当のコンペに参加して活躍できるようになりたいですね。

 あくまで筆者が調べて選んだ範囲なので、初心者にもっと良いコンペもあるかもしれません。さらにコンペを探したい人は下記のリンク先から探してみてください。

図1 Kaggleコンペのページ
図1 Kaggleコンペのページ

 本題は以上で、以降はおまけコンテンツとして、筆者がKaggleを始めてから約20日間で、これが役に立ったというポイントをまとめていきます。

Kaggleを始めるのに役に立ったこと

1. 「30 Days of ML」プログラム

 私がKaggleを始めるのと同じタイミングで「30 Days of ML」というKaggle公式プログラム(2021年8月2日〜31日)が始まりました。良い機会と思いながらも半信半疑で参加したところ、これがかなり良かったです。

 このプログラムの第2回目が再度開催されるかどうかは分からないですが、プログラムに参加しなくても参考になる部分はあると思うので、私がこのプログラムでどんなことをやったかをご紹介します。

 30 Days of MLは、前半(講座)と後半(コンペ)に分かれました。前半では毎日宿題が出ました。内容は、誰でも参加できるKaggle公式講座(Courses)の、

でした(各回はチュートリアルと演習で構成されています)。宿題リストのリンク先に日程を記載しておいたので、これに沿って毎日やってみるとよいかもしれません。ちなみに筆者は、中級講座で突然やることが増えて2日ほど修了が遅れました……。ちょっと日程バランスが悪いと思います。

図2 Kaggle公式の3講座を修了
図2 Kaggle公式の3講座を修了

 この3講座の内容を4xGM(=Competitions/Datasets/Notebooks/Discussionの全4カテゴリで最上位のGrandmasterを獲得した人)のAbhishek Thakur氏(『Kaggle Grandmasterに学ぶ 機械学習 実践アプローチ』の原著者)が解説する動画も毎日公開されました(下記のリンク先)。自分が行ったSubmissionよりも高い精度のSubmissionが動画の中で毎回出るので落ち込みますね(苦笑)。英語ですがオススメです。特に演習でつまずいている人は助けになると思います。

図3 YouTube上の「Kaggle's 30 Days of ML」再生リスト
図3 YouTube上の「Kaggle's 30 Days of ML」再生リスト

2. 英語は何とかなる

 ここまでで、講座内容が全て英語であることに不安を覚えた人もいるかもしれません。しかし、もはや機械翻訳の時代ですので心配ご無用です。

 文単位ではDeepL翻訳を使ってください。負い目を感じる必要すらないです(参考:「最近ものすごく優秀な修士就活生が増えている→機械翻訳『DeepL』を巧みに使って論文を書いていた『すごい時代が来たな』 - Togetter」)。

 ページ単位ではChromeの[日本語に翻訳]を実施し、翻訳がおかしいと思うところはDeepL翻訳で翻訳し直すのがオススメです。ただし、公式講座のチュートリアルの本文はiframeというフレーム要素内に含まれているので、そのままでは翻訳できません。フレーム内のページを別タブに表示するには、下記をブックマークレットにして使ってみてください(=ブックマークの名前とURLを登録して、それをクリックして使うだけ)。

  • 名前: Kaggle翻訳部分オープン
  • URL: javascript:window.open(document.querySelector("#rendered-kernel-content").getAttribute("src"))

 別タブに表示することで、[日本語に翻訳]が有効になります。ただし、ノートブックのコードまで翻訳される問題があります。そこで、「KaggleのKernelにChromeの日本語翻訳をかける - Qiita」を参考にChrome拡張のTampermonkeyを使用することをオススメします(ちなみに上記のブックマークレットもこのQiita記事を参考にアレンジしたものです)。Tampermonkeyに何を書けばよいか分からない人もいると思うので、私のUserScript内容を公開します。

// ==UserScript==
// @name         Kaggleノートブックの翻訳前処理
// @namespace    https://www.kaggle.com/
// @version      0.1
// @description  ページ内スクロールの無効化を無効にする・コードセルとコードの出力セルは翻訳しない。参考:https://qiita.com/tabu_ichi2/items/9420b01f53c87a42abb3
// @author       YourNameHere
// @match        https://www.kaggleusercontent.com/*
// @icon         https://www.google.com/s2/favicons?domain=kaggle.com
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // スクロールの無効化解除
    document.querySelector("body").style.overflowY="visible";

    // コードセルのclassに.notranslateを追加
    document.querySelectorAll(".input").forEach((element) => {
        element.classList.add("notranslate")
    });

    // コードの出力セルのclassに.notranslateを追加
    document.querySelectorAll(".output_wrapper").forEach((element) => {
        element.classList.add("notranslate")
    });

    //alert("準備完了! Google翻訳を実行してください。")

})();

リスト1 Tampermonkeyに記述するUserScript内容例

 これでコード部分を避けて翻訳してくれるようになります。

 ただし、演習問題で使うKaggleノートブックは[日本語に翻訳]にできません。翻訳するには、図3のようにいったん保存してからViewerで開く必要があります。

図4 Kaggleノートブックをビューアーで開く方法
図4 Kaggleノートブックをビューアーで開く方法

 また、「日本語訳 <演習名>」で検索すると翻訳したノートブックを公開してくれている人もいるので、そういうのを参照するのもありです。

3. 世界中の人はもっと気楽にコミュニケーションしている

 英語の話で脱線しましたが、30 Days of MLに話を戻します。このプログラムが良いのは、Kaggle初心者同士の交流の場をDiscord上に用意してくれていることです。

図5 Discord上の30 Days of ML用サーバーのJapaneseチャンネルの表示例
図5 Discord上の30 Days of ML用サーバーのJapaneseチャンネルの表示例

 第1日目の宿題は、Discord上の自己紹介チャンネルで簡単な自己紹介をすることでした。といっても「Hello, I'm <名前> from Tokyo, Japan!」ぐらいの本当に簡単なものです。私自身、こういったメッセージを送信したら、世界の誰かがイイネ!してくれて非常にうれしかったです。

 30 Days of MLに何人参加しているかは分かりませんが、コンペを見ると約6000チームあるので、世界中の5000人以上が参加しており、少なくとも数千人がDiscordコミュニティーにいろいろなことを書き込んでいます。その内容を見ると本当に気軽に書き込んでいることが分かります。こういったところで慣れて、Kaggleコンペ内のDiscussionのトピックやCodeのノートブックで意見交換できるようになりたいですね。

 Discussionへのコメントも何も難しいことを書く必要はなさそうです。実際に私も「ここでこれが役に立ったよ。ナイスなコンテンツありがとう!」のようなコメントで「+1」してもらえました。ギスギスしておらず、気軽にコメントして認め合える感じが楽しいと感じます。

4. 世の中は良コンテンツであふれている

 30 Days of MLやKaggle公式講座の良さ、ちょっとしたTipsを紹介しましたが、日本語で読める書籍を含めてたくさんのKaggle本があります。筆者の場合、以下の書籍を所有しており、それぞれに良さを感じています。ひと言コメントを書いておきますが、本屋さんなどで手に取って好みに合うモノを選んだ方がよいと思います。

図6 たくさんある日本語のKaggle本
図6 たくさんある日本語のKaggle本

 『Kaggle Grandmasterに学ぶ……』本は、英語の原著であれば、著者のGitHubリポジトリからPDFをダウンロードして無料で読むことも可能です。

 また私の場合、Kaggleを始めるに当たり進め方などをネットで検索したりして情報収集して、さまざまな良いコンテンツに巡り会えました。その中でも、手前味噌(みそ)になりますが、

という連載の記事は「確かに、確かに」と納得できること、参考になることが多かったです。オススメなのでぜひ一読してみてください。リクルート所属のKaggle Master 4人が執筆しています。

5. Kaggle日記というアイデア

 ネット検索した中で「これやってみよう」と思ったのが、Kaggle日記です。

 Kaggleをやる上で誰しも何らかの作業ログが残るようにしていると思います。そうしないと、どのノートブックで何をしたかは確実に分からなくなっていくと思うからです。作業ログの付け方は、やりやすいように自由に書けばよいし、ネット上に公開する必要もないと思います。この記事が良いのは、「Kaggle日記」という名称を与えて、作業ログの存在を分かりやすくしたことだと思いました。

 今回の連載記事を書く手前、筆者自身が書いたものをGitHubリポジトリに一部公開してみました。ご参考まで。

図7 GitHubリポジトリに公開してみたKaggle日記
図7 GitHubリポジトリに公開してみたKaggle日記


 Kaggleを始めて「これが役に立った」という内容はもっとあるのですが、既にそこそこ記事が長くなってきたので、今回はここまでとします。紹介できなかった話は、今後の記事の中でいつか紹介できればと考えています。

 次回の私からの記事は、私の予想以上にきれいに進められたと思う、Kaggle公式講座にひも付いているコンペ「Housing Prices Competition for Kaggle Learn Users」の参戦記を記事にする予定です。お楽しみに。

「僕たちのKaggle挑戦記」のインデックス

僕たちのKaggle挑戦記

Copyright© Digital Advantage Corp. All Rights Reserved.

[an error occurred while processing this directive]
ページトップに戻る