返回列表

5th Place Solution | Imputation Without Any Imputers

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

开始: 2023-05-16 结束: 2023-05-29 预测性维护 数据算法赛
第五名解决方案 | 无需任何插补器的缺失值处理

第五名解决方案 | 无需任何插补器的缺失值处理

作者:Iqbal Syah Akbar(Kaggle Master)
发布时间:2023年5月30日
竞赛排名:第5名

嗯... 这次的结果波动比我想象的还要大,我 certainly 没想到我的冒险策略会奏效... 或者说勉强奏效。此外,经过这么多次参加Playground系列赛,我终于进入了前5名!

所以如果你初看标题,可能会觉得这不可能。但事实上,这正是我的做法:我编写了自己的代码来插补除 `x_e_out [-]` 外的所有特征

缺失值处理

几天前,@shalfey 分享了关于原始数据特征的有趣发现,比如每个 `author` 严格对应唯一的 `geometry`。实际上,我在一周前就发现了完全相同的情况,仅用了Pandas DataFrame的 `groupby` 方法。以下是我发现的主要特征关系:

  1. 每个作者都有其独特的几何结构
  2. 对于某些作者,`压力 [MPa]` 只有一个唯一值
  3. 对于某些作者,`D_e [mm]` 和 `D_h [mm]` 的组合只有一个唯一值
  4. 对于某些作者,`长度 [mm]` 只有一个唯一值
  5. 对于每一对 `chf_exp [MW/m2]` 和 `长度 [mm]`,都有唯一的 `几何结构`
  6. 每个 `D_h [mm]` 都对应唯一的 `几何结构`
  7. 每个 `D_h [mm]` 都对应唯一的 `D_e [mm]`

我的插补方法主要是基于原始数据中其他特征的值来寻找缺失值。例如,要插补 `D_e [mm]`,我需要使用竞赛数据集中可用的 `D_h [mm]` 值,并在原始数据集中搜索对应的 `D_e [mm]`。

现在,可能有人知道,由于我们使用的是合成数据集,特征间的某些关系会被打乱并产生噪声。显然,这会使竞赛数据集与原始数据集不同。然而,这不成问题。如果在原始数据集中找不到对应值,我只需找到最接近的值即可。这也是我处理需要多个特征才能插补的情况的方法,比如第5个关系。例如,如果要基于 `chf_exp [MW/m2]` 和 `长度 [mm]` 插补 `几何结构`,我需要在原始数据集中找到与竞赛数据集的 `chf_exp [MW/m2]` 相关的所有唯一 `长度 [mm]` 值,然后找到与竞赛数据集的 `长度 [mm]` 最接近的唯一值。只有在此之后,我才会尝试根据找到的 `chf_exp [MW/m2]` 和 `长度 [mm]` 的唯一值来寻找 `几何结构`。

这些关系很多,但仅够几乎完全插补 `几何结构` 和 `D_e [mm]`。为了插补其余特征,我不得不做一些即兴处理,例如基于 `D_e [mm]` 插补 `D_h [mm]`,基于 `长度 [mm]` 插补 `作者`,基于 `chf_exp [MW/m2]` 和 `长度 [mm]` 插补几何结构等。我还必须重复某些插补步骤以消除缺失值。这些数据当然不完全准确,但我们的竞赛数据集本身就有噪声和混乱的关系,所以这并不重要。

如果你想查看完整代码和几乎完全插补的数据集,可在此处获取:主要插补代码

特征工程

我的一些特征工程想法基于圆柱体概念。这灵感来源于长度和直径特征的存在。我的想法如下:

  1. 加热直径与液压直径的差值
  2. 圆柱体表面积及其加热与液压版本的差值
  3. 圆柱体体积及其加热与液压版本的差值

还有另一个想法。这基于 `x_e_out [-]` 没有任何单位度量的事实(从其特征名称可以看出)。这个想法是通过简单的数学运算消除 `压力 [MPa]`、`质量流量 [kg/m2-s]` 和 `chf_exp [MW/m2]` 的单位度量。

这些想法的效果... 说实话好坏参半。有些模型得到了改进,有些则表现更差。不过这没关系,因为我使用不同的特征工程点子集来构建我的集成模型。

模型与集成

说实话这并不特别,可能也是我未能获得更高名次的原因。我使用不同的特征工程点子集创建不同模型,并在其中一些模型中使用不同的估计器。为了找到最优权重,我使用岭回归(Ridge regression),允许拟合截距和负系数。我还使用原始数据集来训练模型(当然不会将其包含在验证中)。最后,为了调整模型,我对XGBoost和LightGBM等梯度提升模型使用Optuna调参,其余模型则手动调参。就是这样,这里没有太多其他可解释的内容。

我的模型构建和EDA完整代码可在此处查看:模型构建代码。你也可以在此处查看我的插补数据集与竞赛数据集的对比。

感谢阅读,希望这些内容对你有用!

同比赛其他方案