僕らのKaggle奮闘記~Home Credit Default Risk編~#1

本記事では、参加中のkaggleコンペ~Home Credit Default Risk~についての1stミーティング(2018/05/25)の内容を記しています。本記事は、[僕らのKaggle奮闘記~Home Credit Default Risk編~#0](https://qiita.com/sakigakeman/items/7483973d883b0dd86f42)の続きとなります。

今回Kaggleにチームで参加するということで（二人ですが笑）、データ分析力だけでなくチームでのプロジェクトマネジメント力もトレインできるのではないかと考えました。そこで本記事では、データ分析をどのように行ったかだけではなく、チームプロジェクトを行う上でどのようなことに留意したかについても書き留めようと思います。
###参加コンペ
Home Credit Default Risk
既存の様々なデータから顧客の借金返済能力を予測するモデルの作成

#ミーティングトピックの設定
まず一番初めに行ったことは、ミーティングトピックの設定です。そのミーティングで話し合うことのTo do listを最初に設定することによって、ミーティングの目的を明確にします。
今回は初回ということもあり、そのTo do listを以下のようにしました。

①コンペ目標の確認
②目標達成までのフロー設定
③次回までにやってくるタスクの分担

#コンペ目標の確認
チームで何かプロジェクトに取り組む上で最も大切なことは、最終目標の共有だと思います。プロジェクトスタート時はまだ詳細を把握していないのでこの最終目標はそこまで具体化明確化しすぎる必要はありませんが、ある程度の幅で目標を設定することによって、チームとして何をすべきかのプロセスが見えやすくなると考えます。

今回僕たちが設定した最終目標が以下のものです。
**the ideal goal：『goldランク以上かつscore0.79以上』**
the minimum goal:『上位20%以上かつscore0.78以上』

#目標達成までのフローの確認
目標を設定したので、次はKaggleでのデータ分析ということを視野に入れて目標達成までのフローの大枠を作ります。この際、まずはアウトラインから作っていってその後で下の階層を設定していくというやり方が望ましいと思います。

1. 下準備
    - [ ] チーム内環境の統一
    - [ ] Kaggle参加コンペからのデータダウンロード
    - [ ] pandasを利用してデータフレームに入れる
    - [ ] データの変数を知る(HomeCredit_columns_description.csv)
2. データ加工
    - [ ] データを視覚化してイメージを掴む
        - [ ] 変数同士のヒストグラムなど
        - [ ] 欠損値の確認
        - [ ] discussion boardでもチェック
    - [ ] 視覚化された情報を元にpredict用のデータフレームを作成
3. Discussion boardから参考になりそうなものをピックアップして理解する
4. Predict
    - [ ] スコア計算手法のチェック
    - [ ] モデル作成(SVM, NNなど関数として全部作る)
    - [ ] Implement
    - [ ] パラメータチューニング
    - [ ] モデル選択(ベストスコアを持ってるものを抽出)
5. PDCAを回す
    - [ ] 出力をボードに提出しスコアのチェック
    - [ ] Kernelで他チーム情報のチェック
    - [ ] スコアの解釈
    - [ ] 4.に戻る

暫定の大枠をこのように定めました。細かいところは適宜変更していく予定ですが、大筋このように進めていこうと思います。そして当初のTo do listであればここで終了なのですが、今回は時間が余ったのでできる部分までやってしまうことになりました。

#下準備
それでは、まず分析するといってもそのためにはデータを入手して整形しなければなりません。そして今回はチーム作業なので（繰り返し二人ですが笑）、環境を統一しておくことも大切です。
###チーム内環境の統一
環境をあらかじめ統一しておくことで、情報の共有や整理を行いやすくします。

・言語はpythonを使用
・分析作業はjupyter notebookを利用
・ルールの設定
・ミーティング内容はgoogle docsに書き留める
###Kaggle参加コンペからのデータダウンロード
それでは早速データをダウンロードしていきましょう。Kaggleはコンペティションに参加すればデータを直接ダウンロードできるのですが、公式apiがリリースされているので、それを使ってみました。

```ruby:data_download.py
$ pip install kaggle #kaggleのインストール
$ mkdir -p ~/.kaggle #homeディレクトリの下に.kaggleの新規ディレクトリを作成します

#ここでkaggleにてAPI Token作成しjsonファイルを取得します(下図)

$ mv ~/Downloads/kaggle.json ~/.kaggle #取得したjsonファイルを先ほど作成した.kaggleディレクトリに移動させます
$ chmod 600 ~/.kaggle/kaggle.json #kaggle.jsonのパーミッションを600にする(これはなぜだか分かりませんがその必要があるようです)
$ kaggle competitions download -c home-credit-default-risk #-c以降にコンペ名を打ち込むことでデータをダウンロードすることが出来ます
```
これでデータが先ほど作成した/.kaggle下に入ります。ディレクトリ名の先頭が**. **なのでFinderには表示されませんが、Finderにてcommand + Shift + Gを押してパスを入力すれば確認することができます。

また、以下はAPI Token作成時のキャプチャーです。[kaggle-api kaggleコマンドの使い方](https://qiita.com/uni-3/items/f1fdbeeddd08ca22c80f)からお借りしました。

<img width="773" alt="スクリーンショット 2018-05-26 15.14.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/145067/a781239f-1cd6-fca6-e656-ed1372225e1d.png">

###pandasを利用してデータフレームに入れる
データを読み込んだので、そのデータをそれぞれデータフレームに入れてしまいましょう。
今回はファイルが10個あり、csvファイルがzip圧縮されたものが9つ、csvファイルそのままのものが1つありました。

```ruby:df_base.py
import pandas as pd

application_test = pd.read_csv("~/.kaggle/competitions/home-credit-default-risk/application_test.csv.zip", compression='zip')
application_train = pd.read_csv("~/.kaggle/competitions/home-credit-default-risk/application_train.csv.zip", compression='zip')
bureau_balance = pd.read_csv("~/.kaggle/competitions/home-credit-default-risk/bureau_balance.csv.zip", compression='zip')
bureau = pd.read_csv("~/.kaggle/competitions/home-credit-default-risk/bureau.csv.zip", compression='zip')
credit_card_balance = pd.read_csv("~/.kaggle/competitions/home-credit-default-risk/credit_card_balance.csv.zip", compression='zip')
installments_payments = pd.read_csv("~/.kaggle/competitions/home-credit-default-risk/credit_card_balance.csv.zip", compression='zip')
POS_CASH_balance = pd.read_csv("~/.kaggle/competitions/home-credit-default-risk/POS_CASH_balance.csv.zip", compression='zip')
previous_application = pd.read_csv("~/.kaggle/competitions/home-credit-default-risk/previous_application.csv.zip", compression='zip')  
sample_submission = pd.read_csv("~/.kaggle/competitions/home-credit-default-risk/sample_submission.csv.zip", compression='zip')
HomeCredit_columns_description = pd.read_csv("~/.kaggle/competitions/home-credit-default-risk/HomeCredit_columns_description.csv")
```

ここで注意したのは、データフレーム名の設定です。繰り返しですが今回はチーム作業のため、データフレームの名前や新しく作った変数の名前などは揃えた方が良いと考えました。なので、データフレーム名にはパスの最後の部分をそのまま使用しています。

そしてあまり大きな進捗はなかったのですが、時間となったので1stミーティングはここで終了としました。

#現在の進捗
1. 下準備
    - [x] チーム内環境の統一
    - [x] Kaggle参加コンペからのデータダウンロード
    - [x] pandasを利用してデータフレームに入れる
    - [ ] データの変数を知る(HomeCredit_columns_description.csv)
2. データ加工
    - [ ] データを視覚化してイメージを掴む
        - [ ] 変数同士のヒストグラムなど
        - [ ] 欠損値の確認
        - [ ] discussion boardでもチェック
    - [ ] 視覚化された情報を元にpredict用のデータフレームを作成
3. Discussion boardから参考になりそうなものをピックアップして理解する
4. Predict
    - [ ] スコア計算手法のチェック
    - [ ] モデル作成(SVM, NNなど関数として全部作る)
    - [ ] Implement
    - [ ] パラメータチューニング
    - [ ] モデル選択(ベストスコアを持ってるものを抽出)
5. PDCAを回す
    - [ ] 出力をボードに提出しスコアのチェック
    - [ ] Kernelで他チーム情報のチェック
    - [ ] スコアの解釈
    - [ ] 4.に戻る


#次回までにやってくるタスク
・データの変数の確認
・最低５つ視覚化して特徴付けを行っておく（図式化必須）

2ndミーティングは2018/06/01です。