taka5hi’s blog

統計と機械学習の話題をメインに記事を書いています。

Kaggleへの初参加

2018年も残すところわずかとなりました。
今年やり残したことを一つでも減らそうと、以前より挑戦したかったKaggleに挑戦してみました。
初めてコンペに参加して、結果を提出するところまでをまとめましたので、これからKaggleに挑戦しようと思っている方の参考になればうれしいです。


Kaggleとは

Kaggleは企業や研究者がデータを投稿し、データサイエンティストがその最適モデルを競うコンペが行われるサイトです。
豊富なデータセットが公開されていることから、データセットの入手元として利用されている方も多いのではないでしょうか。

コンペなどというと、とても敷居が高く感じてしまいますが、実はこの記事を読んでいただければわかるように、参加するだけであれば簡単です。
この記事に書いてある程度の前知識があれば困ることは少ないと思います。
以下は、実際にサイトにアカウントを登録して初めてのコンペで結果を提出するまでの流れです。

初めてのKaggle

1.アカウント作成する

まずはKaggleのサイトにアクセスし、アカウント登録します。
https://www.kaggle.com/

f:id:taka5hi:20181230170558p:plain
特に難しいことはないので、画面の指示従ってください。

2.Kaggleの主なコンテンツを知る

f:id:taka5hi:20181230170805p:plain
キャプチャのグローバルメニューに表示されている通り、サイトの主なコンテンツは以下の通りです。

  • Competitions・・・コンペ情報
  • Datasets ... データセット
  • Kernels ... アルゴリズムやコードを共有するところ(JupyterNotebook形式で記載されているものが多い)
  • Discussion ... 議論の場/フォーラム
  • Learn ... 学習コンテンツ

CompetitionsとKernelsは、Kaggleの特徴的なコンテンツなので最初は分かりにくいかもしれません。これらは、後の説明でも登場します。

3.参加するコンペを探す

早速ですが、コンペの情報を見てみましょう。
メニューのCompetitionsからコンペ情報の一覧を確認することができます。

f:id:taka5hi:20181230170958p:plain

コンペはカテゴリー分けされています。
まずは、初心者向けの以下の2つのカテゴリーを覚えておけばよいでしょう。

  • Getting started ・・・ 初心者向けチュートリアル
  • Playground ・・・ これも初心者向けのコンペ。Getting startedの次にやるようなものという位置づけっぽい。

企業が主催する本物(?)のコンペは期間が設けられていますが、これらのカテゴリーのコンペはいつでも参加可能です。
その他カテゴリーについては、下記のページが詳しくまとめてくれていました。


今回はチュートリアルとして、まずはGetting startedから「Digit Recognizer」というコンペに参加することにします。
https://www.kaggle.com/c/digit-recognizer

内容的には、いわゆるMNISTを使った文字認識です。

4.コンペの詳細情報を確認して参加登録する

コンペの詳細ページを確認してみましょう。
f:id:taka5hi:20181230171134p:plain

Overview

コンペの情報がもろもろ記載されています。
コンペ毎に記載されている情報は異なりますが、だいたい下記のようなことが記載されています。

  • Description ・・・ コンペの詳細
  • Evaluation ・・・ 提出された結果の評価方法
  • Prizes ・・・ 賞金に関する情報
  • Timeline ・・・ コンペのスケジュール(各種期限)

今回参加するDigit Recognizerはチュートリアル的なコンペになるので、PrizesやTimelineの記載はなく、代わりにTutorialという初学者向けの記載があります。
提出した結果がどうやって評価されるのかや提出フォーマットなどが記載されているEvaluationは必ず確認しましょう。

Data

コンペに使用されるデータセットとその説明です。
ほとんどのコンペで、データセットはtrainとtestという2つに分けて提供されています。
trainを使って学習をさせて、testに対する結果を提出するというケースが多いようです。

Kernels

このコンペに関係するKernelsを見ることができます。上でも記載した通り、Kernelsではコードや結果が公開されています。
ここを見ているだけでもめちゃくちゃ勉強になります。

Digit RecognizerのKernelsをみると、ほとんどがCNNを使ったものかPCA(主成分分析)を使った手法のようです。

Discussion

このコンペに関係するDiscussionを見ることができます。

Leaderboard

参加者のランキングです。

Rules

ルールです。ちゃんと確認しましょう。

以上の内容を確認して、参加を決意したら画面上の「Join Competition」から参加します。

5.提出する推論結果を作成する

提供されたデータセットを使って、提出用の推論結果を作成します。
Digit Recognizerの場合、下記のようなフォーマットのCSVファイルで提出します。

ImageId,Label
1,0
2,0
3,0

この手順の詳細は各自の環境で違うので割愛します。
機械学習を実装できる環境を構築して作業してください。

(ちなみに、私はコンペに参加の流れを把握するのが目的だったので、Kernelsの内容をほぼ流用したkerasによるCNN実装で推論結果を作成しました。)

6.結果を提出する

f:id:taka5hi:20181230171514p:plain
コンペの詳細ページの「Submit Predictions」から提出が行えます。

f:id:taka5hi:20181230171747p:plain

提出もとっても簡単で、推論結果のファイルと概要を記載するだけ。
「Make Submission」をすると、その場で提出した結果が評価されてランキングが表示されます。

f:id:taka5hi:20181230171942p:plain
(画面の下の方にはランキングも表示されます。)

Digit Recognizerでは、1日5回までなら結果を提出することができるとのこと。実際の競技では
提出→モデル改良→再提出→モデル改良→・・・
のようなループで作業することになると思います。

最後に

なんとなく参加できずにいたKaggleですが、いざやってみると参加すること自体はほんとに簡単でした。
今回は、チュートリアル的なコンペへの参加になりましたが、せっかくコンペの流れを把握できたので次は競技に参加してみたいと思います。

最後ですが、KaggleからKaggle APIというコマンドラインツールが提供されているようです。
https://github.com/Kaggle/kaggle-api

リンク先にある通り、セットアップも簡単で、以下の作業だけで使えるようになります。

  • pipにてインストール (pip install kaggle)
  • kaggleサイトからダウンロードできるAPI Tokenのセットアップ

(詳細はgithubのページを参照のこと)

コンペへの参加登録や結果の提出、データセットの取得などがコマンドラインからできるようになるので、本格的にKaggleに挑戦される方は入れておくとよいかと思います。