返回列表

2nd place solution explained: the power of original dataset

554. Playground Series - Season 3, Episode 15 | playground-series-s3e15

开始: 2023-05-16 结束: 2023-05-29 预测性维护 数据算法赛
第二名解决方案详解:原始数据集的力量

第二名解决方案详解:原始数据集的力量

作者: Mykhailo Savchenko
发布日期: 2023-05-30

首先,我要感谢 Kaggle 团队举办了这场比赛。对于初学者来说,这是一个绝佳的实践机会,可以接触一些接近真实世界的数据并获得实战经验。作为一名仅仅在五个月前从完全不相关的领域开始数据科学之旅的新手,能够在比赛中看到自己的进步和成绩,对我来说意义重大。

之前我曾发布过一篇关于原始数据集与比赛数据集特征范围对比的帖子。我的解决方案正是基于这些观察结果,我的计划如下

1) 对比赛数据集进行初步探索性数据分析(EDA),以初步了解数据。
1.1. 'D_h''D_e' 高度相关,并且基本相同(这影响了我的插补技术)。
1.2. 存在类别不平衡问题,'tube' 几何形状是多数类(这影响了模型的选择)。
1.3. 数据是随机缺失的,这可能是人为添加噪声的结果(这同时影响了模型选择和插补策略)。

2) 我决定仅使用梯度提升模型,因为它能很好地处理缺失值和类别不平衡问题。在之前的插补比赛中,获胜方案多基于深度学习,但我认为由于数据集规模较小且缺失值数量较多,尝试深度学习并不值得。我创建了一些基线模型,并通过统计方法填充缺失特征(按 'author' 分组后,用各特征的均值填充 NaN)以检验其性能。

2.1. 单个 FLAML LGBM 模型的交叉验证(CV)得分为 0.0733(使用了 @paddykb 在 3.14 比赛中提供的 FLAML notebook,并做了少量修改,感谢这个出色的框架)。
2.2. 基于 Optuna 的基线模型 CV 得分也约为 0.073(感谢 @tetsutani 提供的 模型,我使用了该 notebook 中的部分代码)。

3) 基线模型的 CV 分数看起来已经非常好,因此我决定不再花时间寻找更好的模型,而是专注于改进插补技术并寻找一些“技巧”,因为我知道这些数据是合成生成的。

3.1. 正如我之前所见,数据集添加了大量噪声,因此我决定将其与原始数据集进行比较。我之前的帖子中已分享了相关见解。
3.2. 在发现某些特征总是成对出现且仅对应单一作者后,我通过查找原始数据集中的唯一配对和三元组来插补比赛数据。
3.3. 仍有部分特征缺失,因此我决定尝试不同的基于 MICE 的包,如 miceforestmissingpy 等。此外,@arunklenin 提供了一个出色的 notebook,其中使用了自定义的基于 CatBoost 的 MICE 算法,效果也很好。
3.4. 我还尝试将插补后的特征四舍五入到最接近原始数据中的唯一值,但这反而使 CV 得分变差。同时感谢 @alexdippolito 提供的主题。他也探索了原始数据集的特征,这让我觉得自己的方向是正确的。也祝贺他获得了第三名!

4) 我的最终模型使用了 LGBM 和 XGBoost 的集成,得分如下:

我还尝试了一些实验性模型,其中最佳的是一个混合集成模型,该模型在以下数据上训练:使用上述方法插补的比赛数据,以及过采样后的原始数据。然而,其 CV 得分与上述模型非常接近,且存在在私有排行榜上得分过低的风险,因此我认为提升并不显著优于随机,最终未选择该模型(但实际上,它会让我获得第一名)。

我从这场比赛中学到了什么?

  • 花更多时间在探索性数据分析和了解数据上。 许多 notebook 包含大量可视化但没有解释。
  • 更多地进行实验,并始终相信你的 CV 分数。 始终依赖 CV,将公开排行榜作为工具之一,但不要依赖它。同时,不要回避查看得分较低的 notebook,因为它们可能比顶级 notebook 包含更有用的信息。
  • 利用 Playground 数据集是合成的这一事实。 通过探索原始数据,你很可能会想到一些技巧,从而大幅提高最终得分。
  • 作为初学者不要胆怯。 起初我很犹豫,因为才开始学习 5 个月,但事实证明我获得高分的机会与其他人一样。Kaggle 社区也非常友好,总是乐于提供帮助。

感谢所有分享 notebook 和想法的 Kaggler!祝后续比赛顺利!

同比赛其他方案