<実践>HomeCredit作業記録(2) - LightGBMを使って全特徴量を突っ込んだ

Kaggle挑戦中です!
Home Credit Default Risk | Kaggle

今日やったこと

LightGBMで、application_{train/test}.csvの全パラメータを突っ込んで

  1. 特徴の重要さ(feature importance)を見る
  2. LightGBMの予想を投稿する

そのために、

  • LightBGMの仕様調査
  • データの予想を投稿
    • データの前処理
    • train/predict

をやりました。

LightBGMの仕様調査

勾配ブースティングのLightGBMのパラメタについて調べました。
www.analyticsvidhya.com
rautaku.hatenablog.com

ここで書いてるパラメータを指定しても、「そないなパラメータあらへんで!」といわれてしまいます。
もう少し調査が必要そうです。

データの前処理

HomeCreditRisk : Extensive EDA + Baseline Model JP | Kaggle 和訳していただいた神Kernelをパクって実装。
このカーネルにはなかったのですが、「カテゴリ変数」をわかるようにカラム名をつけてみました。

train/predict

ハイパーパラメータはこんな感じ(チューニングはしてない)

params = {'task': 'train',
          'boosting_type': 'gbdt',
          'objective': 'binary',
          'metric': 'auc',
          'learning_rate': 0.01,
          'n_estimators': 50,
          'max_depth': 8,
          'subsample': 0.8,
          'verbose': 1,
          'num_iteration': 3000}

あとは、カテゴリ変数のカラム名を取得する関数を書いて

def _get_categorical_features(df):
    feats = [col for col in list(df.columns) if col[:9] == "category_"]
    return feats
data_cat = _get_categorical_features(X)

訓練時に、カテゴリ変数はこれだよーって教えてあげます。
OneHotEncodeとかしなくてよいから便利!(実際どういう仕組みなのか全くわからないし、どこに載ってるんだろう)

model = lgb.train(params,
                  lgb_train,
                  categorical_feature=data_cat,
                  valid_sets=lgb_test,
                  early_stopping_rounds=150,
                  verbose_eval=100)

feature_importanceも出してみました。
判定にあたり、100以上の特徴量の中でどれが大事だったか。 f:id:kurupical:20180528215509p:plain

この図を見ると、以下の特徴量が大事だということがわかります。

  • ORGANAIZATION_TYPE: どういった組織で働いてるか(ex. school/goverment...)
  • EXT_SOURCE: 別審査機関のクレジットスコア
  • DAYS_BIRCH: 年齢(生まれてから経過した日)

こういった分析は、すでにKaggleのDiscussion・Kernelで行われています。
しかし、そこでは「ORGANAIZATION_TYPE」が大事だとは書かれていませんでした。
自分の手で動かしてやってみるのは大事ですね!

score: 0.629→0.706
上位90%→上位85%(859位/1006)

signateは最初の投稿で結構いい順位についたけど、Kaggleはまだまだ全然駄目ですね・・・。

今回は1ファイルだけを使って予想しましたが、実はあと4ファイルくらいあります。
次はそのファイルも使って学習させてみたいと思います。