大家好,
首先,我要向 Kaggle 团队为本次活动以及整个 Playground 系列赛致以最诚挚的感谢。我认为这些 Playground 系列竞赛非常有价值,为初学者和从业者提供了大量机会。首先,我要祝贺本次比赛的优胜者,并向所有参与者致以诚挚的感谢,感谢你们共同创造了这段难忘的经历。在此,我要特别感谢过去两周来做出贡献的以下用户:
特征工程
- 我仅使用了数据集中提供的特征,没有创建额外的特征。我使用了 PCA 和 PLS 来创建基于关联的特征,具体方法见下方链接:
https://www.kaggle.com/code/adaubas/ps-s3e14-stacking-leastabsolutedeviation-reg - 我没有使用任何缩放或中心化处理
- 我根据下方链接中的方法调整了某些特征(RainingDays 和 MaxOfUpperTRange)的部分数据值,感谢 @paddykb 和 @adaubas 提供的思路:
https://www.kaggle.com/code/adaubas/ps-s3e14-stacking-leastabsolutedeviation-reg - 我没有对目标变量进行任何变换,直接使用原始值
- 我将原始数据纳入训练,这相比不使用原始数据极大地提升了我的 CV 分数。OOF 分数完全基于比赛数据生成(如我的公开笔记本所示)
基础模型
- 我最初尝试了许多常见方法,但大多数效果不佳。我对所有模型都使用了 Repeated K-Fold - 10x3/10x2 的交叉验证方式
- 我使用 optuna 和 FLAML 进行模型训练与调参,参考了以下链接中 @paddykb 的思路:
https://www.kaggle.com/code/paddykb/ps-s3e14-flaml-bfi-be-bop-a-blueberry-do-dah
我在 optuna 中主要调优了以下基础参数:
a. max depth
b. learning rate
c. reg-alpha 和 reg-lambda
d. number of leaves
我还对这些参数进行了手动微调,以避免过度拟合数据中的噪声 - 我使用原始数据构建模型训练折,而评估集(dev-set)则使用对应的比赛数据折。这种方式显著提升了我的 CV 分数和 Public 榜排名
- 我在多个模型中采用了特征子集,所有模型都包含 fruitmass、fruitset 和 seeds。然后从剩余的分类特征中选取 1-3 个特征。具体来说,我使用 1 个温度范围列和 0-2 个来自其余类别特征的列来构成基础模型的完整特征子集
- 我使用了以下模型进行集成:
a. LightGBM - 集成中最大的贡献者
b. Catboost
c. Random forest
d. Gradient Boosting Regression
集成
- 与其他方法(如 ridge 或基于 optuna 的调优)相比,LAD 回归对我更有效。我采用了以下链接中建议的方法:
https://www.kaggle.com/code/adaubas/ps-s3e14-stacking-leastabsolutedeviation-reg - 我使用 LAD 将排名靠前的公开笔记本与我的基础模型进行融合,并准备提交
- 我根据 Public 榜分数对集成权重进行了少量手动调整
后处理
感谢 @mattop 提出的取整思路,它帮助我提升了 CV 分数和排行榜位置。我从他的讨论帖中采用了这一思路,链接如下:
https://www.kaggle.com/competitions/playground-series-s3e14/discussion/407327
我在集成后对测试集预测结果进行了一轮后处理。
未能奏效的模型
- TabNet regressor
- 神经网络 - 我应该更专注于特征工程来使其有效
- 线性模型
- XGBoost,特别是 objective = absolute error 的 XGBoost(表现极差)
- GAM
- Extra trees regression
本可以做得更好的地方
- 更好的准重复数据处理
- 更好的特征工程 - 我可以尝试更有效的衍生特征
- 选择更优的最终提交。我整体表现最好的提交在 Public 榜上略逊一筹,但可能在 Private 榜上表现更好
- 更好的集成策略 - 我在模型结果后基于 Public 榜分数微调了集成权重。如果我没有这样做,或许在 Private 榜上会表现更好
我的主要收获与总结
- 将预测值四舍五入到最接近的训练数据值 - 这可能是 Kaggle 内外许多实际任务中的有效方法
- LADRegression - 这是我第一次使用,今后会多加利用
- FLAML - 对表格数据非常有用。我倾向于使用 PyCaret 和 LAMA 进行自动机器学习建模,但 FLAML 在表格任务上同样出色
- 即使 CV 与 Public 榜相关,也要依赖 CV。基本上,始终应该依靠自己的 CV
最后,祝大家一切顺利,期待在下一期与大家再见!
快乐学习,诚挚问候!