哇!我终于进入了前 5 名。更特别的是我刚满 26 岁……时机完美的礼物。😁
我想感谢 Kaggle 持续组织这些竞赛。我已经参赛一年了,从 Playground 系列赛中学到了很多。你可以向像 @optimistix, @tilii7, @ravi20076 这样的伟大、熟练的人学习,还有两位天才 @cdeotte 和 @siukeitin。我参加 Playground 系列赛是我后来赢得 3 枚银牌的主要原因。我真诚地建议新人从这里开始。
感谢:@sagarnagpure1310, @mikhailnaumov, @masayakawamata, @yeoyunsianggeremie, @yekenot 和其他人提供的公开代码。
我的方法:两个模型 + 大量特征工程
我使用 LGBM 作为主力,along with 一个强大的 DNN。我开始得比较晚(最后 10 天),所以我从公开笔记本开始并进行优化。
首先,我训练了大约 8 个模型(cv_xgb 0.9276, hgb 0.9273, catboost 0.9272 .. 等),并以多种方式集成它们,但增益微不足道。所以我决定更多地投入到特征工程(FE)中。
为了避免浪费我早期的集成努力,我使用测试集上的集成预测作为伪标签。这非常有效(CV 提高了 +0.0004)。
然后两个模型(LGBM, DNN)都遵循相同的 pipeline:
- 大型且多样的工程特征空间(大约 100 个新特征)。出乎意料的是,n-way 交互对我没有帮助 🤷♂️。
- 基于集成预测的伪标签。
- 分层 5 折交叉验证(CV)训练。
- N_SEEDS = 5 次独立训练运行。
- 用于集成加权的差分进化爬山法(使用
scipy.optimize.differential_evolution对 5 个种子进行最佳凸组合)。这使得 CV_DNN 比最佳单种子提高了 +0.0004,CV_LGBM 提高了 +0.0002。 - 通过应用优化的种子权重进行最终测试预测。
对于最终提交,我使用了 LGBM 和 DNN 的加权平均。
| 模型 | CV | 公开榜 (Public LB) |
|---|---|---|
| LGBM | 0.9284 | 0.9279 |
| DNN | 0.9274 | 0.927 |
公开榜 (Public LB): 0.928
私有榜 (Private LB): 0.92915
一些笔记/提示:
- 我注意到很多人对 DNN/CatBoost 的性能不满意。对我来说它们效果很好,但你需要区别对待它们。特征工程(FE)有时就是一切;它决定了架构如何“看待”数据。
- 始终信任你的 CV 分数,但避免泄露,尤其是目标编码 (TE)。我反复看到公开笔记本在这方面出错。
- 当测试数据足够大时监控榜单(0.2 × 254,569 是一个很好的指标),但要与 CV 结合。
- 逐渐添加特征并检查 CV 是否改善。一次性丢弃一批特征可能会相互抵消。
- (个人观点;不知道其他人是否同意)LLM 对于创造力完全无用。它们只是记忆并漂亮地吐出来。除非你的基线很糟糕,否则不要浪费时间让它们“优化”任何东西。用它们搜索或编写代码是可以的,但也仅此而已。
- 我强烈建议阅读 @cdeotte 之前的解决方案。