678. Playground Series - Season 5, Episode 11 | playground-series-s5e11
大家好,
我很高兴展示我在 Playground 第 5 季 第 11 集竞赛的解决方案 writeup。对我来说,这是一个非常动荡的月份,前两周有很多严重的健康问题,但我很高兴现在身体健康并恢复了竞技长跑,而且在我看来,基于我所支配的可用时间,我在竞赛中的表现也不错。我想向在我月初困难时期给予支持的亲密家人和朋友表示衷心的感谢。
我想向 Kaggle 举办这个有趣的挑战以及我的 fellow 参与者在整个月份中的慷慨分享表示衷心的感谢。我的解决方案是许多公开想法和我私人输入的产物。让我们深入探讨以下细节 -
如下图所示,我的整体解决方案架构依赖于 3 个主要支柱 -
我在这里尝试了很多想法,其中很多在不同阶段失败了。我们将在后面的部分单独考虑这些。
这是本次竞赛的核心元素。我从最初几天就发现,这个数据集很大,相当稳定,对集成中度敏感,但对所选特征极其敏感。1-2 个好特征会大幅提升 CV 分数,而一系列中等特征不会超过我 0.92630 的私有 baseline 分数。在某些情况下,添加某些特征甚至会 considerably 降低 CV 分数。我的初步实验和论坛上的一些相关公开意见促使我在这个月可用的时间内尝试尽可能多的特征想法。我的关键特征想法包括 -
我使用所有这些想法创建了超过 1000 个特征,并在整个月中从我的特征存储中使用了多个特征子集。使用这样的主特征存储很方便,通常在迭代实验想法时节省时间和精力。使用 GitHub 仓库组织相关代码也有助于版本控制。
我的单一模型通常使用 65-800 个特征。相关模型的 CV 分数随后呈现。
我在整个月中使用了很多具有不同参数的单一模型,很多想法表现不错,但也有很多失败了。让我们在这里详细讨论它们,以及组件模型的 CV 分数 -
| 模型类型 | 关键想法和思路 | CV 分数范围 | LB 分数范围 | 关键失败和成功点 |
|---|---|---|---|---|
| XgBoost | - 提供了最好的单一模型选项 - 较小的特征集,最少目标编码和 n-grams 表现最好 - 降低学习率有效,我使用 0.0010 - 0.0030 的学习率,CV 分数有所提高 - 6+ 的深度适得其反 - 随着模型中特征增多,增加 reg_lambda 富有成效 |
0.92630 - 0.92778 | 0.92610 - 0.92770 | - 伪标签单独表现良好但在 blend 中失败 - 使用预训练和微调类型的安排完全失败 - 原始数据作为列的表现优于作为行 - 像 init_model 和 base_preds 这样的结构失败了 - 使用其他特征为剩余 11 个原始数据集列构建伪模型失败了 |
| LightGBM | - 提供了良好的竞争性单一模型选项 - 较小的特征集,最少目标编码和 n-grams 表现最好 - 0.0050 - 0.0070 的学习率在此模型类型中最佳 - Max-leaves 是这里的关键参数 |
0.92640 - 0.92774 | 0.92620 - 0.92772 | - 伪标签单独表现良好但在 blend 中失败 - 使用预训练和微调类型的安排完全失败 - 像 init_model 和 base_preds 这样的结构失败了 - goss 变体是一个很好的多样性选项 |
| Catboost | - 提供的单一模型性能有限 - 中等特征集,100-150 列,最少目标编码和 n-grams 表现最好 - 0.01 的学习率在此模型类型中最佳 - 其他参数在 CV 性能上没有产生显著差异 |
0.92630 - 0.92748 | 0.92624 - 0.92740 | - 伪标签在这里完全失败 - 整体模型类型单独来看是失败的,但我保留了一些单一模型以增加多样性 |
| TABM | - 非常好的性能,经常在 leaderboard 上媲美 XgBoost 模型性能 - 四舍五入的特征对此模型提升最大 - tabm-normal 是选项中最好的架构 - 模型训练时间高于 gbdt 对应模型,但使用更大的 GPU 如 A100/ A6000Ada 大大减少了时间 |
0.92665 - 0.92721 | 0.92698 - 0.92765 | - 在集成中提供了适量的多样性,并单独为 leaderboard 分数提供了良好的提升 |
| REALMLP | - 在 leaderboard 上表现类似于 TABM 对应模型,但 CV 分数较低 - 四舍五入的特征和 bigrams 对此模型提升最大 - 模型训练时间高于 gbdt 对应模型,但使用更大的 GPU 如 A100/ A6000Ada 大大减少了时间 |
0.92650 - 0.92695 | 0.92690 - 0.92769 | - 在集成中提供了适量的多样性,并单独为 leaderboard 分数提供了良好的提升 |
所有这些模型都使用以下 CV 方案进行训练 - StratifiedKFold(5, random_state = 42, shuffle = True)
这是本次竞赛的关键步骤,因为与其他 playground 竞赛不同,这不是最有效的步骤。选择一个 robust 的 blend 策略对于最大化收益至关重要。我的模型融合策略分为 3 个部分 -
| 部分 | 策略 | CV | LB |
|---|---|---|---|
| 1 | 使用 autogluon stacking | 0.92781-0.92820 | 0.92776 - 0.92787 |
| 2 | 使用逻辑回归 blending | 0.92781-0.92784 | 0.92776 - 0.92788 |
| 3 | 多种集成方法和过去提交文件的简单平均 | 0.92778-0.92806 | 0.92778 - 0.92788 |
总而言之,一个好的单一模型这里是关键,很多集成候选者 elicited 更好的 CV 但与好的单一模型相比 LB 分数更差。这对于此类 Kaggle 竞赛来说是不寻常的。
这是一个相对较快的训练 pipeline,所以我在不同模型中采用了以下 GPU
| 模型类型 | GPU |
|---|---|
| XgBoost | L4 Colab, A100 Colab (80GB) |
| LightGBM | L4 Colab, A100 Colab (80GB) |
| CatBoost | A6000Ada |
| TABM | A100 (80GB) |
| REALMLP | A100 (80GB) |
衷心祝贺获奖者,并祝愿即将到来的假期季节愉快!也祝愿大家在 2025 年最后一个 Playground 集中取得最佳成绩!