651. Playground Series - Season 5, Episode 5 | playground-series-s5e5
在本次比赛中,主要的挑战是交叉验证(CV)与 leaderboard(LB)之间的相关性不稳定,且特征工程(FE)效果不佳。
所以我决定构建一个集成模型,并完全忽略公共 LB。
起初,我专注于通过暴力列聚合进行前向选择的特征工程。
但大多数模型保持在少于 20 个特征且没有改进。
然后,我转向了集成方法。
我也没有使用 Optuna 或网格搜索。相反,我保存了所有测试过的超参数组合的袋外预测(OOF)及测试集预测。
由于特征工程效果不佳,我决定训练(过多)不同超参数的模型。
在比赛的最后一周,我训练了
LGB, XGB, CatBoost(GPU), HGB, YDF, Random Forests,总共超过 2000 个树模型和 10 个 MLP(GPU)。
我喜欢爬山算法,因为它可以通过将模型权重强制为零来进行模型选择。
(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,它们在集成中的贡献也是最大的!
由于特征工程在本次比赛中并不重要,我不提供特征工程和模型拟合的过程,实际代码只是带有不同超参数外部循环的标准 5 折 CV 流程。
cvxpy 的用法以及我的解决方案提供在下方链接: