返回列表

4th Place – Residual XGBoost + Meta NN + Hill Climb Opt

676. Playground Series - Season 5, Episode 10 | playground-series-s5e10

开始: 2025-10-01 结束: 2025-10-31 交通流量与路况 数据算法赛
第四名 – 残差 XGBoost + 元神经网络 + 爬山优化

第四名 – 残差 XGBoost + 元神经网络 + 爬山优化

副标题:道路事故风险:从残差到稳健融合

作者: abdelbasset ben kerrouche

队友: Ravi Ramakrishnan

竞赛排名: 第 4 名

发布时间: 2025-11-01

首先,我想向 Kaggle 团队和 Playground 系列赛的组织者表达诚挚的感谢,感谢这次宝贵的学习经历。
同时也非常感谢所有分享想法和笔记本的参与者。

我特别感谢 @cdeotte 总是提供有用的信息,同时也感谢 Masaya Kawamata、Mikhail Naumov、Kirderf Aliffa Agnur 以及其他发布了优秀笔记本的选手——他们在比赛期间是非常鼓舞人心且有用的参考。

我还要真诚地感谢我的队友 @ravi20076 出色的团队合作,非常感谢。

方法 (Approach)

我们在这次比赛中的方法是收集和学习社区共享的信息。
我从 @cdeotte 的笔记本开始,并结合讨论中有价值的评论,尤其是来自 @broccoli_beef 的评论。

XGBoost

我尝试了几种模型——XGBoost、LightGBM 和 CatBoost,发现 XGBoost 给出了最好的结果。
因此,我决定主要专注于 XGBoost,训练残差模型并使用 Optuna 进行微调。

我的旅程始于第一次提交后的 CV 为 0.05598。
在应用了受 @cdeotte 启发的残差训练技术后,我的 CV 略微提高到 0.05594。
然后,我引入了特征工程,帮助将 CV 降低到 0.05590。
使用 Optuna 进行参数优化后,在使用以下参数后将其进一步降低到 0.05588:

BEST_PARAMS = {
    'objective': 'reg:squarederror',
    'eval_metric': 'rmse',
    'tree_method': 'hist',
    'max_bin': 518,
    'learning_rate': 0.018518760913887423,
    'max_depth': 7,
    'min_child_weight': 6,
    'subsample': 0.8043445574984056,
    'colsample_bytree': 0.632194196921175,
    'colsample_bylevel': 0.8258554264939971,
    'colsample_bynode': 0.8456510777534194,
    'reg_alpha': 0.15615008876432407,
    'reg_lambda': 0.9717727187629448,
    'gamma': 0.0048414273522507795,
    'max_delta_step': 0,
    'scale_pos_weight': 0.8129498984084946,
    'random_state': 42
}

感谢 @metamodels 的参数分享。

使用 OOF 和预测作为新特征

接下来,我使用 OOF(袋外预测)作为新特征。
我训练了 14 个 XGBoost 模型,所有模型都使用相同的基础特征(我自己的 delta 特征)加上其他参与者分享的额外 OOF 特征。

神经网络 (Neural Network)

最后,我训练了一个神经网络元混合器(Meta-blender),结合了我们要的 14 个 XGB 模型和 7 个 OOF,并使用 17 个不同的随机种子,达到 CV = 0.0558347。

当我转向神经网络元模型时,我再次包含了这些外部 OOF 特征以及我的堆叠模型输出。

爬山算法 (Hill Climbing)

然后,我使用了爬山算法(容差 = 1e-9,灵感来自 @cdeottehill-climbing 方法)来微调权重,这将我的 CV 提高到了 0.055821。

在最后阶段,我在这 2 个结果(我的最佳模型)之间应用了 blending。

CV 和 LB 分数之间的一致性使我对最终解决方案充满信心。

在最后,在探索了 @AnthonyTherrien 的笔记本后,我还尝试了爬山权重调整(爬山算法权重 1.2,神经网络权重 0.6),这略微提高了最终的私有分数。

结论 (Conclusion)

这次比赛是一次不可思议的学习之旅。
通过尝试不同的方法——从特征工程和残差训练到模型堆叠、神经网络融合和爬山算法——我能够逐步提高我的 CV,并与私有排行榜实现良好的一致性。

我真正感谢 Kaggle 社区的开放和协作,这使得这些挑战如此有价值。
获得第 4 名是非常有益的,但真正的价值在于获得的知识以及这次机会。

同比赛其他方案