Kaggleコンペの参加チュートリアル（１．参加編）

# はじめに
- 育休中のエンジニアの私が、自宅でのウォームアップと勉強を兼ねてKaggleコンペに参加してみることにしたので、その記録を残したいと思う。
- 今回は、Kaggleの概略を知り、Begginer向けコンペへ参加することで、基本的な参加方法や使い方を理解することを目指す。

# Kaggleについて
- まずは、Kaggleについて基本的な事項を確認する。

## Kaggleとは何か？
- 世界中から、約40万人のデータサイエンティスト・機械学習エンジニアが集うコミュニティである。
- 特に「Competetion」（コンペ）が有名である。これは、
    - 企業や政府などが、課題を設定してデータを提供し、機械学習アルゴリズムを開発させて精度を競わせる。
    - 上位３チーム（最大５名まででチーム参戦可能。もちろん１名でもOK。）などに賞金が与えられる。
    - 入賞者は、賞金を受け取る代わりに開発したソースコードなどの権利を依頼元に委譲する。
    - 参加は無料。
    - 上位数十％の成績を残すと、その順位に応じて金・銀・銅メダルが与えられる。
    - 条件を満たすだけのメダルを集めれば、GrandMasterやMasterなどの称号が貰える（大変名誉であり、転職時などに技術力のアピールにもなる。）<br>というものである。

## Kernelについて
- Kaggleのコンペの特徴として、「Kernel」（カーネル）というものがある。
- そのコンペに参加するユーザが、開発したモデルやソースコード（説明つきの場合もあり）を公表する場所である。
- 初心者は、この「Kernel」で公表されたコードを見たり、触ったり、改良したりして学ぶことができる。
- 実際にコンペに挑戦してみるとわかるが、自分の思いつくアプローチだけでは精度の限界に（結構早く）ぶち当たる。
- 他の機械学習コンペと比較した時、「Kernel」を見て上級者のアプローチや工夫点を学べるのが、Kaggleの最大の強みでありメリットと言えると思う。

## Kaggleコンペのカテゴリ
- Kaggleのコンペには、難易度別に以下の7つのカテゴリがある。上にいくほど難易度が易しい（5,6は別枠なので除く）。
    1. Getting Started
        - Kaggleにはじめて参加する初心者向け。半永久的に開催されており、賞金などはない。
        - タイタニックの生存予測、数字認識など。
    2. Playground
        - Getting Startedを卒業した初心者が楽しめるレベルの課題。賞金はなし、もしくは少額。
        - 犬猫分類など。
    3. Featured
        - 最もポピュラーで参加者が多い。商業目的の少し難しい課題で、それなりの額の賞金がつくものが多い。
        - 過去にメルカリの価格予想チャレンジなど。
    4. Research
        - Featuredに次いでポピュラーなカテゴリ。より実験的な問題設定で、基本賞金はなし。
        - Googleのランドマーク検索チャレンジなど。
    5. Recruitment
        - 企業の出す課題に挑戦し、主催者に履歴書を送る権利を得られるコンペ。入賞賞品は基本的に面接権。
    6. Annual
        - Kaggleが定期的に開催するコンペ
    7. Limited Participation
        - めったに行われない、privateまたは招待制で開催されるコンペ。
        - Master、GrandMasterのみが参加できるものなど。
- 公式の説明は[こちら](https://www.kaggle.com/docs/competitions#common-competition-types)

# Kaggleへの参加登録
- 早速、[Kaggle公式トップページ](https://www.kaggle.com/)の右上「Register」からユーザ登録を行う。
- 今回は、メールアドレスから登録した。
- 登録自体はとても簡単で、数ステップで完了する。<br>
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1047932/a6613f71-2c30-5318-629f-ca2675b54ea2.png)

# Kaggleのコンペに参加
## 参加するコンペの選択
- 「Competition」のページを開くと、「タイタニックの生存予測」をおすすめされるので、今回はチュートリアルとしてこれにTryする。
- ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1047932/1b3c0df8-15db-2871-c96f-4489b2c9bc6f.png)

## ルールの確認
- コンペには、各々で定められた「Rules」（ルール）がある。
- 「Join」（参加）にあたって、まずはこのルールの確認を求められるため、内容を読む。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1047932/924a5e41-695b-0f62-33b0-776f66a64e6b.png)
- 今回のコンペでは、ざっと
    - 1人1アカウントであること（複数アカウントでのログインは不可）
    - チーム外へのコードやデータのシェアは禁止。ただし、フォーラムで全参加者が閲覧できる形になっていればOK。
    - チームのMerge（合併）はOK。
    - チームのSize（人数）に制限はなし。
    - 1日の投稿回数は10回まで。最後のJudge用に最大5つの提出が可能。
    - このコンペは、機械学習への参加を支援するもの。タイタニックのデータセットはインターネットで公開されているが、答えを調べると挑戦する意味がなくなってしまうので、それはやめようね。<br>という内容。

## データの概要確認
- コンペに参加したら、まずはデータの確認。
- 学習データセット（train.csv）とテストデータセット（test.csv）が与えられる。
    - 学習データセットには、Ground Truth（正解ラベル。今回であれば、各乗客のdead or alive）がついている。特徴量は与えられたもののほか、特徴量エンジニアリングで新しく生成してもOK。
    - 評価データセットには、正解ラベルはなし。これに対する推論結果を投稿し、精度を競う。
- この他、投稿ファイルのサンプル（gender_submission.csv）も与えられる。
<br><br>
- 次に、肝心な各データの内容を確認する。<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1047932/0c14acb2-4da8-7283-b64d-5744b6d39ff1.png)

- 左から、生存フラグ/チケットのclass/性別/年齢/兄弟・配偶者情報/親子情報/運賃/キャビン番号/乗車した港 である。

## Goal, Metricの確認
- コンペにおいて、評価指標は重要である。
- 一口に分類問題といっても、Accuracyで評価するか、F1スコアで評価するか、などで求めるべき性能が変わってくるためである。
- 今回は、Accuracyで評価される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1047932/c8d4a618-9307-61cf-0b04-7c7ef296e2bb.png)


## LeaderBoardの確認
- 本当はこのタイミングで見る必要はないが、他のビギナーさん達の実力が気になるので、チラリと「LeaderBoard」を確認する。
- 「LeaderBoard」は、自分を含む、全参加者のランキングとスコアが表示される。
- 「Public LeaderBoard」は、testデータセットに対する精度。「Private LeaderBoard」は、非公表のtestデータセットに対する精度である。コンペでは、最終的にこの「Private LeaderBoard」での精度を競うことになる。
- 今回の課題はどうやら簡単らしく、Accuracy1.0（正解率100%）の参加者がたくさんいるようだ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1047932/e1e412d4-1638-b1ce-5fce-740d299da908.png)


## データのダウンロード
- 今回は普通にブラウザからダウンロード。
- [Kaggle API](https://github.com/Kaggle/kaggle-api)も提供されており、これを使うとコマンド1行でDLできる。

```
kaggle competitions download -c titanic
```

# 最後に
- キリが良いので、今回はここまで！
- 次回は「Kaggleコンペの参加チュートリアル（２．前処理～モデル作成編）」で、実際にダウンロードしたデータを学習させる。