返回列表

# 7 approach| Hand-picked features and simple ensemble

542. Playground Series - Season 3, Episode 11 | playground-series-s3e11

开始: 2023-03-20 结束: 2023-04-03 定价与促销 数据算法赛
第7名解决方案:精心挑选的特征和简单集成

第7名解决方案:精心挑选的特征和简单集成

作者:Ravi Ramakrishnan(Grandmaster)
发布时间:2023-04-04
竞赛排名:第7名
标签:表格数据, 营销, 回归
投票数:15

大家好,

首先,我要感谢Kaggle举办了这一系列的游乐场挑战赛。同时,也要感谢所有积极参与的选手,使得这次比赛成为一次有趣且有益的经历。我还要特别祝贺@paddykb@janmpia最近晋升到内核大师级别,并感谢他们在这两周来的宝贵贡献。

我的方法可以概括为使用树模型和GAM模型进行岭回归集成,并在每个基础模型中选择性使用特征。具体如下:

特征工程

  1. 训练集噪声很大,存在大量准重复数据。在做初步EDA时,我预计会有很大的波动,因此决定通过集成多个使用不同特征选择的模型来解决问题。我发现这种方法对我的CV和公开排行榜位置都有积极影响,并决定在整个比赛中始终使用这种方法。
  2. 感谢@janmpia,我在一些基础模型中也尝试使用了均值特征。请查看他的工作(内核和讨论)以了解更多信息:https://www.kaggle.com/competitions/playground-series-s3e11/discussion/399393
  3. 我在所有模型中都保留了商店面积、家中汽车数和花店这三个特征,并为所有基础模型手动选择其他特征。每个基础模型选择4-6个特征,包括上述3个特征和其余特征中的1-3个。
  4. 我没有进行任何进一步的特征转换/缩放

目标变量

  1. 在回归分析中,我使用了np.log1p(train.cost)和RMSE指标。我认为这比在模型中制定自定义指标和目标更容易
  2. 在训练模型时,我反转了预测结果,以便使用np.expm1(preds)将预测值转换回所需格式

基础模型

  1. 我使用了20多个基础模型,包括手工调参的XGB、LGBM、Catboost和GAM回归器,主要调整了学习率、max_depth、reg_alpha和reg_lambda。在拟合模型时,我也使用了早停。
  2. 我使用R来准备GAM模型。我的代码与@paddykb的类似。也感谢他当前工作的贡献。
  3. 我的CV策略是简单的目标编码,使用pd.qcut(train.cost)分为10-20个目标箱。一些基础模型使用10个箱,另一些使用20个箱。然后我使用10x3重复分层k折来设计CV,使用目标箱构建分组。
  4. 我在所有折叠中都使用了原始数据来构建模型训练折叠,而评估(开发集)则是对应的比赛折叠。以这种方式使用原始数据显著改善了我的CV分数和公开排行榜位置

集成

  1. 我的集成元层是一个简单的岭回归(5000次迭代,random_state = 42)来合并预测结果。
  2. 在比赛开始时,我也使用了optuna集成,但岭回归表现优于optuna,因此被用于最终提交

未奏效的模型

  1. TabNet回归器
  2. 神经网络 - 我应该更专注于特征工程来使它们工作
  3. 线性基础模型

本可以做得更好的地方

  1. 我本可以使用准重复数据创建样本权重,就像获胜方案那样,这可以帮助我减少训练时间。我很困惑为什么我错过了这个明显的点
  2. 更好的特征工程 - 我本可以尝试更好的二次特征
  3. 我本可以使用额外的集成模型,如extra-trees和random forest。我全程都没有使用它们,只依赖于基于GBM的树模型

我的主要学习和收获

  1. 从获胜方案中,我认识到了使用样本权重的重要性。我知道这一点并且之前使用过,只是这次没有使用。今后我将注意在可行时采用这种方法
  2. 我应该更开放地尝试更广泛的模型套件,而不是局限于集成树模型
  3. R是处理此类表格任务的有力语言,我应该提高我的R技能,并在未来的任务中更多使用它

最后,祝大家一切顺利,期待在下一期比赛中见到你们!
快乐学习,诚挚问候!

同比赛其他方案