343. IEEE-CIS Fraud Detection | ieee-fraud-detection
感谢所有的参与者、Kaggle 管理团队、IEEE-CIS 以及 Vesta 公司,是你们让这场激动人心的比赛得以实现。我想简要分享一下我的第13名解决方案,这让我获得了我的第一枚单人金牌。
起初,我使用了不打乱顺序的5折交叉验证(5 fold CV)。在比赛的后期阶段,我转而使用简单的时间分割,并将最后约10万条记录作为验证集。这是因为5折交叉验证花费的时间太长。此外,我基于时间分割生成的一些重要特征在5折交叉验证中可能会导致数据泄露。
当我仔细检查 df[df.isFraud==1] 时,我发现存在许多非常相似记录的簇。因为我在“Home Credit Default Risk”比赛中经历过类似的情况,所以我能够迅速理解这意味着什么以及我该做什么。我通过暴力破解的方法,利用 D 特征和卡片信息生成了各种各样的 user_id。它们涵盖了从严格确定性的到稍微模糊但对物理地址/电子邮件地址变更具有鲁棒性的广泛范围。这种组合极大地提高了我的分数。仅严格版本的 user_id 在公开榜上给了我约 0.9620 的分数,但结合两者后结果超过了 0.9640。
我利用 user_id 进行了各种特征工程。在大量生成的特征中,针对过去记录的 Seq2Dec 和目标编码在 CV 和 LB 上都显示了显著的改进。我认为 Seq2Dec 是编码单个交易的好方法,因为它可以防止顺序信息的丢失,并且可以处理可变长度的序列。此外,我添加了典型特征,例如 user_id 序列的计数、份额、长度,以及 sinse_first_obs_user_id(首次观测用户ID以来的时间)、to_last_obs_user_id(距离最后一次观测用户ID的时间)等。
图. Seq2Dec 示意图
我主要使用 LightGBM,并加入了少量的 Regularized Greedy Forest 作为补充。我通过种子平均以及对具有不同 n_folds 的 Seq2Dec/TargetEncoding 模型进行装袋来增加模型的多样性。
在 6381 支队伍中排名第 13,公开榜:0.965086,私有榜:0.941338