返回列表

2nd Place Solution

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

开始: 2023-02-14 结束: 2023-02-27 数据算法赛
第二名解决方案

第二名解决方案

作者:Jose Cáliz | 排名:第2名

大家好,

这是我在本次比赛中获得第二名的方案描述:

交叉验证 (CV)

我的交叉验证是使用预订日期(booking date)作为特征进行分层的。我决定使用这一列而不是目标变量,因为有些月份的观测值很少,如果按目标分层,它们会被分配到同一个折叠中。

我集成的一些模型使用了30折交叉验证,其他的则使用了20折,主要是因为计算成本太高。原始数据集被连接到每一折中,即对于20折交叉验证,每一折都包含完整的原始数据集 + 95%的训练数据集。

数据填充

异常日期使用该月的最后一天进行填充。

重复数据处理

所有重复数据都是成对出现的,并且总是包含1个正标签和1个负标签。这里存在两个泄露点,大多数人发现了第一个,但第二个没有被披露。

  1. 对于测试集中出现在训练集中的重复项,技巧是将未知标签分配为已知标签的相反值。
  2. 对于测试集中同时也出现在测试集的重复项,技巧是分配一个能最大化袋外分数的分数。解释:如果你有一对重复项,任何模型都会为它们预测相同的值,因此任何接近0或1的值都会损害你的模型。由于AUC是一个排序指标,且正样本比例约为38%,那么理想情况下,最佳阈值应该位于预测值的第62百分位数,这个值可以用来覆盖重复项的预测值。

特征工程

我发现大多数开箱即用的特征效果都很好。我使用的一些额外特征是 is_generatedis_inconsistent,这两个特征都是指示变量。在进行序列特征选择时,年日(Dayofyear)特征也在某些模型中被选中。

模型集成

最终集成包含了16个模型,这些模型是使用爬山法技术筛选出来的,权重则使用Nelder-mead算法进行了优化。我没有对预测值进行排序。大多数模型是LGBM,还有几个XGBoost。所有模型都使用早停进行训练,测试集预测值是通过每个折叠模型的平均值计算得出的。

无效尝试

节假日特征、月份日期特征、一个用于指示日期是否不一致的指示列、超过30折的验证。

我的交叉验证分数与排行榜分数完全相关,我觉得如果我有更多时间,也许我会使用一些公开的notebook来进行最终的集成。

同比赛其他方案