343. IEEE-CIS Fraud Detection | ieee-fraud-detection
非常感谢 Kaggle 和 IEEE 举办了这次比赛,希望我们很快能再有一次表格数据竞赛。向我的队友 @dott1718、@christofhenkel、@ebouteillon 和 @maxjeblick 致以最崇高的敬意,与他们合作真的是一种荣幸。
通过阅读已经发布的解决方案以及预期其他人的做法,我很确定大多数人(就像在 Santander 比赛中一样)都做了非常相似的事情,只是有一些细微的技巧差别。我们的解决方案中可能有 2-3 个技巧与其他人不同。我有点累,所以如果有些地方不是特别精确,请见谅 :)
正如大家现在应该知道的,识别用户是获得高分的关键。我们在这里做了大量的试错,@ebouteillon 和 @dott1718 在我们识别用户的过程中起到了决定性的作用。当我们合并时,我们结合了两种方法,最终 @dott1718 制定了一个非常优雅且有效的用户识别解决方案。你可以在这里找到如何做到这一点的脚本(从现在起让我称这些 id 为 uid6):https://www.kaggle.com/dott1718/ieee-userid-proxy
我们的模型使用了不同版本的用户 ID,从具有较少唯一值的简单形式,一直到之前发布的那些非常严格但也最精确的 ID。
然而,现在选择 CV(交叉验证)设置是比较棘手的部分。有不同的方法可以做到这一点,随之而来的是你在 CV 设置中引入的不同类型的泄露。例如,一种方法是进行按月的时间分割泄露,这也是我们最终选择使用的方法,因为在我看来这种 CV 最能代表测试数据。我们选择主要关注各折的平均 CV。但这里重要的事实是,你的折之间存在 ID 重叠,而且围绕验证折的折数越多,重叠就越多。ID 在时间距离更近的情况下重叠更多。例如,Fold0(圣诞节)和最后一折的表现比中间的那些折要差,因为它们与训练折有更多的 ID 重叠。
同样重要的是要理解这种重叠在测试中会如何表现:

这里你可以看到不同的 ID(让我们关注 UID6),x 轴是测试的不同月份。y 轴是该月中我们也曾在训练中观察到的唯一 ID 的百分比。由于模型在重叠 ID 上的表现远好于非重叠 ID,我们可以预期 Private LB 的分数会比 Public LB 低很多。这也意味着在 Private LB 上,拥有一个针对从未在训练中观察到的非重叠客户的良好模型更为重要。
作为这一结果,我们决定将精力分成两部分,分别针对重叠 ID 和非重叠 ID 开发强大的模型。我们为 CV 设置和测试创建了两个索引,分别标记重叠和非重叠。例如,在验证折中,我们在其他折中观察到该 ID 的那些交易会被标记为重叠,其他所有交易标记为非重叠。
老实说,这可能是我们的弱项,因为我们没有花太多时间在这上面。也许我们可以通过更好的特征进一步改善结果,但我不知道。我们使用了大量的计数编码特征(也包括 uid),以及其他聚合特征。我们还引入了 UID 级别的聚合特征。总的来说,这与一些公开内核应该没有太大区别。
我们利用了三种类型的模型:LGB、Catboost 和神经网络,全部基于按月的 CV 设置进行拟合。所有模型几乎使用相同/相似的特征,当然也有一些区别。在 Catboost 中,有必要将 ID 作为显式分类变量包含进去才能使其工作。神经网络当然需要一些特征转换和其他技巧。@christofhenkel 和 @maxjeblick 完成了那里的大部分工作,所以他们可能是进一步详细说明的最佳人选。此外,我们还做了一堆伪标记的 LGB 模型,我们仅使用来自重叠 UID 的预测(因为我们对它们有信心)作为软标签或硬标签。我们在混合中部分使用了它们,但很难说它们是否有很大帮助。
我们的融合现在可能是比较有趣的部分。首先,我们决定进行爬山法融合,主要使用原始预测的均值或几何平均。但我们不是针对整体 CV 进行优化,而是分别针对重叠和非重叠 CV 进行优化。所以首先,我们只优化那些我们标记为非重叠的索引的 CV,然后对重叠索引做同样的操作。很酷的事情是,现在不同的模型进入了这些不同索引的组合中。
LGB 通常在两部分都表现良好,所以它们是重叠和非重叠混合的一部分。神经网络对非重叠部分有显著帮助,但对重叠部分帮助不大,因为它们不会严重过拟合 ID,甚至很难强迫它们这样做。