返回列表

9th Place Solution XGB stack

536. Playground Series - Season 3, Episode 7 | playground-series-s3e7

开始: 2023-02-14 结束: 2023-02-27 数据算法赛

第9名解决方案:XGB堆叠

作者: Sergey Saharovskiy (Grandmaster)
比赛排名: 第9名

恭喜本次比赛的获胜者!除了第一名之外,前十名的竞争者之间是一场势均力敌的较量。

以下是我的解决方案:

交叉验证 (CV)

30折分层交叉验证(30 Fold stratified)+ 内部5折验证(Inner 5-Fold)。

递归特征消除 (RFE)

我移除了2个特征:no_of_previous_cancellations(之前的取消次数)和 no_of_previous_bookings_not_canceled(之前的未取消预订次数)。(我烧了不少核心算力才从800多个组合中找到一个好的组合)。

日期异常值处理

通过填充该月的最大日期来修复日期异常值,具体遵循了我在一开始发起的讨论

目标编码

所有分类特征都使用了平滑均值算法进行目标编码,并采用了2层交叉验证以防止过拟合。

目标转换

我通过众数转换了一些存在冲突的重复目标。(我将最常见的值作为重复行的目标。对于50%-50%的样本,我保持原样未动)。

集成

爬山法。集成了7个XGB模型。

后处理(日期泄漏提升)

根据数据泄漏代码片段实现。

哪些方法无效

老实说,一切都很有效。直到最后一刻,我尝试的每一个想法都提高了我的CV和LB分数。在某个阶段,我被一堆训练良好的XGB模型困住了。我放弃了LGBM和CatBoost,因为它们产生的CV和LB分数较差。而且它们与LB的分数相关性也很糟糕。

哪些可以改进

我承担了一项艰巨的任务,为XGB、LGBM、CatBoost编写双重交叉验证框架,这花费了太多的时间和精力。最终我成功了,带有目标编码的模型不再过拟合。我花了太多时间创建“智能特征”,其中大部分都被证明无效。虽然我的一个带有智能特征的模型直接进入了前10名(也许我有些不知道的地方,最好把所有东西都扔进XGB-LGBM-CAT自动求解器中)。我觉得自己有点过度设计了。对于尚未完善的框架来说,前10名是一个合理的成绩。

更新

在对测试集中的253对重复项应用0.5的处理后,直接以优势获得了公榜第1名和私榜第2名,至少我的集成模型真的很棒!

排行榜截图

除了上述内容外,以下是我本该执行的操作:

test = pd.read_csv('data/test.csv')
idx = test[test.drop(columns='id').duplicated(keep=False)].id.values
sub = pd.read_csv('submissions/hill_20_19_17_21_5_6_11__wmean_public_leak.csv')
sub.loc[sub.id.isin(idx), 'booking_status'] = 0.5
sub.to_csv('submissions/0.5.csv', index=False)
    
同比赛其他方案