返回列表

5th Place Solution: Ensemble of 68 models

651. Playground Series - Season 5, Episode 5 | playground-series-s5e5

开始: 2025-05-01 结束: 2025-05-31 大众健身 数据算法赛
第五名解决方案:68 个模型的集成

第五名解决方案:68 个模型的集成

作者: Alan1305
发布时间: 2025-06-01
竞赛排名: 第 5 名

引言

在本次比赛中,主要的挑战是交叉验证(CV)与 leaderboard(LB)之间的相关性不稳定,且特征工程(FE)效果不佳。
所以我决定构建一个集成模型,并完全忽略公共 LB。

工作流程

起初,我专注于通过暴力列聚合进行前向选择的特征工程。
但大多数模型保持在少于 20 个特征且没有改进。
然后,我转向了集成方法。

超参数 (HPs)

我也没有使用 Optuna 或网格搜索。相反,我保存了所有测试过的超参数组合的袋外预测(OOF)及测试集预测。
由于特征工程效果不佳,我决定训练(过多)不同超参数的模型。

在比赛的最后一周,我训练了
LGB, XGB, CatBoost(GPU), HGB, YDF, Random Forests,总共超过 2000 个树模型和 10 个 MLP(GPU)。

爬山算法 (Hill Climbing, HC)

我喜欢爬山算法,因为它可以通过将模型权重强制为零来进行模型选择。
(Lasso 也可以做到,但通常很难优化调整。)
然后,我顺序执行爬山算法作为模型选择工具,直到较小的 OOF 集合不再提供更好的 CV。
注意这个过程是受顺序影响的,我对 OOF 进行了数千次排列以获得最终的 79 个 OOF 子集。

然后,我使用 cvxpy(二次规划)对剩余的 79 个 OOF 再次执行爬山算法。
cvxpy 提供确定性结果,应该是不受顺序影响的,通常比顺序爬山算法更好更快。
起初我没有使用它,因为它的内存使用量非常高。
最终剩下 68 个 OOF。

结果

提交类型 CV 公共榜 (Public LB) 私有榜 (Private LB)
最终提交 (cvxpy 从 79 个中选 68 个) 0.0588017 0.05671 0.05846
最终提交 (顺序爬山算法) 0.0588070 0.05671 0.05846
最佳未选提交 约 0.05885~0.05890 0.05692 0.05845

在最后几天,我还发现集成预测比单模型预测的 CV-LB 相关性要稳定得多。
在我的案例中,通过爬山算法,更好的集成 CV 意味着更好的 LB。
最终的 2 个提交也是我的最佳 CV 和公共 LB。

集成是本次比赛的关键,而神经网络 (NN) 是关键中的关键。
我训练了超过 2000 个树模型,只有 10 个 MLP。
然而,在我最终的 68 个模型集成中,有 7 个是 MLP,它们在集成中的贡献也是最大的!

心得

  1. 起初尝试不同策略。
    我发现稳定的 CV-LB 相关性和神经网络在集成中的力量太晚了。所以我没有太多时间尝试更多的神经网络和更多的集成技术。
  2. 构建良好的多样化集成,而不是结合强大的单模型。
  3. 信任 CV。 融合公共榜作品是可以的,但如果权重是由运气/LB 探测决定的,那么当 CV-LB 不稳定时,榜单将会发生剧烈变动。

由于特征工程在本次比赛中并不重要,我不提供特征工程和模型拟合的过程,实际代码只是带有不同超参数外部循环的标准 5 折 CV 流程。
cvxpy 的用法以及我的解决方案提供在下方链接:

同比赛其他方案