Slide 1

Slide 1 text

Dec / 1 / 2018 5th Kaggle meetup tokyo @ indeed Home Credit Default Risk 2nd place solutions ikiri_DS

Slide 2

Slide 2 text

COMPETITION OUTLINE • HOME CREDIT は消費者金融で、 10 ヶ国でビジネスを行っている • 取扱金融商品は、 - Point of sale (POS) loans - Credit cards - Revolving loans - Cash loans など多岐に渡り、これらの取引履歴が データにでてくる http://www.homecredit.net/about-us/products.aspx http://www.homecredit.net/about-us.aspx 1. モデリングすべき問題は 「顧客の default risk」 2. default の定義は、 返済できない場合 及び 一定期間以上返済できない場合 3. 評価指標は AUC 4. (ネタバレ) train と test の split は、 時系列 + プロジェクトベース のものだった(HC DS談)

Slide 3

Slide 3 text

RESULT • May/18/2018 ~ Aug/30/2018 • 7198 Teams 8487 Competitors • A Biggest competition ever public : 2nd 0.81241 private : 2nd 0.80561 team : ikiri_DS 2nd place solution in kaggle forum (discussion) Link

Slide 4

Slide 4 text

TIMELINE reference : ireko timeline summary 7/2 0.801 21 th 7/24 0.805 18 th 7/26 0.806 12 th ikiri_DS 7/25 0.805 19 th ikiri sensor 8/5 0.807 9 th 8/8 0.808 8 th 8/13 0.808 7 th 8/16 0.809 5 th 8/21 0.810 2 nd 8/22 0.810 2 nd 8/27 0.810 3 rd 8/29 0.811 2 nd 8/30 0.812 2 nd

Slide 5

Slide 5 text

How to manage difference of train and test ? Blending 3 different type of blended outputs RK : balanced ( CV ~ Public ) Maxwell : slightly overfitting with train data ( CV > Public ) Takuoko team : slightly underfitting with train data ( CV < Public )

Slide 6

Slide 6 text

ONODERA part

Slide 7

Slide 7 text

DATA

Slide 8

Slide 8 text

Feature Engineering Predict Each Previous

Slide 9

Slide 9 text

Feature Engineering These features boosted 0.80101 to 0.80406(Δ0.00305) on both CV and Public. But regarding Private, only 0.79673 to 0.79737(Δ0.00064)

Slide 10

Slide 10 text

Interesting Findings POS_CASH is extremely dirty. Cleaning up these, boosted 0.801 -> 0.802 on both CV and LB

Slide 11

Slide 11 text

Interesting Findings SK_ID_CURR==100041 and SK_ID_CURR==181102 is same user. Because theirs diff between date features are same. SK_ID_CURR==181102 is ahead of SK_ID_CURR==100041. Also they have same loans, but different loans as well.

Slide 12

Slide 12 text

Nejumi part

Slide 13

Slide 13 text

Interest Rate • Previousには元本、月々の返済金額、返済期間の情報があるため、 単位期間あたりの利率を算出することができる。 • この利率はpreviousの中では極めてimportanceが高い。 • 利率はHome Credit社の現有モデルで算出された一種の metafeatureであり、コンペ内で直接アクセスできない情報 も含んでいるためだろう。 • しかし、肝心のcurrentに返済期間の情報がない。 • 何とか算出できればメチャ効くはずなのに!

Slide 14

Slide 14 text

Interest Rate X_train y_train X_test Previous Current • Currentの返済期間はPreviousを学習データとしたモデル で予測が可能! predict

Slide 15

Slide 15 text

Interest Rate Estimator RMSE 5CV R^2 5CV DecisionTree 0.6229 0.9982 RandomForest 1.0137 0.9952 XGBoost 1.2190 0.9930 LightGBM 1.2883 0.9922 • 興味深い事に、シンプルなDecision TreeがLGBMやXGBoost、RF をoutperformしている。 • これは返済回数が6ヶ月刻み or キリのいい期間しかとらない離散値 であるためと考えている。 • 返済期間の予測値が得られたら、元利金等返済の式を用いて月あたり の利率を求めることができる。

Slide 16

Slide 16 text

Small Finding • DAYS_DECISIONをビニングした上でinterest rateの各ビンの平 均値をプロットすると、train/test間に150-200 days程度の位相 差が認められる。Train/testはtime splitと推定できる。 • 実際、Winner’s Callで期間6 monthのtime splitであることが Home Credit社から明かされ、ビンゴだった。

Slide 17

Slide 17 text

NNモデルの残差への回帰モデル • toshさん、terekaさんのNNの残差にLGBMでfit した。 • お二人のNNと私のLGBMのアンサンブルの一種と 見做せるが、やっていることの意味が明確なために stackingほど不安がない。 • Averagingでは物足りないが、time splitに stackingはキツいだろうと選択したが、finding が間接的に役立ったと考えている。 • その他、TargetEncodingをTARGETに対してで なくEXT_SOURCEに対して行うなど、time split を前提にコンサバなアクションを選択した。 • 実際、結果論だがnejumiパートのスコアはpublic の割にprivateが良い。 CV0.80742: , Public: 0.80779 (31th), Private: 0.80306 (15th)

Slide 18

Slide 18 text

RK part

Slide 19

Slide 19 text

Feature [1] 特徴量総当たり探索 統計値(mean, max, min, var 等)を、カテゴリや時間で区切られたデータごとに算出 (例:DAYS_CREDIT<1 year かつNAME_CONTRACT_TYPE=Consumer loansの、〜の平均) それらの特徴をLightGBMに入れ、importanceが上位の特徴を機械的に採用。 [2] 次元削減 PCA, UMAPなどを特徴セットに対して使用。 application featureのみに特徴を絞って次元削減したり、 EXT_SOURCEに絞って使用したりするのも有効だった。 UMAP output on only_application features with mean imputation

Slide 20

Slide 20 text

Feature Base Feature Set Base + parameter tuning CV 0.8052 0.8057 (+0.0005) Private LB 0.7978 0.7993 (+0.0016)

Slide 21

Slide 21 text

Feature [3] Genetic ProgrammingのKenrel流用 https://www.kaggle.com/scirpus/hybrid-jeepy-and-lgb-ii CV, LB共に改善が見られた。Blending材料としても優秀だった。 だが、作成方法は完全にブラックボックスだったので、Leakが怖かった。 そのため最終submitには、これらを使用したものと使用していないものを選択した。

Slide 22

Slide 22 text

Feature Base Feature Set Base + parameter tuning CV 0.8052 0.8065 (+0.0016) Private LB 0.7978 0.7990 (+0.0012)

Slide 23

Slide 23 text

Modelling 全体的に、過学習を防止するのが有効に働く傾向が強かった。 ・num_leavesやmax_depthを大きくするとすぐ過学習する ・LightGBMのDart (=Dropoutさせながら木を作る手法) が有効 ・目的関数に対するペナルティ(Lp norm)を大きくすると改善傾向 など。 パラメータ調整のスコアへ与える影響は、(主観的には)他コンペより大きかった。 ※with large cat_smooth(10->100) and small colsample_bytree(0.8->0.1) Base Feature Set Base + parameter tuning CV 0.8052 0.8062 (+0.0010) Private LB 0.7978 0.7988 (+0.0010)

Slide 24

Slide 24 text

tereka Part

Slide 25

Slide 25 text

自己紹介 • 山本 大輝(@tereka114) • Acroquest Technology株式会社 – 画像認識、自然言語処理 – DNN使う業務が多い。 • Kaggle Master – https://www.kaggle.com/tereka • のんびりしているエンジニアの日記 – http://nonbiri-tereka.hatenablog.com/ • 寄稿記事 – Interface 3月号 ラズパイにON!Google人工知能 – Interface 12月号 人工知能ウルトラ大百科 25

Slide 26

Slide 26 text

概要 モデルは次の2つを使用した。 ・Convolutional Neural Network(CNN) ・Recurrent Neural Network(RNN) 特徴量は次の2種類を利用した。 ・Onodera Feature(説明は省略) ・application feature(自前で作っていた特徴・工夫ほぼなし) ・1-Nとなるテーブルを用いた時系列形式の入力(後ほど、説明します。) CNN/RNNを使って、時系列特徴量を獲得する。

Slide 27

Slide 27 text

コンセプト ・サブテーブルの時系列特徴量を自動的にNeural Networkで獲得する。 他の人が行っている集約して特徴量を作る方法と差分を付けたい。 ⇒最後のアンサンブルの効果を狙った。 ・具体的な方法は次の通り 1. application以外のテーブルは、1-Nで対応付けられる。 2. Mヶ月前の情報として持っているので、そのMを降順ソートすれば良い。 (Mは-Xヶ月で示される。)

Slide 28

Slide 28 text

コンセプト ①時系列情報を持っているので、ソー トすることで時系列分析が可能 ②SK_ID_CURRの結合は1-Nの関係 (previous_application.csvを除く)

Slide 29

Slide 29 text

SK_ID_C URR DAYS_INS TALMENT AMT_I NSTAL MENT AMT_PA YMENT 1 -1 10 10000 1 -3 20 30000 2 -1 10 20000 1 -2 30 35000 2 -2 40 40000 SK_ID_C URR DAYS_DE CISION AMT_INS TALMENT AMT_PAY MENT 1 -1 10 10000 1 -2 30 35000 1 -3 20 30000 SK_ID_C URR DAYS_DE CISION AMT_INS TALMENT AMT_PAY MENT 2 -1 10 20000 2 -2 40 40000 2 0 0 0 Note: SK_ID_CURR column is not used for training of neural network 昇順でソー ト Feature IDごとに分割 IDごとに分割

Slide 30

Slide 30 text

Modeling CNN RNN 特徴量 ・application feature ・時系列特徴量 ・Onodera Feature ・時系列特徴量 カテゴリーデータ Categorical Embeddingによる離散化 (時系列特徴量も同様に扱う) 時系列構造 Conv1D PReLU Batch Normalization Dropout LSTM GRU GlobalMaxPooling GlobalAveragePooling Batchsize 1024 予測方法 6seed 5foldの平均 Score(Public/Private) 0.785/0.782 0.795/0.791 Optimizer Adam ※AmsgradをTrue

Slide 31

Slide 31 text

Note: SK_ID_CURR column is not used for training of neural network Modeling

Slide 32

Slide 32 text

Note: SK_ID_CURR column is not used for training of neural network Modeling 時系列モデリング部 Dense + Embedding Dense + Embedding

Slide 33

Slide 33 text

Note: SK_ID_CURR column is not used for training of neural network Modeling(時系列処理部) Conv1D- >PReLU->BN- >Dropout

Slide 34

Slide 34 text

Note: SK_ID_CURR column is not used for training of neural network Modeling(時系列処理部) 数値データ カテゴリーデータ Embeddingで 処理をする。

Slide 35

Slide 35 text

Note: SK_ID_CURR column is not used for training of neural network Modeling(全結合) ①数値データ ②カテゴリーデータ ③時系列データ の3つの結合を行う Dense- >PReLU->BN- >Dropout

Slide 36

Slide 36 text

Note: SK_ID_CURR column is not used for training of neural network Modeling

Slide 37

Slide 37 text

Dense + Embedding 時系列モデリング部 Dense + Embedding Modeling

Slide 38

Slide 38 text

Note: SK_ID_CURR column is not used for training of neural network Modeling LSTM/GRUを使った 時系列特徴の獲得

Slide 39

Slide 39 text

まとめ CNN/RNNを使って、1-Nのテーブルから 時系列特徴量を獲得した。

Slide 40

Slide 40 text

DENOISING AUTOENCODER Ireko’s Part

Slide 41

Slide 41 text

Denoising AutoEncoder • Michael JahrerがPorto Seguroで使ったDAEを実装 – 列を入れ替えるswapnoise – Rankgaussで初期化 – 隠れ層を特徴量にしてMLPに投下 • ニューラルネットでtestの特徴を捉えるのが目的 1st place with representation learning https://www.kaggle.com/c/porto-seguro-safe- driver-prediction/discussion/44629

Slide 42

Slide 42 text

Preprocessing • RankGauss – 各featureをランク付けして[-1, 1]に射影して erfinvで変換 – categorical featureはonehotに変換 • Swapnoise – 各カラムについて、一定の確率で他の列の値に入れ替える

Slide 43

Slide 43 text

Model Architecture • 隠れ層3層、activationは全てrelu • ロスはMSE Activation ReLU Loss MSE Hidden layer size 4096 Optimizer Adam Learning Rate 0.001 patience/rate (ReduceLROnPlateau) 5/0.001 patience/rate (EarlyStopping) 10/0.00 1 Swapnoise Rate 0.15

Slide 44

Slide 44 text

Model Architecture • 隠れ層の出力を取り出して、concatしたものがfeature – MJが言うところのdeep stack • 出力のうち4分の3がゼロに →ゼロのノードは全て削った ONODERA804 (836) Layer1 (4096) Layer2 (4096) Layer3 (4096) output (836) DAE feature (~3300) 隠れ層の出力を 全てconcat

Slide 45

Slide 45 text

• toshさんのNNのinputの一つとして使った • publicLBでは有効だったが、 privateLBでは全然効かなかった – publicLBがtrainに似ていたという性質が表れている – testのサイズがtrainより大きく、同じ分布であれば unspervisedなアプローチは有効とMJが言っている※ Score model DAE Local CV public LB private LB toshNN ✗ 0.797 0.800 0.796 toshNN ✓ 0.799 0.804 0.796 MJ’s NN DAE -> MLP 0.795 0.801 0.794 MJのスコアは1st Place Solutionから https://www.kaggle.com/c/home-credit- default-risk/discussion/64821

Slide 46

Slide 46 text

• toshさんのNNのinputの一つとして使った • publicLBでは有効だったが、 privateLBでは全然効かなかった – publicLBがtrainに似ていたという性質が表れている – testのサイズがtrainより大きく、同じ分布であれば unspervisedなアプローチは有効とMJが言っている※ Score ※ https://www.kaggle.com/c/porto-seguro-safe- driver-prediction/discussion/44629#372950

Slide 47

Slide 47 text

tosh part

Slide 48

Slide 48 text

Model Architecture : Simple Model All Tables Concatenated - Numerical - Categorical Numerical Denoising Auto Encoder Categorical Embedding Dense Binary Cross Entropy

Slide 49

Slide 49 text

Model Architecture : Our Model https://www.kaggle.com/c/home-credit-default-risk/discussion/64722#380224

Slide 50

Slide 50 text

RESULT Simple Model Our Model CV 0.796 0.799 ( +0.003 ) Private LB 0.794 0.796 ( +0.002 ) finding NN architecture において、 各テーブル(app, prev, bureau, …)毎に loss を計算するようにしたところ、 +0.001 のスコア改善がみられた

Slide 51

Slide 51 text

Takuoko Part

Slide 52

Slide 52 text

Feature • 10000を超える特徴量 • Aggregation • +-*/ • Trend • Pred EXT, DAYS_EMPLOYED, NEW_SOURCES_PROD_PRED • 重要度の高い特徴の予測モデルを作った。 • ダメだった主な特徴 • NN->Embedding, hidden layer • Target encoding • ロジスティック回帰によるmeta features • Etc…

Slide 53

Slide 53 text

Feature Selection Brandenの方法 Q.いつもこの方法を使うのか。 A. No,上手くいくときもあればいかない時もある。時には重要と判断される 特徴でもoverfitを招くので、それらを除くことがある。 Q.なぜ今回使ったのか A. スコアが良かったから Q.なぜこの方法がうまくいくのか A. 詳しいことはわからないが、モデルが重要な部分に焦点を当てるのには 役立つと考えている。そして、重要でない特徴に時間を割かない利点もある。

Slide 54

Slide 54 text

Parameter Tuning

Slide 55

Slide 55 text

Ensemble • Ikiri_DS にマージしてからは Maxwell さんにお任せ。 • Scipy Nelder-Mead • Avito の時に angus に教えてもらった方法。

Slide 56

Slide 56 text

Score

Slide 57

Slide 57 text

Summary

Slide 58

Slide 58 text

APPENDIX

Slide 59

Slide 59 text

Model Pipe Line ( stacking version )