533. Playground Series - Season 3, Episode 5 | playground-series-s3e5
大家好!😎
首先,感谢 Kaggle 团队举办了这次比赛。
我很惊讶在参加比赛仅一个半月后,就在私人排行榜上获得了第二名。
由于要工作和照顾家庭,我的时间不多。这次比赛为期两周,让我能够仔细思考并建立模型。
通过这次比赛我学到了很多。非常感谢。🙏
首先,我从这个笔记本中学习了二次 Kappa 指标。非常感谢。
这里是笔记本。
我首先尝试可视化数据以检查数据分布。对我来说,这也是练习绘制图表的机会。
我绘制了训练数据和测试数据的热力图,以检查特征相关性并比较训练数据和测试数据的相似性。我不是科学家,所以不知道数据之间的相关性意味着什么。虽然我发现训练数据和测试数据的热力图显示出相同的趋势。这证实了该数据适合用于机器学习。
使用箱线图来可视化数据的分布。
绘图后,我们注意到了一些异常值。我们认为为了建立精度更高的模型,最好排除异常值。我发布了一个关于异常值处理方法的讨论。根据 @Carl McBride Ellis 的评论,我尝试使用 Isolation Forest 过滤异常值。我尝试在移除异常值的数据上进行训练。我花了很多时间,但分数变差了,所以最终决定不移除异常值。😭
通过观察数据,训练数据和测试数据的数据分布似乎几乎相同。这让我相信,如果预测测试数据的质量值频率与训练数据的质量值频率相匹配,分数会更好。计算代码在这里。
我只尝试了 XGBoost。在之前的 Playground 系列中,我尝试了各种模型。但这次,我没有尝试不同的模型,而是专注于找到一个阈值,将模型的预期概率值分配给质量值,从而使二次加权 Kappa 分数最优。
这里是笔记本。
我首先尝试简单地选择预测概率最大的质量值。该模型的结果是公共分数 0.49599。正如预期的那样,这不太好。
我还测试了移除异常值后的训练数据,发现分数为 0.44529。从这个结果中,我确定移除异常值对模型没有正面影响。
这里是笔记本。
接下来,我尝试对模型的预测结果进行加权,以便测试数据的预测质量值分布类似于训练数据的质量值分布。为了优化权重,我们使用了 scipy optimize 的 minimize 函数。代码在这里。结果证明,这是一个糟糕的结果。强制将预测结果分配给 3、4 和 8 使评级值变得更糟。分数下降到 0.39527。这让我意识到,我不能通过强迫自己预测好酒来赢得这场比赛。
这里是笔记本。
我尝试的下一步是将预测值转换为预期质量值,然后确定该预期值成为质量值的特定阈值。使用 Spicy optimize 中的 minimize 函数寻找优化二次加权 Kappa 的阈值。代码在这里。效果非常好。👌 分数上升到了 0.544。
这个预测的结果不包括 3、4、8。我对此表示怀疑。我无法预测好酒。所以我发布了一个讨论。
我是手动完成的。我通过手动调整一些参数来决定。分数略微上升到了 0.55713。
对于交叉验证,我使用 StratifiedKFold 尝试了 n_splits= 12, 5, 2。超参数没有根据分裂数量