Playground Series - Season 3, Ep.6 🎉 第5名 🎉
Playground Series - Season 3, Ep.6 🎉 第5名 🎉
作者: George Papachristou | 排名: 第5名
各位 Kagglers 大家好 👋!!
这是我第一次参加公开的 Kaggle 竞赛,最终取得了不错的成绩!
我 98% 信任我的交叉验证(CV),最终获得了第5名。如果我 100% 信任它,我本可以拿到第3名。这对我来说是一个教训:不要盲目相信公共排行榜!!
我的解决方案 Notebook 地址: https://www.kaggle.com/code/mscgeorges/pss36-multi-stratifiedkfold-votingensemble
行之有效的策略 🔥
- 移除异常值 - 对每一列运行 IQR(四分位距)并移除包含异常值的行(仅 20 条记录)。移除异常值对最终模型的性能影响不大,但对 CV 很重要,因为 RMSE 指标对异常值非常敏感,可能导致误导性的结果。
- 分段模型(我喜欢 @PRASAD 的这个术语)- 根据不同的时期(基于 made 列)拆分模型。将数据拆分为 4 个时期时得分最高。
- 多重分层 K 折交叉验证 - 使用不同的随机种子(SEEDS)多次运行 StratifiedKFold。这让我有信心获得关于模型性能的良好统计数据(平均得分 +/- 标准差)。第二个关键点是选择“分层”的 CV。由于采用了“分段模型”方法,我必须根据“made”列对数据进行分层,以确保结果的一致性。
- 集成模型 - 从 CV 中我观察到不同的模型(例如随机森林、XGBoost)各有优劣,因此集成模型创建了一个更稳定的解决方案。
- 较少的估计器数量 - 我使用了较少的估计器,因为更多的估计器会导致模型对数据噪声过拟合。
- 使用所有特征(CityCode 除外) - 最主要的特征是房屋大小(squareMeters 列)。它是唯一与目标变量有显著相关性(~53%)且特征重要性极高(~99%)的特征,其他特征看起来都像是噪声。但 CV 显示其他特征确实发挥了一定作用,可能在边缘情况下帮助模型做出正确决策,所以我保留了它们!
- 无额外特征 - 在寻找可能有助于模型性能的人工特征后,我找不到能提高 CV 分数的特征,因此没有使用任何额外特征。
- 包含原始数据 - 原始数据看起来有所不同(基于对抗验证),但如果我们只保留 squareMeters 列,数据集大致相同,所以我尝试将它们包含在训练数据集中,结果变得更好了。