🐙

Kaggle 2022 Amex解法まとめ

2022/09/04に公開

2022/Amex解法まとめ

概要

お題

目的

  • 匿名化された時系列の行動情報から貸し倒れを予測する

今回の課題

  • 匿名化された時系列の行動情報から貸し倒れの確率を予測する
    • 18ヶ月間の支払情報から120日以内に支払わなくなる(支払えなくなる)確率を予想する

具体例

  • 時系列(YY-MM-DD)と匿名特徴量(大半がfloat、一部categorical)188個

必要性

現状の手法とその課題

  • 精度をより向上させたい
    • (詳細な記述はなし)

コンペティションについて

データ

  • CSVの合計が50GBと非常に大きい
    • 訓練データ550万行、テストデータ1140万行
    • (ColabやKaggleでやる場合はメモリとの兼ね合いが難しかった)
  • 後にPublicとPrivateは時系列に沿って分けられていると判明: How to identify Public and Private
    • Train→Public→Privateの時系列だった

特徴量

  • 滞納、支出、支払い、残高、リスクについての変数
    • 匿名化されているため詳細は不明
    • 変数の内容の特定に成功した報告はなかった
  • 大半はfloat、一部categorical

ターゲット

  • デフォルトするか否かの0/1

付随情報

  • なし

予測方法 / 評価指標

M = 0.5 * (G + D)
  • GはNormalized Gini Coefficient

  • Dは4%で補足されるデフォルト率

    • 正例のラベルが予測確率が最も高い上位4%以内に入る割合
  • 0 ~ 1で、大きいほど良い

  • 計算方法の詳細: Amex Competition Metric (Python)

  • 0.799~0.801の間に2000チームくらいが入っていた

    • 順位変動が大きかった

制約

  • なし
    • CSV形式の提出

全体的な解法

データ

前処理

ノイズ除去を行う

  • Public Notebook
    • 多くの上位解法で使用
  • isle識別 2位
    • 結果はほぼ同じだった
  • 特徴量同士の組合せに基づく後処理 13位

特徴量作成

  • 以下の前処理、単位、変換方法の組合せで作成

前処理

単位

  • 全て、直近6ヶ月、直近3ヶ月、直前1つ

変換方法

  • 平均、標準偏差、最大、最小
  • 中央値 2位
  • 順位 2位 / 12位

メタ特徴量

特徴量自体の予測

  • データの生成過程に注目し、予測して補完した 10位
    • 予測性能が1ユーザーあたりのデータ長に依存していた
    • データの直近のn個が切り捨てられている場合があると仮説を立てた
    • RNNで特徴量自体を予測し、補完して使用した

特徴量の選択・削減

  • 複数手法で選択後、重複して選択されたものを選択し、重複して選択されなかったものを削除 2位
  • Train/Privateのadversarial validationで重要度が高いものを削除 11位 / 13位
  • Null importanceが高いものを選択 11位
  • XGBの重要度 + permutation importance 14位

モデル

LightGBM

  • 全ての解法で使用されていた
    • DART + 小さめのモデルだと精度が良かった

CatBoost

XGBoost

GRU

Transformer

  • 5位
    • 特徴量について学習した後、TargetについてFine Tuning
  • 12位
    • それぞれ別個でFCN部分とTransformer部分について学習
  • 13位
  • 14位
    • ベースコード
    • Knowledge Distillationを行うことでより層を深くして学習できた

2d-CNN

TabNet

MLP

FCN

AutoML

Train

Knowledge Distillation, Pseudo Labeling

  • 13位

    • 1~2つのモデルで< 0.1, >0.8についてソフトラベルを使用
    • ただし同チームの別メンバーでは、Privateでは改善したがPublicで悪化したため使えなかったとのコメントも有
  • 14位

    • LGBMで予測・訓練後、訓練・テストについてのソフトラベルを作成する
    • 1, 3回目のLRサイクルでは、Transformerを訓練・テストデータのソフトラベルで学習させる
    • 2, 4回目のLRサイクルでは、Transformerを訓練データのハードラベルで学習させる

Predict

Ensemble

  • 重み付けして加算
    • 多くの解法で使用
  • 予測値をランキングにした後、CMA-ESにより最適化 13位
    • 過学習を起こしているかもしれない
  • 対数オッズ 15位
    • NNモデルのアンサンブルの際にうまく機能した

個別解法

1位

1st solution

要約(特徴)

  • 特徴量は全て・直近3行・直近6行単位の生・差分の統計量と、LGBMによるOOF予測値が主
    • 一部、NNモデルについてはbinning + DNNを使用(Categorical Embedding?)
  • モデルはLGBMとGRU

詳細

データ

  • 全てノイズ除去を行う
カテゴリ
  • 1hot化した後、全体と直近3行分について統計量(平均、標準偏差、合計)、最後の値を取る
数値データ
  • 全てのデータについてそのまま、差、ユーザー内の順位、月単位の順位について統計量(平均、標準偏差、合計、最小、最大)、最後の値を取る
  • 直近3行のそのまま、差について統計量を取る
  • 直近6行のそのままの値について統計量を取る

LGB予測値

  • LGBを訓練し、OOF予測値を取る
  • NaNにより13までパディングする

モデル

  • 4つのモデルのアンサンブル
  • 自分でもどう作ったか不明が1つ、LGB1つ、GRU1つ、GRU+DNN1つ
    • NN系は0でNanをパディング

2位

2nd place solution - team JuneHomes (writeup)

要約

  • 特徴量を総当り式で大量に作成し、その後選択した
    • 上記を実現するために各所で工夫した
  • モデルはLGBMとCatBoost

詳細

実行環境

  • AWSで最大で500GB+分のRAMを使用していた
  • ボトルネックの解消に努めた

データ

前処理
  • ノイズ除去
    • Public Notebookと非常に似ているが異なる
    • 事前の係数なしでisle識別を用いた
特徴量作成
  • 特徴量はUser ID単位などで集約して生成
  • 100~200個程度までは総当り式に作るだけで上手く行った
    • 統計量(平均、中央、標準偏差、最小、最大、最後、ユニークな個数)
    • 元の数値、差、割合、ラグ
    • 標準化、外れ値除去など
  • 最終的に7000個程度の特徴量を作成した
  • 次の課題として、特徴量のどれが有効か無効か見極めることが出てきた
特徴量選択
  • 特徴量選択はメタデータによる辞書を使用

  • 実験の良し悪しはROC-AUCで判断した

    • amexのMetricは不安定で判断に使えないと考えた
    • log lossとAmexは測定していた
  • 以下の順で行った

    1. 特徴量の重要度が0の1500個の特徴量を除去し、5500個まで選択
    2. 階層的な特徴量選択で3000個まで選択
      1. 300個の初期特徴量を定義
      2. 他の特徴量のサブセット(600+)を追加
      3. モデルを学習
      4. 並び替え
      5. 5つのseed値の平均で(寄与度が?)負の特徴量を除去
        1. に戻る
    3. 段階的な特徴量選択で2500個程度まで選択
      1. 全特徴量を取る
      2. モデルを学習
      3. 並び替え
      4. 最もパフォーマンスの悪い20%の特徴量を削除
        • ただし性能を悪化させない場合は削除しない
        1. に戻る
    4. 逐次的な特徴量追加
      1. 300個の初期特徴量を定義
      2. サブセットを追加
      3. ROC-AUCの変化が0.0003より大きければサブセットを維持
    5. PCA・標準化を使用した特徴量については(Leak・Shiftしていないか?)疑っていたので検証して追加
  • 最終的に、4. 逐次的な特徴量追加と他の手法で重複して選択されていた特徴量を追加し、他の手法で重複して選択されていなかった特徴量を削除した

  • 異なる手法のデータセットで学習したモデルのアンサンブルは上手く機能しなかった

モデル

  • (葉が少ない)単純なモデル + DARTが上手くいった
    • 合成データに多い特徴だったので匿名化の復元を試みたが上手くいかなかった
  • DART lgbm + GBDT lgbm + Catboost

3位

3rd solution--simple is the best

要約

  • 特徴量作成部分に鍵があった
  • モデルはLGBMとCatBoost

詳細

  • (解法を画像一枚にまとめているので元のURLを見たほうが早い)
  • (かなりの部分に推測を含む)

データ

  • 基本的な特徴量
    • 1179個の特徴量
    • (おそらく元のデータのUser IDごとの統計量)
  • magic特徴量
    • diff
      • (差の統計量)
    • last 3/6M
      • (直近3または6ヶ月の統計量)
    • bin feature unique
      • (binした後のユニークな数?)
    • meta
      • (モデルの予測値についての統計量)

モデル

  • LGB + CTB

参考URL

Discussion