343. IEEE-CIS Fraud Detection | ieee-fraud-detection
首先,我要衷心感谢Kaggle、IEEE-CIS和Vesta举办了这次比赛。这次比赛真的非常精彩有趣,我学到了很多东西。
在比赛最后一天提交最后一次提交时,我查看公榜排名是第32名,然后我就去睡了,希望抖动不要太大,因为第32名对我来说已经足够好了。当我醒来时,我不敢相信我的最终排名上升了15名,以第17名获得了金牌。事实上,我曾做了一个噩梦,梦见因为抖动而勉强获得了铜牌。😂
参加这次比赛我有两个主要目标。一是通过获得铜牌或更好的成绩成为竞赛专家。另一个是,在之前的“Instant Gratification”比赛中我是以团队形式参赛的,所以这次我想独自体验端到端的比赛过程。这些目标已经足够达成,我从未想过能独自获得金牌。
通过过去的几次比赛,我知道赢得金牌有多难,而且我认为很多其他团队都比我强,所以我怀疑自己是否配得上金牌。我唯一能想到的是我在这次比赛中真的很幸运。
正如你在下面看到的总结和我分享的代码一样,我所做的只是很好地利用了阅读公共Kernel和讨论区。
我认为建立可靠的验证策略是最关键的部分。许多人使用以月份为分组的GroupKFold或不打乱的KFold,但我对用未来数据预测过去感到不舒服。
相反,在阅读了各种Kernel和讨论后,我的策略是从Chris (@cdeotte) 的讨论中获得了灵感。对于5折交叉验证,我使用训练数据的最后20%作为留出集,并测量了3个随机种子的平均AUC作为验证分数,以及预测测试数据时的平均迭代次数。在预测测试数据时,我使用了没有早停的分层5折。
在建立了这个验证方案后,验证分数和公榜趋势几乎完全相关。我认为这是我在这次比赛中做得最好的部分。
下面是我的验证方案建立后的验证分数、公榜、私榜趋势图。

在建立验证方案后,我遵循了Konstantin (@kyakovlev) 的讨论并创建了这样的流程:
我使用了两个模型:LightGBM和CatBoost。两者都基于Konstantin (@kyakovlev) 的公共Kernel。
在集成之前,我使用LightGBM,基于IEEE FE with some EDA。
在LightGBM达到公榜0.9592后,我创建了一个CatBoost模型用于集成,基于IEEE CatBoost baseline with GroupKFold CV。
最终模型的分数如下: