返回列表

#7 Private #3 Public approach| Simple ensemble with post-processing

550. Playground Series - Season 3, Episode 14 | playground-series-s3e14

开始: 2023-05-02 结束: 2023-05-15 产量与品质预测 数据算法赛
#7 Private榜 #3 Public榜 | 简单的集成与后处理

#7 Private榜 #3 Public榜 | 简单的集成与后处理

作者: Ravi Ramakrishnan (GRANDMASTER)

点赞数: 53

比赛排名: 第7名

发布时间: 2023-05-16

大家好,

首先,我要向 Kaggle 团队为本次活动以及整个 Playground 系列赛致以最诚挚的感谢。我认为这些 Playground 系列竞赛非常有价值,为初学者和从业者提供了大量机会。首先,我要祝贺本次比赛的优胜者,并向所有参与者致以诚挚的感谢,感谢你们共同创造了这段难忘的经历。在此,我要特别感谢过去两周来做出贡献的以下用户:

特征工程

  1. 我仅使用了数据集中提供的特征,没有创建额外的特征。我使用了 PCA 和 PLS 来创建基于关联的特征,具体方法见下方链接:
    https://www.kaggle.com/code/adaubas/ps-s3e14-stacking-leastabsolutedeviation-reg
  2. 我没有使用任何缩放或中心化处理
  3. 我根据下方链接中的方法调整了某些特征(RainingDays 和 MaxOfUpperTRange)的部分数据值,感谢 @paddykb@adaubas 提供的思路:
    https://www.kaggle.com/code/adaubas/ps-s3e14-stacking-leastabsolutedeviation-reg
  4. 我没有对目标变量进行任何变换,直接使用原始值
  5. 我将原始数据纳入训练,这相比不使用原始数据极大地提升了我的 CV 分数。OOF 分数完全基于比赛数据生成(如我的公开笔记本所示)

基础模型

  1. 我最初尝试了许多常见方法,但大多数效果不佳。我对所有模型都使用了 Repeated K-Fold - 10x3/10x2 的交叉验证方式
  2. 我使用 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
    我还对这些参数进行了手动微调,以避免过度拟合数据中的噪声
  3. 我使用原始数据构建模型训练折,而评估集(dev-set)则使用对应的比赛数据折。这种方式显著提升了我的 CV 分数和 Public 榜排名
  4. 我在多个模型中采用了特征子集,所有模型都包含 fruitmass、fruitset 和 seeds。然后从剩余的分类特征中选取 1-3 个特征。具体来说,我使用 1 个温度范围列和 0-2 个来自其余类别特征的列来构成基础模型的完整特征子集
  5. 我使用了以下模型进行集成:
    a. LightGBM - 集成中最大的贡献者
    b. Catboost
    c. Random forest
    d. Gradient Boosting Regression

集成

  1. 与其他方法(如 ridge 或基于 optuna 的调优)相比,LAD 回归对我更有效。我采用了以下链接中建议的方法:
    https://www.kaggle.com/code/adaubas/ps-s3e14-stacking-leastabsolutedeviation-reg
  2. 我使用 LAD 将排名靠前的公开笔记本与我的基础模型进行融合,并准备提交
  3. 我根据 Public 榜分数对集成权重进行了少量手动调整

后处理

感谢 @mattop 提出的取整思路,它帮助我提升了 CV 分数和排行榜位置。我从他的讨论帖中采用了这一思路,链接如下:
https://www.kaggle.com/competitions/playground-series-s3e14/discussion/407327
我在集成后对测试集预测结果进行了一轮后处理。

未能奏效的模型

  1. TabNet regressor
  2. 神经网络 - 我应该更专注于特征工程来使其有效
  3. 线性模型
  4. XGBoost,特别是 objective = absolute error 的 XGBoost(表现极差)
  5. GAM
  6. Extra trees regression

本可以做得更好的地方

  1. 更好的准重复数据处理
  2. 更好的特征工程 - 我可以尝试更有效的衍生特征
  3. 选择更优的最终提交。我整体表现最好的提交在 Public 榜上略逊一筹,但可能在 Private 榜上表现更好
  4. 更好的集成策略 - 我在模型结果后基于 Public 榜分数微调了集成权重。如果我没有这样做,或许在 Private 榜上会表现更好

我的主要收获与总结

  1. 将预测值四舍五入到最接近的训练数据值 - 这可能是 Kaggle 内外许多实际任务中的有效方法
  2. LADRegression - 这是我第一次使用,今后会多加利用
  3. FLAML - 对表格数据非常有用。我倾向于使用 PyCaret 和 LAMA 进行自动机器学习建模,但 FLAML 在表格任务上同样出色
  4. 即使 CV 与 Public 榜相关,也要依赖 CV。基本上,始终应该依靠自己的 CV

最后,祝大家一切顺利,期待在下一期与大家再见!
快乐学习,诚挚问候!

同比赛其他方案