<実践>HomeCredit作業記録(2) - LightGBMを使って全特徴量を突っ込んだ
Kaggle挑戦中です!
Home Credit Default Risk | Kaggle
今日やったこと
LightGBMで、application_{train/test}.csvの全パラメータを突っ込んで
- 特徴の重要さ(feature importance)を見る
- 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以上の特徴量の中でどれが大事だったか。
この図を見ると、以下の特徴量が大事だということがわかります。
- 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ファイルくらいあります。
次はそのファイルも使って学習させてみたいと思います。