返回列表

4th place solution - stacking approach with XGB as meta model.

589. Playground Series - Season 3, Episode 26 | playground-series-s3e26

开始: 2023-12-05 结束: 2024-01-01 临床决策支持 数据算法赛
第4名解决方案 - 使用XGB作为元模型的堆叠方法

第4名解决方案 - 使用XGB作为元模型的堆叠方法

作者: Kirderf (Kaggle Grandmaster)
发布时间: 2024年1月2日
比赛排名: 第4名

感谢PS3 2023系列比赛,这一直是测试新模型和想法、与旧模型进行基准测试的有趣且良好的领域!比赛开始顺利,结束也同样精彩,在PS3E1中获得第1名,在这次比赛中获得第4名。整个系列赛共同点是获得的宝贵知识和洞察。

解决方案

正如这篇帖子所暗示的,XGB在分类任务中表现优异,这也是我们的基础思路。

关键在于使用堆叠方法,结合多个其他顶级解决方案的OOF(Out-of-Fold)预测结果,并将XGB作为元模型来训练堆叠预测值加上原始特征。同时尽量避免对每个解决方案过度调优,以降低过拟合风险,而是将预测结果作为额外特征用于最终的堆叠训练。

许多解决方案采用了相同的小幅特征工程,如下所示,其余特征工程保持不变:

train_df['Age_Group'] = pd.cut(train_df['Age'], bins=[9000, 15000, 20000, 25000, 30000], labels=['A', 'B', 'C', 'D'])
train_df['Log_Age'] = np.log1p(train_df['Age'])
scaler = MinMaxScaler()
train_df['Scaled_Age'] = scaler.fit_transform(train_df['Age'].values.reshape(-1, 1))

训练的不同解决方案和框架

AutoGluon

使用AutoGluon最新预发布版本1.0.1b20231208,默认启用零样本HPO。训练框架使用了以下加权模型集成。我也尝试了蒸馏和伪标签技术,但效果不佳。

ID 模型名称 分数 评估指标 训练时间 推理时间 折叠数 是否使用
0 WeightedEnsemble_L2 -0.436142 log_loss 505.38 0.004281 2
1 XGBoost_r89_BAG_L1 -0.441355 log_loss 19.33 0.470275 1
2 CatBoost_r137_BAG_L1 -0.441618 log_loss 115.86 0.138598 1
3 CatBoost_r50_BAG_L1 -0.442764 log_loss 78.54 0.266119 1
4 LightGBM_r130_BAG_L1 -0.443168 log_loss 49.68 1.180046 1
5 XGBoost_r33_BAG_L1 -0.451191 log_loss 68.16 3.457726 1
6 RandomForestEntr_BAG_L1 -0.475263 log_loss 3.05 0.428620 1
7 NeuralNetTorch_r79_BAG_L1 -0.482747 log_loss 66.30 0.301830 1
8 NeuralNetFastAI_r145_BAG_L1 -0.489281 log_loss 94.55 0.755018 1

LightAutoML

训练了LightAutoML 0.3.8b1版本,训练框架使用了以下加权模型集成:

[16:19:15] 模型描述:
新对象的最终预测 (level 0) = 
     0.06558 * (5个Lvl_0_Pipe_0_Mod_0_LightGBM模型的平均值) +
     0.17057 * (5个Lvl_0_Pipe_0_Mod_1_Tuned_LightGBM模型的平均值) +
     0.27900 * (5个Lvl_0_Pipe_0_Mod_2_CatBoost模型的平均值) +
     0.48485 * (5个Lvl_0_Pipe_0_Mod_3_Tuned_CatBoost模型的平均值)

[16:19:15] ==================================================
[16:19:15] 融合: 以相等权重开始优化,分数为 -0.4164338072355177

AutoXGB

使用标准设置训练了AutoXGB 5折交叉验证,但加入了额外的特征。

公开笔记本

https://www.kaggle.com/code/mattop/ps-s3-e26-lgbm-xgb-preprocessing-fasteda
重新训练了笔记本并保存了XGB和LGBM的OOF结果。注意到一个良好的本地CV分数,可用于堆叠以及作为自建模型的多样化模型。

其他训练的解决方案

训练了多个其他SOTA解决方案和想法,例如使用旧竞赛中的顶级解决方案(多分类和二分类),分别训练每个类别并使用预测结果作为额外特征。效果良好,但以下四个解决方案已足够。

堆叠

我随后训练了最终的20折XGB模型作为元模型,使用原始特征、额外创建的特征以及OOF预测结果,CV分数和排行榜得分都得到了提升。我还训练了一个二级堆叠方法,使用多个测试过的堆叠XGB模型,作为第二次提交的集成替代方案。


就是这样!Happy Kaggeling!

同比赛其他方案