536. Playground Series - Season 3, Episode 7 | playground-series-s3e7
本次比赛的目标是最大化酒店预订取消预测的 AUC ROC 分数。我的解决方案实施了一个双层堆叠模型。堆叠的第一层由我生成的表现最好的 123 个 CatBoost、XGBoost 和 LightGBM 模型组成。每个模型都使用不同的超参数选择进行训练。没有使用特征工程,并且为了训练目的混入了原始数据集。所有模型都是通过将训练数据分成 10 折生成的,预测是折外预测,并且指标是在折外收集的。堆叠的第二层是一个简单的 TensorFlow 神经网络。目标函数是 TensorFlow Additions 中的 SigmoidFocalCrossEntropy。神经网络使用第一层的训练预测进行训练,并使用第一层的测试预测进行预测。对最终预测集的后处理采用了下面讨论的训练/测试重复反转技术。


[高影响] 训练/测试重复预测反转
[中等影响] 使用神经网络进行堆叠
[中等影响] 使用原始数据集
我的第一个重要见解——不做特征工程——是关键。正如我上面提到的,我没能找到任何通过特征工程提升类别分离的方法。我公开的 EDA 最终并不完整,因为当我开始更深入地寻找能够改善正负类之间分离的工程特征时,我就停止更新它了。在花了很多时间挖掘各种组合特征的方法后,我的结论是我找不到任何重要的东西,无论是定性还是定量测量,都能给我的模型带来任何类型的提升。我对这个结果不满意,所以我花时间做相反的事情——向自己证明大多数特征组合都在损害性能。任何基于时间的特征工程,如添加星期几、季度、一年中的第几天等,都会降低本地 CV 分数。我使用基于时间特征的最佳模型得分为 0.900011,而我不使用它们的最佳模型得分为 0.904148。
我在本次比赛中的第二大见解来自本地指标与公共 LB 之间的一致性。训练和测试之间的对抗性验证表明这两个数据集几乎相同。鉴于我们有相当大的正例与负例比例,并且我们有相当数量的训练和测试样本可供使用(加上我们可以混合的额外数据),我最初的假设是本地 CV 和公共 LB 应该匹配得相当好。为了测试这一点,我提交了许多模型——每一个都是为了查看本地 CV 的增加或减少如何反映在公共 LB 上。在大约 10 个模型之后,很明显我的指标和 LB 很一致。