返回列表

25th place solution

505. American Express - Default Prediction | amex-default-prediction

开始: 2022-05-25 结束: 2022-08-24 信贷风控 数据算法赛
第25名方案

第25名方案

作者: Pavel Vodolazov, Eran Aharonovich
比赛: Amex Default Prediction

简介

作为一家名为 pecan.ai 的初创公司的高级 AI 研究员,我主要处理类似类型的交易数据。我利用我的工作经验获得了一个顺利的开端。还要非常感谢我的老板提供的计算能力 :) 从如此温暖的社区中学到的有用方向绝对值得回报 :)

特征工程

我们使用了几个版本的特征工程(有点混乱),并非此处描述的所有技术都应用于所有模型。这样做有几个原因:

  • 使数据集略微多样化
  • 一段时间后重新设计特征以确保没有错误。

我们以 @raddar 的数据集为基础。

1. 预扁平化 - 在序列上进行的工程:

我们从“支付后”特征开始,然后进入特征交互:我们遍历数值特征的所有可能组合,计算每对特征之间的差异并将 NAN 填充为 0,如果线性相关性显着高于任一独立特征,则此差异成为新的独立特征并添加到模型中,例如 P_2–B_3

我们还使用了 amex 指标代替线性相关性。

在其中一个数据集中,分类特征被独热编码为多个二进制序列。

2. 扁平化 - 简化为单个值:

基础 - mean, min, max, std, first, last(确实如此)。

还有 - 中间部分:mean(1:12), mean(2:13), mean(2:12)。原因是 last-mean(1:13) 的后扁平化意义不大,因为 mean 内部已经包含 last,所以 last-mean(1:12) 听起来是更正确的解决方案。在实践中,我不知道如何衡量它的用处。

3. 后扁平化 - 对创建的特征进行操作:

  • Last - first, last - middle, middle - first, relative_pos: (last - min) / (max - min)
  • 行特征:NAN 的计数,归一化值的总和,P,D,S,B,R 的归一化值之间的差异,例如 sum(normalisedP) – sum(normalisedD)

专用特征

  • 特征值动量
  • 仅使用最近 3 个月的数据对每个特征进行未来 180 天的线性预测
  • 距最后一个 NAN 值的天数
  • (last value – prev value ) / (last_date – prev_date)
  • 以及上述特征的一些其他变体。

特征工程是在 Python 和 C# .Net 中完成的:

SequentialEncoder

我们还创建了 notebook 中描述的序列特征(它们非常重要)。

特征选择

我们测试了一些简单的方法,但它们降低了我们的分数。我们认为损失 CV 的第 4 位小数不值得,我们仍然可以运行具有 3.5k 特征数据集(我们最大的数据集)的模型,因此风险不会得到回报。

建模

GBDT:

LightGBM Dart, CatBoost, XGBoost

Tabnet

我们没有设法获得有用的结果(所有集成几乎抵消了它的贡献)。

但是! 然后我们尝试了我几年前测试过的技巧。我们采用了我们最好的模型并以折外方式计算了 shap values。那时我称之为自监督预训练,但技术上这是一种特征转换。结果我们得到了一个更容易被 NN 模型消化的数据集,因为它是用 GBT 提取的。然后我使用这个数据集训练了 tabnet 并在 LB 上达到了 0.797。该解决方案不像直接的 tabnet 模型那样多样化。但是 Tabnet 以不同于 GBT 的方式学习预测,因此它对集成仍然非常有用。

您可以在 此处 找到更详细的解释(来自之前的比赛)。

Node

但我最大的兴奋是在这次比赛中尝试 NODE 模型。它取得了不错的成绩——我认为我的结果不是最佳的,我相信如果我更多地微调它——它会取得更好的结果。但这可能是我尝试过的最繁重的表格模型——我的 12 gb GPU(感谢 pecan.ai)仅在

同比赛其他方案