返回列表

1st Place Solution - Part 2

343. IEEE-CIS Fraud Detection | ieee-fraud-detection

开始: 2019-07-15 结束: 2019-10-03 反欺诈与反洗钱 数据算法赛
第一名解决方案 - 第二部分
作者:Chris Deotte (Grandmaster) & Konstantin Yakovlev (Grandmaster)
比赛:IEEE-CIS Fraud Detection

在之前发布的“第一名解决方案 - 第一部分”中,我们讨论了在 Kaggle 的欺诈检测比赛中,对客户(信用卡)进行分类而不是对交易进行分类的好处。在这里,我们将讨论技术细节。

最终模型

我们的最终模型是 3 个高分单模型的组合。CatBoost(公开/私有榜单分数 0.9639/0.9408)、LGBM(0.9617/0.9384)和 XGB(0.9602/0.9324)。这些模型具有多样性,因为 Konstantin 构建了 CAT 和 LGBM,而我构建了 XGB 和 NN(神经网络)。而且我们独立设计了特征。(最终我们没有使用 LB 分数为 0.9432 的 NN)。XGB 代码发布在这里

其中一个最终提交是一个堆叠模型,LGBM 在 CAT 和 XGB 的预测结果之上进行训练;另一个最终提交是具有相等权重的集成模型。这两个提交都经过了后处理:提取单个客户(信用卡)的所有预测,并用该客户的平均预测值替换它们。这个后处理步骤使 LB 分数提高了 0.001。

如何寻找 UID(用户标识)

我们通过两种不同的方式找到了 UID。(具体细节在这里)。

  • 编写了一个脚本来查找 UID,链接在这里
  • 训练我们的模型来查找 UID,链接在这里这里

如果你还记得,Konstantin 最初的公开特征工程内核(链接)在没有 UID 的情况下,本地验证 AUC = 0.9245,公开 LB = 0.9485。他的新特征工程内核(链接)通过查找和使用 UID,实现了本地验证 AUC = 0.9377 和公开 LB = 0.9617。很快我将发布我的 XGB 内核,它以更少的人工辅助找到 UID,并证明优于所有其他查找 UID 的方法。(XGB 发布在这里)。通过脚本生成 UID 的目的是为了进行 EDA(探索性数据分析)、特殊的验证测试和后处理。我们没有将脚本的 UID 添加到我们的模型中。机器学习自己寻找它们的效果更好。

EDA(探索性数据分析)

在这次比赛中,EDA 令人望而生畏。有太多的列需要分析,而且它们的含义被掩盖了。对于前 150 列,我们使用了 Alijs 出色的 EDA(链接)。对于剩下的 300 列,我们使用了我关于 V 和 ID 列的 EDA(链接)。我们用 3 个技巧减少了 V 列的数量。首先找到共享相似 NAN(空值)结构的 V 列组,接下来我们使用了以下 3 种方法之一:

  • 我们对每个组单独应用 PCA(主成分分析)
  • 我们从每个组中选择了一个最大规模的不相关列子集
  • 我们将整个组替换为所有列的平均值

之后,这些缩减后的组使用下面的特征选择技术进行进一步评估。例如,V322-V339 块未通过“时间一致性”测试,因此从我们的模型中移除。

特征选择

特征选择很重要,因为我们有很多列,并且希望保持模型高效。我的 XGB 有 250 个特征,训练 6 折只需 10 分钟。Konstantin 需要说明他的模型有多少特征。我们用尽了我们知道的所有技巧来选择特征:

  • 前向特征选择(使用单个或成组特征)
  • 递归特征消除(使用单个或成组特征)
  • 置换重要性
  • 对抗验证
  • 相关性分析
  • 时间一致性
  • 客户一致性
  • 训练/测试分布分析

一个有趣的技巧叫做“时间一致性”,即使用单个特征(或一小群

同比赛其他方案