返回列表

2nd Place Solution

533. Playground Series - Season 3, Episode 5 | playground-series-s3e5

开始: 2023-01-31 结束: 2023-02-13 数据算法赛
第二名解决方案

第二名解决方案

作者:NHopeT | 排名:第 2 名

大家好!😎

首先,感谢 Kaggle 团队举办了这次比赛。
我很惊讶在参加比赛仅一个半月后,就在私人排行榜上获得了第二名。
由于要工作和照顾家庭,我的时间不多。这次比赛为期两周,让我能够仔细思考并建立模型。
通过这次比赛我学到了很多。非常感谢。🙏

首先,我从这个笔记本中学习了二次 Kappa 指标。非常感谢。

1. EDA(数据可视化)

这里是笔记本
我首先尝试可视化数据以检查数据分布。对我来说,这也是练习绘制图表的机会。

1) 热力图

我绘制了训练数据和测试数据的热力图,以检查特征相关性并比较训练数据和测试数据的相似性。我不是科学家,所以不知道数据之间的相关性意味着什么。虽然我发现训练数据和测试数据的热力图显示出相同的趋势。这证实了该数据适合用于机器学习。

2) 箱线图

使用箱线图来可视化数据的分布。

异常值

绘图后,我们注意到了一些异常值。我们认为为了建立精度更高的模型,最好排除异常值。我发布了一个关于异常值处理方法的讨论。根据 @Carl McBride Ellis 的评论,我尝试使用 Isolation Forest 过滤异常值。我尝试在移除异常值的数据上进行训练。我花了很多时间,但分数变差了,所以最终决定不移除异常值。😭

质量值频率

通过观察数据,训练数据和测试数据的数据分布似乎几乎相同。这让我相信,如果预测测试数据的质量值频率与训练数据的质量值频率相匹配,分数会更好。计算代码在这里。

2. 模型

我只尝试了 XGBoost。在之前的 Playground 系列中,我尝试了各种模型。但这次,我没有尝试不同的模型,而是专注于找到一个阈值,将模型的预期概率值分配给质量值,从而使二次加权 Kappa 分数最优。

1) 简单 XGBoost

这里是笔记本
我首先尝试简单地选择预测概率最大的质量值。该模型的结果是公共分数 0.49599。正如预期的那样,这不太好。
我还测试了移除异常值后的训练数据,发现分数为 0.44529。从这个结果中,我确定移除异常值对模型没有正面影响。

2) XGBoost(对模型的预测结果进行加权)

这里是笔记本
接下来,我尝试对模型的预测结果进行加权,以便测试数据的预测质量值分布类似于训练数据的质量值分布。为了优化权重,我们使用了 scipy optimize 的 minimize 函数。代码在这里。结果证明,这是一个糟糕的结果。强制将预测结果分配给 3、4 和 8 使评级值变得更糟。分数下降到 0.39527。这让我意识到,我不能通过强迫自己预测好酒来赢得这场比赛。

3) XGBoost(优化阈值)

这里是笔记本
我尝试的下一步是将预测值转换为预期质量值,然后确定该预期值成为质量值的特定阈值。使用 Spicy optimize 中的 minimize 函数寻找优化二次加权 Kappa 的阈值。代码在这里。效果非常好。👌 分数上升到了 0.544。

这个预测的结果不包括 3、4、8。我对此表示怀疑。我无法预测好酒。所以我发布了一个讨论

3. 超参数调整

我是手动完成的。我通过手动调整一些参数来决定。分数略微上升到了 0.55713。

4. 交叉验证

对于交叉验证,我使用 StratifiedKFold 尝试了 n_splits= 12, 5, 2。超参数没有根据分裂数量

同比赛其他方案