554. Playground Series - Season 3, Episode 15 | playground-series-s3e15
嗯... 这次的结果波动比我想象的还要大,我 certainly 没想到我的冒险策略会奏效... 或者说勉强奏效。此外,经过这么多次参加Playground系列赛,我终于进入了前5名!
所以如果你初看标题,可能会觉得这不可能。但事实上,这正是我的做法:我编写了自己的代码来插补除 `x_e_out [-]` 外的所有特征。
几天前,@shalfey 分享了关于原始数据特征的有趣发现,比如每个 `author` 严格对应唯一的 `geometry`。实际上,我在一周前就发现了完全相同的情况,仅用了Pandas DataFrame的 `groupby` 方法。以下是我发现的主要特征关系:
我的插补方法主要是基于原始数据中其他特征的值来寻找缺失值。例如,要插补 `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]` 插补几何结构等。我还必须重复某些插补步骤以消除缺失值。这些数据当然不完全准确,但我们的竞赛数据集本身就有噪声和混乱的关系,所以这并不重要。
如果你想查看完整代码和几乎完全插补的数据集,可在此处获取:主要插补代码
我的一些特征工程想法基于圆柱体概念。这灵感来源于长度和直径特征的存在。我的想法如下:
还有另一个想法。这基于 `x_e_out [-]` 没有任何单位度量的事实(从其特征名称可以看出)。这个想法是通过简单的数学运算消除 `压力 [MPa]`、`质量流量 [kg/m2-s]` 和 `chf_exp [MW/m2]` 的单位度量。
这些想法的效果... 说实话好坏参半。有些模型得到了改进,有些则表现更差。不过这没关系,因为我使用不同的特征工程点子集来构建我的集成模型。
说实话这并不特别,可能也是我未能获得更高名次的原因。我使用不同的特征工程点子集创建不同模型,并在其中一些模型中使用不同的估计器。为了找到最优权重,我使用岭回归(Ridge regression),允许拟合截距和负系数。我还使用原始数据集来训练模型(当然不会将其包含在验证中)。最后,为了调整模型,我对XGBoost和LightGBM等梯度提升模型使用Optuna调参,其余模型则手动调参。就是这样,这里没有太多其他可解释的内容。
我的模型构建和EDA完整代码可在此处查看:模型构建代码。你也可以在此处查看我的插补数据集与竞赛数据集的对比。
感谢阅读,希望这些内容对你有用!