返回列表

18th place solution: single xgboost with custom AUC loss

646. Playground Series - Season 5, Episode 3 | playground-series-s5e3

开始: 2025-03-01 结束: 2025-03-31 气象预报 数据算法赛
第 18 名解决方案:使用自定义 AUC 损失的单个 XGBoost

第 18 名解决方案:使用自定义 AUC 损失的单个 XGBoost

作者: Spiritmilk (act18l)
发布时间: 2025-04-01
比赛排名: 第 18 名

很高兴在这次排名波动剧烈的比赛中保持了相对稳定的排名。实际上,这次比赛对我来说分为两个截然不同的阶段。

早期阶段

私有分数 0.90577
在这个阶段,我最好的模型提交于 3 月 4 日。它是神经网络和 GBDT 的融合,基于以下优秀的笔记本。
@aryagokhNN 笔记本
@mariusborelGBDT 笔记本
我所做的改进可以在他们的评论区找到。

我的其他贡献可以在论坛中找到。

后期阶段

私有分数 0.90395
在比赛的后期阶段,由于其他个人事务繁忙以及笔记过于混乱造成的困惑,我没有时间整理它们。所以,我决定放弃之前的努力,重写笔记本,并花了最后一周时间完善它们。

数据集

值得一提的是,我们了解公共数据集,在训练期间整合它们会更好吗?
然而,在我模拟私有榜单的实验中,只有 50% 的情况取得了更好的分数。我总是觉得自己运气不好,所以我放弃了在训练中添加它们。

特征

特征来自我自己,例如 某些云值具有更好的预测精度 和来自 @cdeotte笔记本

对我来说,在各种特征选择方法中,递归特征消除 (RFE) 始终能提供更好的交叉验证 (CV) 结果,但其计算成本过高。因此,我采用了 @cdeotte笔记本 中概述的 前向特征选择 (FORWARD FEATURE SELECTION) 方法进行特征选择。

K 折交叉验证 (Kfold)

我使用 Kfold(6)(相当于按年份分组的 groupkfold)和 Kfold(5,shuffle=True)

模型

xgboost 带有 自定义 AUC 损失 (AUC custom loss)

事实上,有人在早期的比赛中使用 AUC 损失并取得了前 4% 的排名。
https://www.kaggle.com/code/michaelbryantds/auc-custom-loss-function-top-4

为什么我选择 XGBoost 而不是其他 GBDT 算法或前辈们使用的神经网络?

一方面,在神经网络上使用自定义 AUC 损失非常耗时。另一方面,XGBoost 的自定义损失函数更实用。例如,当自定义 BCE 时,XGBoost 可以产生完全相同的结果,而 LGBM 似乎做了一些内部优化,导致细微差别。此外,XGBoost 让我意识到了 base_score 的差异。

提交选择

我选择了交叉验证 (CV) 减去公共榜单 (LB) 分数最高的两个笔记本。

致谢

感谢上述笔记本的作者做出的重大贡献。此外,我想感谢那些在笔记本和论坛中积极分享见解但未提及的人。他们的奉献和贡献也非常值得感谢。

同比赛其他方案