BulletTech官方微信
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% capture
和gini
,许多方案都参考了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]:

-
首先在原始数据上训练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]
希望这次的分享对你有帮助,欢迎在评论区留言讨论!
%20-%20Tail%20Pic.png)
参考资料
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,
作者介绍