Kaggle初心者のためのコンペガイド ― Titanicの先へ:僕たちのKaggle挑戦記
Kaggle初心者がKaggleに挑戦した過程や得られた知見などを記事化していく新連載。初回である今回は、準備編として初心者向けにコンペを簡単に紹介します。また、連載目的やKaggleを始めて「これが良かったよ」という筆者の体験を共有します。
機械学習やディープラーニングを勉強してきて、書籍やWeb上のコンテンツで用意された練習問題から、より実践的な問題で腕を磨きたいと思ったときに、データサイエンス/機械学習の世界的なコンペティション(以下、コンペ)プラットフォームであるKaggleや日本のSIGNATEを使ってみようと考えている人は少なくないと思います。そして書籍やWeb情報を基に、KaggleでTitanicコンペでSubmission(提出)をしてみた後、次はどんなコンペに参戦しようかを迷う人も少なくないのではないでしょうか?
そんな人に向けて今回は、既に終わっているコンペを厳選してKaggle初心者向けに紹介します。終了したコンペには、コンペ期間中に蓄積された「参考になるノートブック」や「Discussion情報」が豊富にあります。初心者にとっては、これらが実践力を鍛えるのに役立つのではないかと思います。
本題に入る前に、今回は連載1回目なので、この連載がどういう目的で企画されたのかを簡単に紹介させてください。その後、タスク別に数個ずつコンペをリストアップします。本稿の後半では、筆者がどのように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つほど含めました。
構造化データ
表形式データ
- 回帰
- 【Started】House Prices - Advanced Regression Techniques: 住宅価格の予測
- 【+Featured】Zillow Prize: Zillow’s Home Value Prediction (Zestimate): 住宅価格の予測
- 【Playground】New York City Taxi Fare Prediction: タクシー運賃の予測
- 【Recruitment】Allstate Claims Severity: 保険請求のための重大度の予測
- 【Playground】March Machine Learning Mania 2021 - NCAAM - Spread: NCAAバスケトーナメントの勝者の予測
- 二値分類
- 【Started】Titanic - Machine Learning from Disaster: 生存有無の予測。Kaggleで最初にやってみるコンペ
- 【Playground】Tabular Playground Series - Apr 2021: タイタニックに類似のデータ使用
- 【+Featured】Home Credit Default Risk: 貸し倒れの予測
- 【*Featured】Porto Seguro’s Safe Driver Prediction: 安全ドライバーの予測
- 多クラス分類
- 【Playground】Tabular Playground Series - Jun 2021: eコマース製品のカテゴリの予測
- 【Playground】Tabular Playground Series - May 2021: eコマース製品のカテゴリの予測
- 【+Recruitment】Two Sigma Connect: Rental Listing Inquiries: 賃貸物件の認知度(高/中/低)の予測
- 不正検知(=二値分類。※異常検知の直近のコンテストはなかった)
- 【Research】IEEE-CIS Fraud Detection: 顧客取引からの不正の検出
- 時系列(=回帰の一種)
- 【Featured】Recruit Restaurant Visitor Forecasting: 未来日付におけるレストラン訪問者数の予測
- 【Research】Web Traffic Time Series Forecasting: 未来におけるWikipediaページトラフィックの予測
- 【Playground】Tabular Playground Series - Jul 2021: 気象情報(温度と湿度)センサー値で、未来における大気汚染測定値の予測
- 【Playground】Bike Sharing Demand: 未来における共用シティバイクの使用数の予測
- 【Featured】Rossmann Store Sales: 未来におけるドラッグストア売り上げの予測
- レコメンデーション
- 【+*Featured】Santander Product Recommendation: 来月に使用する製品の予測(=推奨)
- 【+Featured】Instacart Market Basket Analysis: 次に購入する製品の予測(=推奨)
- 【+Featured】Elo Merchant Category Recommendation: 顧客購買行動に対するロイヤルティ度の予測
- 【Research】WSDM - KKBox's Music Recommendation Challenge: 履歴からお勧めの音楽の予測
非構造化データ
画像/動画
- 認識
- 【Started】Digit Recognizer: MNIST多クラス分類
- 【Playground】Kuzushiji Recognition: くずし字多クラス分類
- 【Research】Bengali.AI Handwritten Grapheme Classification: 手書きベンガル語の構成要素の分類
- 【+Featured】Human Protein Atlas Image Classification: ヒトタンパク質パターン(タンパク質/細胞ランドマーク/微小管/小胞体)
- 【Featured】SIIM-FISABIO-RSNA COVID-19 Detection: 胸部X線写真でCOVID-19感染の特定
- 【*Featured】State Farm Distracted Driver Detection: 画像でドライバーの状態を識別
- 物体検知/追跡
- 【Started】Facial Keypoints Detection: 顔画像上のキーポイント位置の検出
- 【Playground】Open Images Object Detection RVC 2020 edition: 画像上のオブジェクトの検出
- 【Featured】Open Images 2019 - Object Detection: 画像上のオブジェクトの検出
- 【Featured】Google AI Open Images - Object Detection Track: 画像上のオブジェクトの検出
- 【Featured】Lyft 3D Object Detection for Autonomous Vehicles: 自動運転車用の3Dオブジェクトの検出
- セグメンテーション
- 【Research】HuBMAP - Hacking the Kidney: 人間の腎臓組織画像で糸球体の特定
- 【Playground】Open Images Instance Segmentation RVC 2020 edition: 画像上の物体のセグメント化
- 【+Featured】TGS Salt Identification Challenge: 地表下の塩鉱床のセグメント化
- 生成(※コンペは少ない)
- 【Started】I’m Something of a Painter Myself: GANを使用してアート生成
音声
- 認識
- 【Research】Rainforest Connection Species Audio Detection: 熱帯でのサウンドスケープから鳥やカエルの種の検出
- 【Research】Freesound Audio Tagging 2019: サウンドスケープから鳥の鳴き声の特定
- 【Research】Freesound General-Purpose Audio Tagging Challenge: さまざまな実環境からの何の音か(楽器種類や家電製品など)の識別
- 【*Featured】TensorFlow Speech Recognition Challenge: 単純な音声コマンドの理解(PyTorchを使っている人もいる)
テキスト/言語
- 分類
- 【Started】Natural Language Processing with Disaster Tweets: 災害かそうでないかの識別
- 【Featured】Quora Insincere Questions Classification: 不誠実な質問の特定
- 【Featured】Toxic Comment Classification Challenge: 有害なオンラインコメントの特定
- 【Featured】Jigsaw Unintended Bias in Toxicity Classification: 有害なオンラインコメントの特定
- 【Featured】Bosch Production Line Performance: 質問のペアが同じ意図かの識別
- 感情分析(=分類の一種)
- 【Started】Bag of Words Meets Bags of Popcorn: 映画レビューの肯定否定感情の予測(Word2Vec使用)
- 【Playground】Sentiment Analysis on Movie Reviews: 映画レビューの肯定否定感情の予測
- エンティティ抽出
- 【InClass】Shopee Code League - Address Elements Extraction: テキストから住所部分の抽出
- 【Recruitment】Facebook Recruiting III - Keyword Extraction: 質問テキストからキーワードとタグの特定
- 【Featured】Tweet Sentiment Extraction: ツイートから感情ラベルを最もよくサポートする単語やフレーズを抽出
- 質問応答(=生成の一種)
- 【Featured】Google QUEST Q&A Labeling: 質問に対する回答の生成
- 【Featured】TensorFlow 2.0 Question Answering: Wikipedia記事への質問に対する回答の生成(PyTorchを使っている人もいる)
- テキスト変換(=生成の一種)
- 【Research】Text Normalization Challenge - English Language: 英語テキストを書き言葉から話し言葉に変換
ゲーム/ロボット
- 強化学習(※ほぼない)
- 【Featured】Google Research Football with Manchester City F.C.: サッカーをプレイできるAIエージェントの作成
以上、参戦してみたいコンペはあったでしょうか。こういったもので経験を積んでから、本当のコンペに参加して活躍できるようになりたいですね。
あくまで筆者が調べて選んだ範囲なので、初心者にもっと良いコンペもあるかもしれません。さらにコンペを探したい人は下記のリンク先から探してみてください。
本題は以上で、以降はおまけコンテンツとして、筆者が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日ほど修了が遅れました……。ちょっと日程バランスが悪いと思います。
この3講座の内容を4xGM(=Competitions/Datasets/Notebooks/Discussionの全4カテゴリで最上位のGrandmasterを獲得した人)のAbhishek Thakur氏(『Kaggle Grandmasterに学ぶ 機械学習 実践アプローチ』の原著者)が解説する動画も毎日公開されました(下記のリンク先)。自分が行ったSubmissionよりも高い精度のSubmissionが動画の中で毎回出るので落ち込みますね(苦笑)。英語ですがオススメです。特に演習でつまずいている人は助けになると思います。
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翻訳を実行してください。")
})();
これでコード部分を避けて翻訳してくれるようになります。
ただし、演習問題で使うKaggleノートブックは[日本語に翻訳]にできません。翻訳するには、図3のようにいったん保存してからViewerで開く必要があります。
また、「日本語訳 <演習名>」で検索すると翻訳したノートブックを公開してくれている人もいるので、そういうのを参照するのもありです。
3. 世界中の人はもっと気楽にコミュニケーションしている
英語の話で脱線しましたが、30 Days of MLに話を戻します。このプログラムが良いのは、Kaggle初心者同士の交流の場をDiscord上に用意してくれていることです。
第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本があります。筆者の場合、以下の書籍を所有しており、それぞれに良さを感じています。ひと言コメントを書いておきますが、本屋さんなどで手に取って好みに合うモノを選んだ方がよいと思います。
- 『PythonではじめるKaggleスタートブック』: 薄い本でありながら、要所を押さえた内容が良い。初めてKaggleをしたい人向け
- 『Pythonで動かして学ぶ!Kaggleデータ分析入門』: ちょうど上記の3講座に合致する内容。House Pricesコンペの解説があるのが良い
- 『Kaggleのチュートリアル第5版』: Kindle Unlimitedで0円で読める。これを読みながらKaggleを始めるのもあり
- 『Kaggleで勝つデータ分析の技術』: もうバイブルみたいな本。安定感があり必要なことがちゃんと載っている
- 『Kaggle Grandmasterに学ぶ 機械学習 実践アプローチ』: 説明は短いが分かりやすくコードが多い印象。画像分類やテキスト分類など幅広い
- 『Kaggleコンペティション チャレンジブック』: 音声認識コンペやレコメンデーションなど幅広いテーマでコンペの実践方法が学べる
『Kaggle Grandmasterに学ぶ……』本は、英語の原著であれば、著者のGitHubリポジトリからPDFをダウンロードして無料で読むことも可能です。
また私の場合、Kaggleを始めるに当たり進め方などをネットで検索したりして情報収集して、さまざまな良いコンテンツに巡り会えました。その中でも、手前味噌(みそ)になりますが、
という連載の記事は「確かに、確かに」と納得できること、参考になることが多かったです。オススメなのでぜひ一読してみてください。リクルート所属のKaggle Master 4人が執筆しています。
5. Kaggle日記というアイデア
ネット検索した中で「これやってみよう」と思ったのが、Kaggle日記です。
Kaggleをやる上で誰しも何らかの作業ログが残るようにしていると思います。そうしないと、どのノートブックで何をしたかは確実に分からなくなっていくと思うからです。作業ログの付け方は、やりやすいように自由に書けばよいし、ネット上に公開する必要もないと思います。この記事が良いのは、「Kaggle日記」という名称を与えて、作業ログの存在を分かりやすくしたことだと思いました。
今回の連載記事を書く手前、筆者自身が書いたものをGitHubリポジトリに一部公開してみました。ご参考まで。
Kaggleを始めて「これが役に立った」という内容はもっとあるのですが、既にそこそこ記事が長くなってきたので、今回はここまでとします。紹介できなかった話は、今後の記事の中でいつか紹介できればと考えています。
次回の私からの記事は、私の予想以上にきれいに進められたと思う、Kaggle公式講座にひも付いているコンペ「Housing Prices Competition for Kaggle Learn Users」の参戦記を記事にする予定です。お楽しみに。
Copyright© Digital Advantage Corp. All Rights Reserved.