3rd private 6th public | 暴力集成方法 | 后处理
3rd private 6th public | 暴力集成方法 | 后处理
大家好,
感谢Kaggle组织这次挑战/活动!参与这场精彩的回归竞赛是一次非常棒的经历。同时,也感谢各位参赛选手共同创造了这段难忘的回忆。
以下是我的解决方案概述:
数据工程
- 我以这里提供的数据生成笔记本为基础,生成了大量不同参数的样本。将这些合成数据与原始数据合并后用于模型训练。
- 使用了以下额外特征(来自讨论帖,特别感谢@pandeyg0811的贡献):
a. 肉质产量(Meat yield)
b. 表面积(Surface Area)
c. 重量/去壳重量(Weight/Shuck Weight)
d. 伪BMI(Pseudo BMI)
e. 重量/长度平方(Weight/Length Squared)
f. 内脏比(Viscera Ratio)
- 曾尝试对重量列进行log(1+x)变换,但效果不明显。
模型策略
- 采用回归模型方法(而非分类方法),使用分层5折交叉验证。验证仅在竞赛数据上进行,CV分数与Public LB相关性良好。
- 训练了多个候选模型,每轮使用6-10个特征的不同子集。采用相同的OOF结构,但每轮使用不同的特征组合。
- 基础模型包括:XgBoost、LightGBM、CatBoost、Gradient Boosting Machine、HistGradientBoostingRegressor
- 使用Optuna和LAD回归对预测结果进行集成调优。发现后处理(四舍五入到最接近的整数)对CV和LB分数都有显著提升。
- 未对训练数据预测结果进行后处理。大多数模型预测范围集中在4-20年,未使用原始数据修正预测结果。尝试这样做时反而降低了分数。
未奏效的方法
- TabNet回归器
- 随机森林
- Extra Tree
- Ridge/LASSO等线性方法
可以改进的地方
- 最终提交选择可能不够理想。我的最佳Private LB提交本可获得第2名,它在Public LB表现略差但CV分数更好。最终选择了Public LB最优的提交。
- 可以更创造性地利用原始训练数据优化边界情况预测。最后几天时间不足未能充分尝试,后续会作为个人实验继续研究。
经验总结
- 相信CV
- 永不违背第1条
- 从第一天就建立良好的代码管道,混乱的结构会阻碍在多场竞赛中的进展
- 快速失败:在初期进行大量快速实验并制定策略
- 只保留有价值的特征,远离破坏性特征。本次竞赛让我深刻体会到这一点
- 最后一天的提交未必是最好的。我的最终提交都是在截止日前很久完成的
祝大家学习愉快,期待在下一次活动中再见!