343. IEEE-CIS Fraud Detection | ieee-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。(具体细节在这里)。
如果你还记得,Konstantin 最初的公开特征工程内核(链接)在没有 UID 的情况下,本地验证 AUC = 0.9245,公开 LB = 0.9485。他的新特征工程内核(链接)通过查找和使用 UID,实现了本地验证 AUC = 0.9377 和公开 LB = 0.9617。很快我将发布我的 XGB 内核,它以更少的人工辅助找到 UID,并证明优于所有其他查找 UID 的方法。(XGB 发布在这里)。通过脚本生成 UID 的目的是为了进行 EDA(探索性数据分析)、特殊的验证测试和后处理。我们没有将脚本的 UID 添加到我们的模型中。机器学习自己寻找它们的效果更好。
在这次比赛中,EDA 令人望而生畏。有太多的列需要分析,而且它们的含义被掩盖了。对于前 150 列,我们使用了 Alijs 出色的 EDA(链接)。对于剩下的 300 列,我们使用了我关于 V 和 ID 列的 EDA(链接)。我们用 3 个技巧减少了 V 列的数量。首先找到共享相似 NAN(空值)结构的 V 列组,接下来我们使用了以下 3 种方法之一:
之后,这些缩减后的组使用下面的特征选择技术进行进一步评估。例如,V322-V339 块未通过“时间一致性”测试,因此从我们的模型中移除。
特征选择很重要,因为我们有很多列,并且希望保持模型高效。我的 XGB 有 250 个特征,训练 6 折只需 10 分钟。Konstantin 需要说明他的模型有多少特征。我们用尽了我们知道的所有技巧来选择特征:
一个有趣的技巧叫做“时间一致性”,即使用单个特征(或一小群