返回列表

10th Place Method : Moderate? Stacking

455. Tabular Playground Series - Sep 2021 | tabular-playground-series-sep-2021

开始: 2021-09-01 结束: 2021-09-30 保险科技 数据算法赛
第10名方案:适度的堆叠法

第10名方案:适度的堆叠法

作者:Oscar Takeshita
比赛排名:第10名

非常感谢 Kaggle 以及所有参与讨论和分享代码的贡献者!

大约有三年没参加机器学习比赛了,我想借此机会温习一下,看看这段时间出现了哪些新工具和新技术。时隔许久,在讨论区除了 @tunguz 之外,我没认出其他老面孔。我的目标是进入前十名,为此度过了许多个熬夜的夜晚 :) 很高兴能在这次练习赛中实现我的个人目标。

简而言之,我更喜欢单一模型的纯粹性,但最终,我还是选择了堆叠法。

详细内容

1. 起点

首先,我想保持简单,从单一模型入手。我计划先选出最好的单一模型,一旦确定哪个最有前途,就专注于它。我尝试了我熟悉的模型:XGBoost、LightGBM、CatBoost、SVM 和 Keras。

在过去处理表格数据的比赛中,我对神经网络(NN)一直不太走运。这次我的目标之一就是通过尝试过去一个月读到的方法,看看能否扭转这一局面。

2. 单一模型设计

我所有的单一模型设计都只包含一个工程特征:行中 NA(缺失值)的总和。从讨论中可以清楚地看到这是有效的,而且从过去的比赛中也能很好地理解其原理。我确实尝试过其他工程特征,但为了节省时间,我决定只使用 NA 数量。

关于调参。三年前大家好像还在用贝叶斯优化,这次我学习了 Optuna。我不确定两者哪个表现更好。

@lukaszborecki 的这个 Keras 内核给了我很大启发。它的层结构简单但不失深度,在排行榜上得分不错。我所有的 Keras 内核都是基于这个修改的。他的内核包含具有 96 个分箱输入的嵌入层和一个未分箱的单独输入。我了解到了 "swish" 激活函数。三年前我通常会用 "selu"、"elu" 或 "relu"。

Keras 给我的分数远不如梯度提升模型。然而,我知道它们在与梯度提升组件堆叠时通常很有效。此时我确信必须采用堆叠法,因为单一模型在排行榜上的得分已经没有竞争力了。

3. 堆叠

堆叠的舞台已经搭建好了。我采用了与 @vkonstantakos 相同的单层堆叠结构。我有 17 个基模型:5 个 LightGBM,4 个 XGBoost,2 个 CatBoost 和 6 个 Keras。

堆叠方法使用的是逻辑回归。我确实尝试过用 XGBoost 进行堆叠,但效果不佳。逻辑回归还能显示每个输入组件的权重,因此更容易判断保留哪些基模型。

@mlanhenke这个内核对我影响很大。他的 xgb1 组件引起了我的注意。它的 max_level 设为 18,作为单独组件表现不佳,但对整体堆叠似乎至关重要。它似乎起到了增加强不相关组件的作用。

4. 结论

作为一次复健,这次比赛绝对具有足够的挑战性。我希望自己在特征工程和 Keras 表征学习方面能做得更深入一些。如何设计像 xgb1 这样好的不相关组件,是我需要深入理解并记在心上的。这些都在我的待办事项清单中!

同比赛其他方案