排名第 2 的方案 - 暴力集成(118 个袋外预测)
排名第 2 的方案 - 暴力集成(118 个袋外预测)
作者: SCRIPTCHEF (Yuwei)
发布日期: 2025-01-01
竞赛排名: 第 2 名
获赞: 27
参加了几个月的 Playground 系列赛之后,我很高兴终于获得了前 3 名的成绩。这几个月是很好的学习经历,我感激社区中所有贡献共享知识或引入新见解技术的成员。
我想说这次比赛感觉比往常更直接一些,因为公共 leaderboard (LB) 分数和交叉验证 (CV) 分数几乎完全一致(CV 分数降低 x 几乎总是导致公共 LB 分数降低 x 左右),这意味着在选择提交或识别模型是否过拟合时需要较少的精细操作。这也反映在结果中;与前几场比赛相比,前 10 名几乎没有排名波动。
我的整体方法没有任何新颖之处——它遵循收集袋外预测 (OOF)、集成并重复的原则,这与 这里 非常相似。此外,在看到 @cdeotte 的解决方案后,我觉得我的解决方案非常属于“暴力”方法😀。尽管如此,我还是使用了一些可能对其他人有用的技术或工具,下面我将解释。
模型和框架
- 自动机器学习 (AutoML) 框架是生成许多袋外预测的最简单方法,我建议任何尚未探索使用这些框架的人在接下来的比赛中尝试一下。我使用了相当多的自动机器学习框架来生成我的袋外预测, namely autogluon, h2o, FLAML 和 LAMA。关于这些的一些说明:我发现 autogluon 通常表现良好,但对过拟合非常敏感(一种称为堆叠信息泄露的现象,由 @innixma 在 这里 提到)。当使用基础特征时没有发生这种情况,但当我添加 healthscore 的分类版本(这是一个高基数特征)时,高层模型经历了严重的过拟合。H2o 和 LAMA 这次表现较弱,即使提供相同的特征集,性能也没有达到我个人创建的模型的水平。FLAML 的表现让我惊喜,但这需要更长的运行时间。最后,为了给 FLAML 提供足够的拟合时间,同时仅利用免费的 Kaggle 资源,我最终在单独的 Notebook 中并发地为五个折叠中的每一个拟合了五次 FLAML,之后组合预测。
- Pytorch Tabnet,预测效果不佳,但在最后集成 OOF 时非常有用。
- Tensorflow Deeptables,这次比赛的表现相当弱。
- 个人模型,没什么特别的,只是实现来自不同库的各种模型(XGBoost, LGBM, Catboost)以符合基本接口,如果感兴趣可以在 这里 找到。
特征工程
- 感谢 @backpaker 贡献他的特征集。我运行了一些特征重要性分析,识别出了一 subset 有用的特征,并使用各种模型进行了实验。还要感谢 @swagician 分解了 backpacker 的各种特征工程技术,并指出 health score 的分类至关重要,是我分数提高的主要原因之一。
- @backpaker 还引入了 nonlog catboost OOF 特征(堆叠),提供了轻微的性能提升,我尝试进一步发展 this technique,通过实验创建另一个 catboost OOF,训练用于预测多分类标签,其中标签对应于基于目标顺序组织的目标特征,即 0 - 9 'Premium Amount' 分配给类别 0,10 - 99 类别 1,这也产生了小的性能改进。
- 我使用 autofe 生成额外特征,resulting in models which achieved similar performance to the ones trained on backpacker's features. 我没有结合这些特征工程方法,而是在每个不同的特征集上训练相同的模型,以提供一些变化的预测,我认为这在后来的集成中可能表现更好。
集成
- 我使用 Ridge 回归器作为主要的集成技术来决定分配给每个 OOF 预测的权重,但 hillclimbers 用更少的模型(73 个)达到了相同的分数。
- 我还使用 Tabnet 来集成预测,然后将其作为另一个 OOF 加入,这确实提高了整体集成分数,因为它提供了预测的非线性组合,事实证明这很重要。
最后我想指出,早在讨论论坛中,似乎大多数人都排除了使用原始数据集,但经过一些实验,我发现原始数据集大大提高了调优模型的性能,将我当时的最佳模型从大约 1.031 的 CV 分数降低到了 1.027。
如果我有不清楚的地方,请随时提问。感谢美好的一年数据科学,我期待下一个——新年快乐!
Yuwei (SCRIPTCHEF)