BulletTech官方微信

V2

2022/09/02阅读:81主题:自定义主题1

AMEX - Default Prediction Kaggle竞赛精华总结

AMEX - Default Prediction Kaggle竞赛精华总结

1 概述

美国著名金融服务公司American Express(AMEX)在Kaggle上举办了一个数据科学竞赛,要求参赛者针对信用卡账单数据预测持卡人是否在未来会逾期。其中,各个特征都做了脱敏处理,AMEX提供了特征前缀的解释:

D_* = 逾期相关的变量
S_* = 消费相关的变量
P_* = 还款信息
B_* = 欠款信息
R_* = 风险相关的变量

下表为竞赛的数据示意(值为虚构,仅做参考)

customer_ID S_2 P_2 ... B_2 D_41 target
000002399d6bd597023 2017-04-07 0.9366 ... 0.1243 0.2824 1
0000099d6bd597052ca 2017-03-32 0.3466 ... 0.5155 0.0087 0

其中'B_30', 'B_38', 'D_114', 'D_116', 'D_117', 'D_120', 'D_126', 'D_63', 'D_64', 'D_66', 'D_68'特征为类别型的数据。比赛的目标是对于每一个customer_ID,预测其在未来逾期(target = 1,否则target = 0)的可能性。其中负样本已经做了欠采样(采样率为5%)。近日比赛已经结束,本文将选取目前已经公开代码的方案及一些讨论进行总结,和大家一起学习社区中优秀的思路和具体实现。

2 准备工作

由于数据量相对于Kaggle提供的实验环境很大,因此有一些工作是围绕内存的优化展开的,比如AMEX data - integer dtypes - parquet format[1]将浮点型的数据转化为了整型,并将数据以parquet format格式存储,有效地减少了内存的开销。类似的数据压缩方案还有AMEX-Feather-Dataset[2]

60M sample_submission.csv
32G test_data.csv
16G train_data.csv
30M  train_labels.csv

同时,本次竞赛的评价指标是客制化的,融合了top 4% capturegini,许多方案都参考了Amex Competition Metric (Python)[3]Metric without DF[4]的代码进行模型性能的评价。

3 探索性数据分析

在对数据建模前,透彻地了解它非常关键,探索性数据分析(Exploratory Data Analysis)成为了许多后续工作的基础。在AMEX的竞赛中,Kagglers在这一阶段的工作关注点主要有:

  • 检查缺失值
  • 检查重复的记录
  • 标签的分布
  • 每位客户信用卡账单数量及账单日分布
  • 类别型变量及数值型变量的分布,是否有异常值
  • 特征之间的相关性
  • 人为噪音
  • 训练集和测试集中特征分布对比

针对这些分析,高分笔记本有如下:

  • Time Series EDA[5]
  • AMEX EDA which makes sense[6]
  • American Express EDA[7]
  • Understanding NA values in AMEX competition[8]

4 特征工程 & 建模

4.1 特征工程

因为数据为信用卡账单,一个客户有多个账单,而最后预测模板是以客户为单位的,因此融合不同时间的账单数据成为了许多方案的关注点,如:

  • 针对连续型变量,以客户为单位对个特征在所有时间范围内求均值、标准差、最小值、最大值、最近一次账单的值,以及最近一个账单和最开始账单特征的差值、比率等。
  • 针对类别型变量,以客户为单位对个特征在所有时间范围内计数,最近一次账单的值,每个特征值出现的次数,将其转化为数值型变量。随后再根据模型类别做编码(或不手动编码,让模型自己处理)。

相关的高分笔记本主要有:

  • Amex Agg Data How It Created[9]
  • Lag Features Are All You Need[10]
  • Amex Features: The best of both worlds[11]

4.2 模型设计、训练及推理

高分方案基本是XGBoost,LightGBM,CatBoost,Transformer, TabNet以及这些模型的集成,各路高手为了提高分数各显神通,在此针对一些高分思路进行讨论。

Chris Deotte是一位在Nvidia工作的Kaggle Grandmaster,他贡献了许多基础的解决方案(如XGBoost[12]TensorFlow GRU[13]TensorFlow Transformer[14])供参考,这些工作为社区提供了很好的工作起点,而Chris最终的方案排名15/4875,使用Transformer并加入了LightGBM知识蒸馏,详见15th Place Gold – NN Transformer using LGBM Knowledge Distillation[15]

Transformer和LGBM知识蒸馏
  • 首先在原始数据上训练LightGBM,将cross validation中的out of fold(OOF)预测结果存下,同时对test集进行预测做pseudo labeling,同时将OOF和test preds送入Transformer进行训练
  • Transformer从零开始训练是比较困难的,但借助知识蒸馏,Transformer接受了来自LightGBM的教育,同时带有伪标签的测试集数据量很大,这些都帮助了Transformer进行学习。由于Transformer与LightGBM结构迥异,借助于注意力机制,Transformer学习到的信息也有所不同,使得最后在模型融合是有更好的效果。
  • 然后Transformer继续基于原始的训练集再次进行训练,这其中融合了nested cross validation,seed blending等方法
  • 最终使用50%/50%集成LightGBM和Transformer的输出

私榜第二名的团队也对方案(2nd place solution - team JuneHomes[16])进行了分享(其称源码会稍后公开),在JuneHomes的分享里,除了技术本身,还有很多最佳实践:

  • 团队为了协作,使用了AWS的计算资源,同时对各个过程进行了版本管理(如流程版本,特征工程版本,模型版本等)
  • 首先借助社区中的思路去除了一些数据中的噪音,然后进行一些手动特征工程的尝试,但效果有限,最终还是选择了使用上文提及的统计量。
  • 在特征选择时,主要依赖于LightGBM的特征重要性和Permutation importance循环迭代特征选择,并用模型CV结果中的AUC做验证。作者也提到其团队尝试了其他的特征选择的办法,但都不如该方法稳定。
  • 做模型选择时,作者经过很多实验最后选择了LightGBM,同时还针对账单较少的客户单独建模,最后进行集成。作者的实验表面Stacking作用很小,不同的seed和特征工程的顺序对于结果影响甚微。
  • 最后作者分享了团队的最开始的项目计划,将全过程工作流里值得注意的点及相关的资料详细地记录了下来,按照计划井井有条地执行,真是赢得实至名归!

相比之下,第一名的方案1st solution[17] 基本是一个大熔炉,并且作者没有详细描述,在此不做讨论。

5 总结

在本次比赛中,很多有用的信息和技巧来源于Discussion模块,因此本文也做了一些精华的摘录:

  • Speed Up XGB, CatBoost, and LGBM by 20x[18]
  • Which is the right feature importance?[19]
  • 11th Place Solution (LightGBM with meta features)[20]
  • 14th Place Gold Solution[21]

也有许多kagglers分享了很有借鉴意义的解决方案,以下是一些笔记本:

  • AMEX TabNetClassifier + Feature Eng [0.791][22]
  • KerasTuner - Find the MLP for you![23]
  • AmEx lgbm+optuna baseline[24]
  • RAPIDS cudf Feature Engineering + XGB[25]
  • Amex LGBM Dart CV 0.7977[26]
  • AMEX Rank Ensemble[27]

希望这次的分享对你有帮助,欢迎在评论区留言讨论!

参考资料

[1]

AMEX data - integer dtypes - parquet format: https://www.kaggle.com/datasets/raddar/amex-data-integer-dtypes-parquet-format

[2]

AMEX-Feather-Dataset: https://www.kaggle.com/datasets/munumbutt/amexfeather,

[3]

Amex Competition Metric (Python): https://www.kaggle.com/code/inversion/amex-competition-metric-python,

[4]

Metric without DF: https://www.kaggle.com/competitions/amex-default-prediction/discussion/327534

[5]

Time Series EDA: https://www.kaggle.com/code/cdeotte/time-series-eda#Load-Train-Data,

[6]

AMEX EDA which makes sense: https://www.kaggle.com/code/ambrosm/amex-eda-which-makes-sense,

[7]

American Express EDA: https://www.kaggle.com/code/datark1/american-express-eda,

[8]

Understanding NA values in AMEX competition: https://www.kaggle.com/code/raddar/understanding-na-values-in-amex-competition,

[9]

Amex Agg Data How It Created: https://www.kaggle.com/code/huseyincot/amex-agg-data-how-it-created/notebook,

[10]

Lag Features Are All You Need: https://www.kaggle.com/code/thedevastator/lag-features-are-all-you-need,

[11]

Amex Features: The best of both worlds: https://www.kaggle.com/code/thedevastator/amex-features-the-best-of-both-worlds,

[12]

XGBoost Starter: https://www.kaggle.com/code/cdeotte/xgboost-starter-0-793,

[13]

TensorFlow GRU Starter: https://www.kaggle.com/code/cdeotte/tensorflow-gru-starter-0-790,

[14]

TensorFlow Transformer Starter: https://www.kaggle.com/code/cdeotte/tensorflow-transformer-0-790,

[15]

15th Place Gold – NN Transformer using LGBM Knowledge Distillation: https://www.kaggle.com/competitions/amex-default-prediction/discussion/347641,

[16]

2nd place solution - team JuneHomes: https://www.kaggle.com/competitions/amex-default-prediction/discussion/347637,

[17]

AMEX 1st solution: https://www.kaggle.com/competitions/amex-default-prediction/discussion/348111,

[18]

Speed Up XGB, CatBoost, and LGBM by 20x: https://www.kaggle.com/competitions/amex-default-prediction/discussion/328606,

[19]

Which is the right feature importance?: https://www.kaggle.com/competitions/amex-default-prediction/discussion/331131,

[20]

11th Place Solution (LightGBM with meta features): https://www.kaggle.com/competitions/amex-default-prediction/discussion/347786,

[21]

14th Place Gold Solution: https://www.kaggle.com/competitions/amex-default-prediction/discussion/348014,

[22]

AMEX TabNetClassifier + Feature Eng [0.791]: https://www.kaggle.com/code/medali1992/amex-tabnetclassifier-feature-eng-0-791,

[23]

KerasTuner - Find the MLP for you!: https://www.kaggle.com/code/illidan7/kerastuner-find-the-mlp-for-you

[24]

AmEx lgbm+optuna baseline: https://www.kaggle.com/code/anuragiitr1823/amex-lgbm-optuna-baseline/notebook,

[25]

RAPIDS cudf Feature Engineering + XGB: https://www.kaggle.com/code/jiweiliu/rapids-cudf-feature-engineering-xgb,

[26]

Amex LGBM Dart CV 0.7977: https://www.kaggle.com/code/ragnar123/amex-lgbm-dart-cv-0-7977,

[27]

AMEX Rank Ensemble: https://www.kaggle.com/code/finlay/amex-rank-ensemble,

分类:

人工智能

标签:

机器学习

作者介绍

BulletTech官方微信
V2