返回列表

3rd Place Solution

536. Playground Series - Season 3, Episode 7 | playground-series-s3e7

开始: 2023-02-14 结束: 2023-02-27 数据算法赛
第三名方案

第三名方案

作者: Craig Thomas | 比赛: Playground Series S3E7

概述

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

  • 模型堆叠图

模型堆叠图

  • 神经网络配置

神经网络配置

有效的方法

  • [高影响] 训练/测试重复预测反转

    • 结果:公共 LB 增加约 0.0141
    • 理由和背景:反转测试数据中重复项的分数以提高性能 - 参见 @icfoer 此处的讨论,以及 @sergiosaharovskiy 此处的讨论。
  • [中等影响] 使用神经网络进行堆叠

    • 结果:与单一模型相比,CV 增加约 0.0026
    • 理由和背景:最佳神经网络配置结合了 123 个模型,比最佳单一模型增加了 0.0026。
  • [中等影响] 使用原始数据集

    • 结果:CV 增加约 0.002
    • 理由和背景:我将原始数据集添加到训练集中,确保仅对比赛数据执行 CV 指标计算。

无效的方法

  • [中等影响] 任何特征工程
    • 结果:CV 下降约 0.004
    • 理由和背景:对特征的详尽调查以及模型测试表明,任何工程特征(例如基于时间的特征)都没有显着收益。更多内容见下文补充背景。

补充背景

我的第一个重要见解——不做特征工程——是关键。正如我上面提到的,我没能找到任何通过特征工程提升类别分离的方法。我公开的 EDA 最终并不完整,因为当我开始更深入地寻找能够改善正负类之间分离的工程特征时,我就停止更新它了。在花了很多时间挖掘各种组合特征的方法后,我的结论是我找不到任何重要的东西,无论是定性还是定量测量,都能给我的模型带来任何类型的提升。我对这个结果不满意,所以我花时间做相反的事情——向自己证明大多数特征组合都在损害性能。任何基于时间的特征工程,如添加星期几、季度、一年中的第几天等,都会降低本地 CV 分数。我使用基于时间特征的最佳模型得分为 0.900011,而我不使用它们的最佳模型得分为 0.904148。

我在本次比赛中的第二大见解来自本地指标与公共 LB 之间的一致性。训练和测试之间的对抗性验证表明这两个数据集几乎相同。鉴于我们有相当大的正例与负例比例,并且我们有相当数量的训练和测试样本可供使用(加上我们可以混合的额外数据),我最初的假设是本地 CV 和公共 LB 应该匹配得相当好。为了测试这一点,我提交了许多模型——每一个都是为了查看本地 CV 的增加或减少如何反映在公共 LB 上。在大约 10 个模型之后,很明显我的指标和 LB 很一致。