返回列表

2nd place solution

351. Categorical Feature Encoding Challenge | cat-in-the-dat

开始: 2019-08-23 结束: 2019-12-09 数据算法赛
第二名方案

第二名方案

作者:aldparis
比赛排名:第 2 名

大家好,

首先,我要感谢 Kaggle 提供了这个有趣的挑战,在这个比赛中,一种回归技术最终赢得了胜利。我还要感谢所有的参赛者。特别要感谢 Robert Stockton:他的帖子《为了达到顶尖排名...》对我帮助很大,它说服我去寻找简单的东西,并尝试尽可能简单的技术。

微软恶意软件预测

一年前,在阅读了《Python机器学习基础》(Sarah Guido, Andreas Mûller O'Reilly)之后,我尝试了我的第一个真正的挑战(微软恶意软件预测)。我通过混合两个 LGBM 模型最终获得了第 10 名。当时发生了巨大的排名变动(我从公共榜的第 170 名跃升至私有榜的第 10 名)。我是幸运的吗?但在那次挑战中,我学到了非常重要的一点:相信我的 CV(交叉验证),并且只相信我的 CV

类别特征挑战 - 开始阶段

我没有很多时间去尝试大量的挑战和测试各种各样的东西。在这个类别特征挑战开始时,几位选手写道 逻辑回归 应该是一个不错的解决方案。太棒了,这对我来说是个挑战!各特征之间的 Cramer's V 值非常低,这意味着特征是相互独立的,树模型技术可能效果不佳。而且对抗验证也没什么用。

像你们许多人一样,我开始尝试独热编码,然后是目标编码,温度计编码,但除了独热编码外,没有什么其他方法有显著效果。

简约性

回归技术喜欢简约。在尝试了像《为了达到顶尖排名...》建议的那样,测试目标与每个有序特征之间的线性关系,并以第一个 0.8085 的分数跃升之后(我既幸运又自豪),我尝试了许多方法来获得更简约的模型:我测试了与其他名义特征的线性关系,尝试对逻辑回归系数的值进行聚类,尝试对值进行分箱等等。我发现 day 值的目标均值存在对称性。

交叉验证 / 目标泄漏 / 公共排行榜

AUC 顶尖排名之间的差异在小数点后第五位,所以我需要一种方法来确保在不使用公共 LB 的情况下做出正确的决定(我不信任公共 LB——信任公共 LB 就像只信任一个测试折一样)。而且,我也一直关注目标泄漏;我的 CV 上的 AUC 在增长,但我两周前意识到我的公共分数并没有增长。

所以我必须找到一种既能做出正确决定又能避免目标泄漏的方法:我读到避免目标泄漏的最简单方法是交叉验证。因此,我在第一次 CV 以外的其他折上重复了一些交叉验证,并再次重复:在做决定之前,如果我在几组 5 折组合中得出相同的结论,那么这个结论就是好的。否则就不是。

最终提交

我的两个私有提交在公共排行榜上仅得分 0.80839(昨天 UTC 时间晚上 11 点)和 0.80845:它们在私有排行榜上均得分 0.80282。昨天 UTC 时间晚上 11 点,我并不是很乐观。但我看到许多顶尖选手提交了很多解决方案,所以我有了机会,也许他们太信任公共 LB 而不是他们自己的 CV 了。

我在公共 LB 上最好的解决方案(0.80852)在私有榜上仅得分 0.80279。

达到公共 LB 顶点的有序特征技巧其实藏在两周前我的一篇帖子中。抱歉!我相信我们都会看新的 Notebook,但只有少数人会看讨论区。这是我的解决方案

我还有其他在公共 LB 上得分 0.80847 或 0.80845 的解决方案:我没有选择它们,因为我没有对它们进行双重或三重交叉验证,或者因为当我这样做时,得出的结论与我的第一次 CV 不同。我不信任它们。

我玩得很开心,在这次挑战中学到了很多。

同比赛其他方案