536. Playground Series - Season 3, Episode 7 | playground-series-s3e7
恭喜本次比赛的获胜者!除了第一名之外,前十名的竞争者之间是一场势均力敌的较量。
以下是我的解决方案:
30折分层交叉验证(30 Fold stratified)+ 内部5折验证(Inner 5-Fold)。
我移除了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)