返回列表

3rd place solution

417. Tabular Playground Series - Jan 2021 | tabular-playground-series-jan-2021

开始: 2021-01-02 结束: 2021-01-31 数据算法赛
第3名解决方案

第3名解决方案

作者:Fatih Öztürk (Grandmaster)
比赛排名:第3名

恭喜大家,特别祝贺 @springmanndaniel 取得伟大的胜利。当他让我们其他人知道神经网络(NN)模型也可以在这个数据集上工作时,我真的很高兴。当你知道某事是可行的,那么它就真的更有可能实现(尽管我们大多数人失败了 :))。在那之后,我几乎只专注于 NN 模型,并且设法用单个模型获得了 0.700X 的 CV/LB 分数,这最终很好地改善了我的最终堆叠效果。

我的解决方案基于堆叠多样化的模型。我有 4 个主要模型:

1 - 使用普通特征的常规 LGBM 建模。

2 - 两阶段 LGBM 建模。 对于这部分,我通过阈值将真实目标列转换为二进制列,然后运行分类模型作为第一阶段建模。假设我的阈值是 8,那么目标值低于 8 的被归类为 0,其余的归类为 1。然后我得到了属于类别 1 的概率预测。在我的第二阶段建模中,我同样有两个独立的模型。首先,我使用目标值高于阈值的训练数据运行模型,并获得了验证集和测试集的预测。然后对目标值低于阈值的训练数据做同样的操作。最后,我计算最终预测为:

final_prediction = probability_of_being_0 * (predictions_from_training_0) + probability_of_being_1 * (predictions_from_training_1)

仅仅通过改变阈值,我设法轻松获得了许多多样化的模型,并积累了它们的 OOF(袋外)预测和测试集预测。

3 - 使用增强训练数据集的常规 LGBM。 我尝试在所有数据集上应用 DAE(去噪自编码器)。尽管我的 DAE 远不如第一名的 DAE 解决方案成功,但在 CV 期间使用我的 DAE 输出来增强训练数据,最终足够好地改善了最终的堆叠效果。

4 - 在从原始连续列制作分类特征后,使用嵌入层的 MLP(多层感知机)。 通过添加嵌入层以及原始输入,我成功用 NN 模型获得了 0.700X 的 CV 和 LB 分数。

作为最后一步,我在每个保存模型的 OOF 预测之上应用了线性回归进行堆叠。这比手动融合要好得多。此外,作为最后的压榨步骤,我在堆叠期间在 OOF 特征之间创建了非线性交互特征,并成功在第 4-5 位小数上进一步提高了 CV 和 LB 分数。

我的内核即将发布。希望你能从中找到有用的部分。

同比赛其他方案