Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Home Credit Default Risk - 2nd place solutions -

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.

Maxwell

November 30, 2018
Tweet

More Decks by Maxwell

Other Decks in Science

Transcript

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

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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 )

    View full-size slide

  6. ONODERA part

    View full-size slide

  7. Feature Engineering
    Predict Each Previous

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  15. 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)

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  36. DENOISING AUTOENCODER
    Ireko’s Part

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  41. • 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  46. Takuoko Part

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  49. Parameter Tuning

    View full-size slide

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

    View full-size slide

  51. Model Pipe Line ( stacking version )

    View full-size slide