Home Credit Default Risk - 2nd place solutions -

F6c0cb53d72908942998923f1a05c71b?s=47 Maxwell
November 30, 2018

Home Credit Default Risk - 2nd place solutions -

We "ikiri_DS" got 2nd place in Home Credit Default Risk competitions.
https://www.kaggle.com/c/home-credit-default-risk

This slide shows our solutions in that competition.
More detailed explanations was given in kaggle meetup tokyo 5th held at Indeed.

Thank you for your check.

F6c0cb53d72908942998923f1a05c71b?s=128

Maxwell

November 30, 2018
Tweet

Transcript

  1. 1.

    Dec / 1 / 2018 5th Kaggle meetup tokyo @

    indeed Home Credit Default Risk 2nd place solutions ikiri_DS
  2. 2.

    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談)
  3. 3.

    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
  4. 4.

    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
  5. 5.

    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 )
  6. 7.
  7. 9.

    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)
  8. 11.

    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.
  9. 13.

    Interest Rate • Previousには元本、月々の返済金額、返済期間の情報があるため、 単位期間あたりの利率を算出することができる。 • この利率はpreviousの中では極めてimportanceが高い。 • 利率はHome Credit社の現有モデルで算出された一種の

    metafeatureであり、コンペ内で直接アクセスできない情報 も含んでいるためだろう。 • しかし、肝心のcurrentに返済期間の情報がない。 • 何とか算出できればメチャ効くはずなのに!
  10. 15.

    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 キリのいい期間しかとらない離散値 であるためと考えている。 • 返済期間の予測値が得られたら、元利金等返済の式を用いて月あたり の利率を求めることができる。
  11. 17.

    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)
  12. 18.
  13. 19.

    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
  14. 20.

    Feature Base Feature Set Base + parameter tuning CV 0.8052

    0.8057 (+0.0005) Private LB 0.7978 0.7993 (+0.0016)
  15. 22.

    Feature Base Feature Set Base + parameter tuning CV 0.8052

    0.8065 (+0.0016) Private LB 0.7978 0.7990 (+0.0012)
  16. 25.

    自己紹介 • 山本 大輝(@tereka114) • Acroquest Technology株式会社 – 画像認識、自然言語処理 –

    DNN使う業務が多い。 • Kaggle Master – https://www.kaggle.com/tereka • のんびりしているエンジニアの日記 – http://nonbiri-tereka.hatenablog.com/ • 寄稿記事 – Interface 3月号 ラズパイにON!Google人工知能 – Interface 12月号 人工知能ウルトラ大百科 25
  17. 26.

    概要 モデルは次の2つを使用した。 ・Convolutional Neural Network(CNN) ・Recurrent Neural Network(RNN) 特徴量は次の2種類を利用した。 ・Onodera

    Feature(説明は省略) ・application feature(自前で作っていた特徴・工夫ほぼなし) ・1-Nとなるテーブルを用いた時系列形式の入力(後ほど、説明します。) CNN/RNNを使って、時系列特徴量を獲得する。
  18. 29.

    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ごとに分割
  19. 30.

    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
  20. 32.

    Note: SK_ID_CURR column is not used for training of neural

    network Modeling 時系列モデリング部 Dense + Embedding Dense + Embedding
  21. 33.

    Note: SK_ID_CURR column is not used for training of neural

    network Modeling(時系列処理部) Conv1D- >PReLU->BN- >Dropout
  22. 34.

    Note: SK_ID_CURR column is not used for training of neural

    network Modeling(時系列処理部) 数値データ カテゴリーデータ Embeddingで 処理をする。
  23. 35.

    Note: SK_ID_CURR column is not used for training of neural

    network Modeling(全結合) ①数値データ ②カテゴリーデータ ③時系列データ の3つの結合を行う Dense- >PReLU->BN- >Dropout
  24. 38.

    Note: SK_ID_CURR column is not used for training of neural

    network Modeling LSTM/GRUを使った 時系列特徴の獲得
  25. 41.

    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
  26. 42.

    Preprocessing • RankGauss – 各featureをランク付けして[-1, 1]に射影して erfinvで変換 – categorical featureはonehotに変換

    • Swapnoise – 各カラムについて、一定の確率で他の列の値に入れ替える
  27. 43.

    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
  28. 45.

    • 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
  29. 47.
  30. 48.

    Model Architecture : Simple Model All Tables Concatenated - Numerical

    - Categorical Numerical Denoising Auto Encoder Categorical Embedding Dense Binary Cross Entropy
  31. 50.

    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 のスコア改善がみられた
  32. 52.

    Feature • 10000を超える特徴量 • Aggregation • +-*/ • Trend •

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

    Feature Selection Brandenの方法 Q.いつもこの方法を使うのか。 A. No,上手くいくときもあればいかない時もある。時には重要と判断される 特徴でもoverfitを招くので、それらを除くことがある。 Q.なぜ今回使ったのか A. スコアが良かったから

    Q.なぜこの方法がうまくいくのか A. 詳しいことはわからないが、モデルが重要な部分に焦点を当てるのには 役立つと考えている。そして、重要でない特徴に時間を割かない利点もある。
  34. 56.
  35. 57.
  36. 58.