返回列表

3rd Place Solution: An Open Secret - Gather, Ridge, Repeat

624. Playground Series - Season 4, Episode 9 | playground-series-s4e9

开始: 2024-09-01 结束: 2024-09-30 定价与促销 数据算法赛
第三名解决方案:公开的秘密 - 收集,岭回归,重复

第三名解决方案:公开的秘密 - 收集,岭回归,重复

作者: Optimistix | 发布时间: 2024-10-01 | 竞赛排名: 第 3 名

正如我在 之前的总结文章 中提到的,我打算本月退后一步,更审慎地参与,我也确实这样做了。我很快就会详细介绍细节,但让我先解释一下标题,它分享了一个公开的秘密,即我的方法本质上与之前相同:

收集 (Gather): 收集 OOF(折外)预测。
岭回归 (Ridge): 构建集成模型 - 你不一定非要使用岭回归,但它通常表现很好,而且很适合玩文字游戏 😀
重复 (Repeat): 字面意思,就是这样 - 当然也是为了完成文字游戏。

在详细介绍之前,我想感谢那些分享见解、发现和代码的慷慨人士,包括但不限于:

@alexryzhkov (以及 AutoML 团队), @roberthatch, @omidbaghchehsaraei, @cdeotte, @siukeitin, @ravaghi, @oscarm524, @ravi20076, @tilii7, @ricopue, @serhiikravtsov, @allegich, @backpaker

第一阶段:潜伏

我在 17 号有一个为期多周的 LLM 项目要完成,并且在那之后的一周内还要 review 该课程中 peers 的 3 个项目。家里也发生了持续的健康紧急情况。所以很明显,直到最后一周左右,甚至整个期间,我的参与都会非常有限。在这个阶段,我密切关注竞赛,查看讨论帖和有趣的公开 Notebook。我偶尔提交一个模型看看得分,并时不时屈服于“盲目融合”的诱惑。很高兴本月有 @cdeotte 参与,他发布了几篇深刻的帖子(引发了 @siukeitin 和其他人的深刻回应),并慷慨地分享了 Notebook。

基于过去几个月(尤其是上个月)的竞赛,我认为 Light AutoML Testers (@alexrhyzkov 等人)、@roberthatch 和 AutoML Masters (@innixma 等人) 的第一天解决方案将经得起时间的考验 - 既然 @alexrhyzkov@roberthatch 慷慨地分享了他们的 OOF,我决定以此为起点。我也觉得接近 72000 的公共榜单分数(没有任何盲目融合)可能会表现不错。在这个阶段,我做的最有后果的事情是将来自 @alexrhyzkov 的 24 个 OOF 扔进 AutoGluon,并确认它们使用 GPU-P100/CPU/GPU-T4 的得分分别为 72046/72057/72063。

第二阶段:逐渐深入参与

大约在 20 号,我终于开始整合 OOF。我首先结合了来自 @alexrhyzkov@roberthatch 和最终获胜者 @martinapreusse 的 OOF - 这 30 个 OOF 加上岭回归使我在公共榜单上获得了 71958 分,在私有榜单上得分为 63001,这将排名第 5。有了我的第一个低于 72000 的分数,我觉得事情有了坚实的基础,从那以后,我一次添加几个模型。鉴于我的时间很少,直到还剩 3 天时我才只有 41 个 OOF - 每天添加一个模型左右。临近结束时,我开始拼命添加新的 OOF,尝试是否包含原始数据集、更改超参数、使用 AG 配合 CPU/P100/T4 等。直到倒数第二天,我才意识到 KaggleX 数据集(使用 GAN 在同一原始数据集上生成,因此可能与竞赛数据集非常相似)实际上是可访问的,我 Quickly 重新运行了几个包含 KaggleX 的 Notebook。 retrospectively 看来,这对公共榜单有帮助,但对私有榜单没有帮助。时不时地,我会与得分最高的公开 Notebook 融合,这通常能改善公共榜单分数,比例从 99:1(我的:公开的)到 70:30(但很少超过这个比例)。

最后,我达到了 77 个 OOF,本可以添加更多,但我可以看到 CV 分数几乎没有改善,偶尔甚至变差。最后,我选择了未与其他 Notebook 提交融合的最佳得分提交(71808,私有 62958)和通过与得分最高的公开 Notebook 融合实现的最佳公共榜单分数提交(71770,私有 62977)。整个月,我们一直在讨论是否会有大洗牌,确实发生了巨大的洗牌,除了我之外,前 11 名中的每个人都上升了 300 名或更多!我当然很高兴能在洗牌中幸存下来,并在过去 7 场 Playground 竞赛中第 6 次进入前 10 名。热烈祝贺 @martinapreusse@gerlandore@tilii7 和其他前 10 名(以及前 1% 等)及 beyond 的人,他们坚持己见,收获了回报!

所以,结局圆满。但还有一个小启示 оставалось ......

尾声:一个被我忽视的潜在第 1 名解决方案和一个第 2 名解决方案 - 爬山算法是在给我提示吗?

每隔一段时间,我会将集成模型产生的 OOF 预测扔进我的集合中 - 我是在一位 Playground 系列前获胜者的总结文章中发现这个想法的(我现在不记得是哪一篇了),它往往有效(但也可能导致过拟合 - 所以请自行判断)。这次,我使用了基于 30 个 OOF 的 AG 产生的此类 OOF,以及 33 个 OOF 后的爬山算法 (HC) - 它们似乎都有帮助,虽然只有一点点。这是 Kaggle,我会接受的。

但是当我扔进基于 41 个 OOF 的 AG 产生的 OOF 预测时(OOF 得分:72185,公共榜单:71855),发生了一件奇怪的事情 - 允许正负权重的 HC 像往常一样工作,但仅允许正权重的 HC 甚至没有添加一个其他 OOF 到这个模型中。我以前从未见过这种情况,想知道这是否某种迹象表明这已经是极限了。然而,岭回归确实产生了更好的 CV 和榜单分数,所以我继续前进。

竞赛结束后,我再次查看了我的分数 - 通过搜索 '6295',我发现我有 5 个分数优于我的最终分数 (62958),都在 62950 到 62955 之间。然后我搜索 '6296',发现又有五个分数在 62959 到 62966 之间。'6294' 没有出现任何结果,所以我想我有 11 个分数介于排名第 2 和第 4 的分数之间,然后去吃了晚饭。之后,我意识到可能有更低的分数,果然有一个 62933,一个潜在的第 2 名分数!这个分数是使用 48 个 OOF 的岭回归产生的,包括基于 41 个 OOF 的 AG-OOF。这促使我进一步查看,果然,有一个 62892 - 猜猜怎么着,它与上面提到的基于 41 个 OOF 的 AG 运行来自同一轮,只不过那个是用 GPU (T4),而这个是用 CPU(s)(OOF 得分:72092,公共榜单:71922)。所以我错过了一个潜在的第 1 名分数。不过不能感觉糟糕,因为即使我只坚持自己的集成模型,我也不太可能选择那个。

附注:岭回归产生了最好的集成分数
有一段时间,我使用了各种集成器 - 岭回归、AG、带和不带负权重的 HC(这次没有使用 GBDT)。例如,以下是使用 30 个 OOF 通过各种集成方法的结果:

集成器 CV 得分 公共榜单 私有榜单
岭回归 72018 71958 63001
AutoGluon, GPU T4 72311 71993 63029
AutoGluon, GPU P100 72317 72000 63028
AutoGluon, CPUs 72334 72011 63029
爬山算法 72297 71973 63007
爬山算法,仅正权重 72321 71984 62991

这具有相当的代表性(除了改变 CPU/GPU 选择没有以任何固定顺序产生 AG 结果)。岭回归几乎总是产生最好的 CV 和榜单分数,虽然我们看到它偶尔没有产生最好的私有榜单分数,但它速度极快,用它不会出大错。这把我们带回了

收集,岭回归,重复。

同比赛其他方案