第一名解题思路:或者我是如何中了彩票的
作者: Lennart Haupts
发布日期: 2024-12-20
竞赛排名: 第 1 名
第一名解题思路:或者我是如何中了彩票的
首先,我要感谢组织者和 Kaggle 使这次比赛成为可能。处理现实世界中的噪声数据既是一次挑战,也是一次 rewarding 的经历。
老实说,运气在我的成功中起了主要作用。我特别幸运地实际上选择了最好的 notebook。尽管如此,我还是想展示我所做的工作。( notebook 链接)
有趣的是,我在两个月前退出了比赛,直到最近才重新加入。这次回归的重点是提高解决方案的鲁棒性。
最终模型概述
最终解决方案是一个投票集成模型,包含:
- LGBMRegressor
- 两个 XGBoost Regressors
- CatBoostRegressor
- ExtraTreesRegressor
目标变量、交叉验证和样本权重
- 目标变量: 我没有使用提供的 sii 标签,而是使用了 'PCIAT-PCIAT_Total' 分数,并将预测结果转换为 sii 标签。
- 分布和权重: 目标的分布,尤其是过多的零值,导致了两种方法:探索样本权重和替代回归目标,如 Tweedie。使用等距分箱来定义样本权重。权重并没有直接提高优化后的分数,但它使未优化的分数更接近优化后的分数。
- 交叉验证: 使用了 10 折分层 KFold,按分箱进行分层。经常更改种子以确保稳定性。使用不同种子的提交从公共排行榜上获得关于方差的进一步反馈。LB 分数本身大多被忽略,以最小化对排行榜的过拟合。
数据清洗、特征工程和插补
数据清洗:
- 不合理的值,例如超过 60% 的体脂百分比或负的骨矿物质含量,被移除并替换为 NaN。
特征工程:
- 创建了各种描述性的活动记录仪(actigraph)特征,并为白天和夜晚创建了单独的掩码。
- 使用 PCA 对活动记录仪数据进行降维,保留了 15 个分量。
- 其他特征包括基于年龄组均值的归一化值,以及其他看似合理的特征,如每日能量消耗与基础代谢率之间的差异。
- 对大部分特征应用了分位数分箱(Quantile binning)以处理噪声。效果出奇的好。
插补:
- 由于中等高的维度和噪声,使用 Lasso 进行特征插补。
- 特征使用 Lasso 进行插补。对于每个目标列,使用缺失值少于 40% 的特征训练模型,并基于训练好的模型插补这些特征中的缺失值。如果找不到有效的特征(即缺失值少于 40% 的特征)进行插补,或者有效样本数量太少,则解决方案默认使用均值插补。
参数调整和特征选择
在比赛早期,很明显典型的参数调整与常规交叉验证设置会导致结果不稳定。为了解决这个问题:
- 在参数调整期间采用了重复分层 KFold。重复 10 到 20 次。虽然计算成本更高,但产生了更 robust 的结果。
- 特征选择是基于特征重要性手动完成的,将数据集减少到 39 个特征。