441. Tabular Playground Series - May 2021 | tabular-playground-series-may-2021
大家好,
这是我在 Kaggle 上四年来的第一篇帖子。自从注册以来,直到今年推出表格竞赛系列之前,我从未真正参与过。这些竞赛促使我更多地参与其中,我在这里玩得很开心,并从社区里分享作品的优秀人才那里学到了很多东西。我个人只需要在分享和投票方面做得更好,所以这是一个开始。
我对这个结果有点惊讶,因为我的解决方案真的很枯燥,没什么特别的。我也不确信这个解决方案是一个好的分类器,因为它仍然在处理稀有类别方面很吃力(尽管通过随机种子的集成减少了这种影响)。我认为最终起作用的是相信我的本地 CV(交叉验证)结果,不使用公共 LB(排行榜),也不盲目使用 AutoML 的结果。别误会,这些工具非常有帮助,但在这次比赛中,它们对我的本地 CV 没有帮助,所以我最后没有使用它们。
我的工作流程是在 Google Colab 中进行的,代码相当混乱,有时甚至毫无组织。由于日常工作非常繁忙,我没有太多时间整理,但我想如果有人觉得这些有用,还是分享一下比较好。下面也是最终有效方法的描述。
这里是我在 Google Colab 上关于单个模型和 CV 的主要代码(不包括堆叠阶段)。
我在这里什么都没试成功。我尝试了 PCA、聚类,也试过 featuretools,但所有这些都导致了严重的过拟合或糟糕的本地 CV,所以最后我没有深入研究特征工程。
对于特征选择,由于不存在任何主导特征或与目标高度相关的特征,我怀疑移除特征不会对 CV 有帮助,所以我保留了所有特征。
对于分类特征,对于我的线性模型(逻辑回归),我使用 scipy 稀疏特征进行独热编码以适应内存,而对于所有其他模型(都是基于树的),我只使用了 OrdinalEncoder(本质上是标签编码)。
我最终训练了 5 个不同的模型,每个模型都在 3 个随机种子上进行了 5 折分层 CV 训练,对每一折使用袋外预测,并对各折进行平均以预测测试集。这些模型包括 LogisticsRegression、RandomForest、XGBoost、LightGBM 和 CATBoost。加权类别对 LogisticsRegression 并没有真正起作用,我在其余模型中使用了默认的类别权重。我使用 Optuna 对每个模型进行了轻度调整(您可以在上面的代码中看到我的最终参数)。
在阅读了 @remekkinas 的笔记本指出这可能行不通后,我并没有真正尝试。他的分析对我来说很有道理,而且我没有时间,所以没有进一步研究。
堆叠在这里效果很好。我尝试了模型的加权平均,效果不如堆叠,所以我没有使用。我对上述所有模型使用了 5 折堆叠,并使用了 RidgeRegression 作为元模型,在 sklearn 中使用了 CalibratedClassifierCV。
我最终对概率进行了截断(低于 0.05 和高于 0.95)以帮助 log_loss 指标。这篇文章简要解释了这一点(截断有助于缓解 log_loss 指标中过小或过大数值的极端情况)。最终提交的公共 LB 为 1.08564,私人为 1.08763。看起来与顶级公共笔记本融合可以将私人 LB 分数降低到 1.08742,但我没有这样做。
太多了,我已经数不清了。最直接使用或学习的几个如下:
Faith @fatihozturk 他在一月份比赛中的第三名解决方案,给了我一个稳健的 CV 框架,我一直在使用,并且我也基于他的笔记本进行了堆叠。
Bizen @hiro5299834 他在这些系列中分享的每一本笔记本对我来说都非常有价值和有见地。感谢你的慷慨。
@remekkinas 因为我使用了他对过采样/欠采样的分析。
@ryanbarretto 他的下面的笔记本有一个可靠的堆叠框架代码,我强烈推荐。