返回列表

#3 Private 8 Public approach - simple ensemble with probing

580. Playground Series - Season 3, Episode 24 | playground-series-s3e24

开始: 2023-10-24 结束: 2023-11-13 临床决策支持 数据算法赛

#3 私有8公开方法 - 带探测的简单集成

作者:Ravi Ramakrishnan
竞赛排名:第三名
发布时间:2023-11-14

大家好,

首先,祝大家排灯节快乐!愿这光明节为所有人带来欢乐、健康和成功!我衷心感谢Kaggle举办了这次有趣的竞赛。这确实是一次收获满满的经历,我们学到的许多知识和经验同样适用于Kaggle之外的领域。我也想感谢其他参赛者的慷慨贡献,特别提及以下用户:

  • @cv13j0 -- 他的伪标签笔记本非常出色,在竞赛初期为这项任务提供了略有不同的视角
  • @arunklenin -- 他的笔记本是本次竞赛中最全面的工作之一,特别是他的EDA和特征工程部分
  • @oscarm524 -- 他的笔记本在竞赛开始时提供了很好的参考
  • @paddykb -- 我感谢他对任务的持续且有价值的贡献,尤其是他的LightGBM流程

特征工程

  1. 我最初从我关于次要特征的帖子开始,但发现在合成数据集上不使用它们是更好的选择
  2. 我使用了与@arunklenin的笔记本非常相似的特征暴力生成方法。我的方法与其相似,但我倾向于将特征限制在80-120个之间。我使用排列重要性来消除特征。这需要很长的执行时间,因此内核时间管理是关键。我使用本地PC来完成这项任务
  3. 我采用了基于目标类别的10x1分层K折CV策略。我也尝试过10x3重复分层K折策略,但并未给竞赛带来额外优势,因此我 revert 到10x1分层K折并取得了良好效果
  4. 我仅对模型使用了竞赛合成数据和原始数据。使用其他辅助数据在竞赛初期并未带来好处,因此我决定仅使用这些数据

模型开发

我在管道中使用了多种模型,包括:

  1. Catboost - 我使用了3个参数各异的模型
  2. LightGBM - 我使用了5个参数各异的LGBM模型
  3. XGBoost - 我使用了3个参数不同的模型
  4. 随机森林
  5. 逻辑回归
  6. TabNet分类器 -- 不使用它时我的工作几乎同样出色,因此它只给了我微小的优势
  7. 多层感知机 -- 神经网络略微改善了我的集成效果
  8. 广义可加模型

集成方法

我使用以下集成策略将上述单个模型进行组合:

  1. 爬山算法
  2. Optuna
  3. 堆叠

我使用后集成CV分数与其和排行榜的关系来评估集成效果。我发现我的Optuna框架与排行榜相关性良好,能够基于探测微调权重,因此决定采用这种方法。

我的最终提交包含了Optuna集成和探测。我基于排行榜分数手动修改了一些模型在折叠中的权重。我发现这种方法对CV分数影响很小,但或许对我有效。我的最终提交包括一个经过探测的Optuna调优集成和另一个不带探测的版本。两者效果都很好,但带探测的版本略胜一筹,为我赢得了第三名。

不奏效的方法

  1. 使用超过130-140个特征 -- 我尝试过,但CV分数没有提升,也没有改善排行榜分数,这印证了修剪低重要性特征的必要性
  2. 神经网络和TabNet -- 它们在最终集成中的权重很小。或许完全不使用它们也不会对整体模型框架产生很大影响
  3. 盲目探测 -- 我根据一些公开方法尝试过,但考虑到我在playground系列的过往经验没有采用。顶级公开工作的盲目集成很少能泛化,因此探测需要谨慎进行

我的收获

  1. 信赖CV分数
  2. 在良好且合适的CV策略上评估模型
  3. 没有必要时不要过度复杂化 - 简单模型具有强大的能力
  4. 模型参数调优比特征工程次要得多
  5. 谨慎探测 - 人们可能会抵制使用对CV没有积极影响的权重来探测公共排行榜的诱惑

此致,祝学习愉快!

同比赛其他方案