返回列表

17th place solution summary - there is nothing special

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

开始: 2019-07-15 结束: 2019-10-03 反欺诈与反洗钱 数据算法赛
第17名方案总结 - 并没有什么特别之处

第17名方案总结 - 并没有什么特别之处

作者:Taemyung Heo
比赛:IEEE-CIS Fraud Detection
排名:第17名(金牌)

首先,我要衷心感谢Kaggle、IEEE-CIS和Vesta举办了这次比赛。这次比赛真的非常精彩有趣,我学到了很多东西。

回顾

在比赛最后一天提交最后一次提交时,我查看公榜排名是第32名,然后我就去睡了,希望抖动不要太大,因为第32名对我来说已经足够好了。当我醒来时,我不敢相信我的最终排名上升了15名,以第17名获得了金牌。事实上,我曾做了一个噩梦,梦见因为抖动而勉强获得了铜牌。😂

参加这次比赛我有两个主要目标。一是通过获得铜牌或更好的成绩成为竞赛专家。另一个是,在之前的“Instant Gratification”比赛中我是以团队形式参赛的,所以这次我想独自体验端到端的比赛过程。这些目标已经足够达成,我从未想过能独自获得金牌。

通过过去的几次比赛,我知道赢得金牌有多难,而且我认为很多其他团队都比我强,所以我怀疑自己是否配得上金牌。我唯一能想到的是我在这次比赛中真的很幸运。

正如你在下面看到的总结和我分享的代码一样,我所做的只是很好地利用了阅读公共Kernel和讨论区。

方案总结

验证策略

我认为建立可靠的验证策略是最关键的部分。许多人使用以月份为分组的GroupKFold或不打乱的KFold,但我对用未来数据预测过去感到不舒服。

相反,在阅读了各种Kernel和讨论后,我的策略是从Chris (@cdeotte) 的讨论中获得了灵感。对于5折交叉验证,我使用训练数据的最后20%作为留出集,并测量了3个随机种子的平均AUC作为验证分数,以及预测测试数据时的平均迭代次数。在预测测试数据时,我使用了没有早停的分层5折。

在建立了这个验证方案后,验证分数和公榜趋势几乎完全相关。我认为这是我在这次比赛中做得最好的部分。

下面是我的验证方案建立后的验证分数、公榜、私榜趋势图。

验证趋势图

流程管道

在建立验证方案后,我遵循了Konstantin (@kyakovlev) 的讨论并创建了这样的流程:

  1. 基于讨论、公共Kernel或我自己思考的特征工程
  2. 使用验证分数评估模型性能
  3. 对于对抗验证,使用Roman (@nroman) 的协变量偏移方法过滤特征
  4. 重新评估模型性能并获得最终验证分数
  5. 预测测试数据并提交

预处理

建模

我使用了两个模型:LightGBM和CatBoost。两者都基于Konstantin (@kyakovlev) 的公共Kernel。

在集成之前,我使用LightGBM,基于IEEE FE with some EDA

在LightGBM达到公榜0.9592后,我创建了一个CatBoost模型用于集成,基于IEEE CatBoost baseline with GroupKFold CV

最终模型的分数如下:

  • LightGBM 验证分数:0.94838,公榜:0.959666,私榜:0.937376
  • CatBoost 验证分数:0.95212,公榜:0.960571,私榜:0.936798

特征工程