返回列表

2nd Place solution: The Godaddy Microbusiness Data Cleaning Challenge

559. GoDaddy - Microbusiness Density Forecasting | godaddy-microbusiness-density-forecasting

开始: 2022-12-16 结束: 2023-06-16 销量与需求预测 数据算法赛
第二名解决方案:Godaddy 微型企业数据清洗挑战

第二名解决方案:Godaddy 微型企业数据清洗挑战

作者: Daniel Phalen(Kaggle Master)
发布日期: 2023年3月16日
竞赛排名: 第2名
类型: 竞赛解决方案

这是一个有趣的问题,看到大家提出的解决方案也很有意思。我对这类竞赛还比较陌生。我最大的疑问是,对于隐藏数据的探测在多大程度上是被允许的,尤其是在时间序列预测非常重要的情况下。

我还认为SMAPE是一个奇怪的评估指标选择,在商业意义上并不合理。一个小县的变化会对SMAPE产生很大影响,而如果你试图捕捉收入流,难道不应该更关心洛杉矶活跃预测数量的变化吗?我只能想象这对广告预算的分配可能有用。

代码:Godaddy Microbusiness Final

最大的问题 - 数据质量

正如许多人指出的,SMAPE是一个相对指标。对于我们预测的值(1个月约为1.2-1.5,3-5个月合计约为3.2),我们可以查看单个CFIPS的贡献。

$$\Delta_{SMAPE,i} = \frac{200}{n_{counties}} \frac{|F_i - A_i|}{F_i+A_i}$$

例如,从0变为非零的情况,每月差异约为0.0638。与此同时,这些模型的预测似乎每月变化约0.5%,这远低于许多25%县的最小活跃条目变化。

其次,许多CFIPS的数据非常糟糕。主办方承认他们在2021年1月进行了一次方法变更,导致了一些跳跃,我怀疑在第一个月后还有另一次变更。

最让我困扰的是CFIPS 56033,怀俄明州谢尔曼县,那里有2.36个微型企业/工作年龄人口。我只能猜测,如果存在错误分类,他们会将其转储到那个CFIPS中。我还想知道在COVID时期,由于人们追逐PPP贷款,是否发生了一些欺诈行为,导致了这些巨大的跳跃。然而,其中许多问题最终都会恢复,如下所示:

因此,我认为这个问题的关键在于:如果我们发现一个巨大的跳跃,它会恢复吗?在这方面,我相信12月与第一个预测月3月之间的间隔会有所帮助。我也希望GoDaddy能改进他们的数据收集程序,这会有所帮助。最后,如果他们想在业务中使用这个模型,那么建立一个大型机器学习误差校正模型来处理数据收集问题可能并没有太大用处。

我的解决方案是混合使用公共排行榜探测单个CFIPS的变化、对异常CFIPS进行恢复预测,以及对平滑变化进行预测。

公共排行榜 - 仍然非常有用的信息

根据上述公式,正如@petersorenson360所建议的,排行榜精确到小数点后4位,因此你对单个值不到1%的变化都很敏感。从测试数据公布到最终提交截止日期大约有20天,你可以探测大约100个CFIPS的最终值。实际上,如果你让数值变得更差,反而更容易推断,因为上述公式可以让你计算出确切的活跃条目数量。

许多大的跳跃会恢复,我们试图计算出这可能需要多长时间。这最终可能会成为决定胜负的关键,而且我认为测试数据和私有数据之间几个月的间隔将有助于确保它们恢复。这是迄今为止最大的影响因素。

连续模型

在看到GiBa的@titericz笔记本后,他的数据清理方法让我想起了期货算法交易中使用的"连续合约"。基本上,你需要将一系列不连续的价格变成平滑的序列。因此,对于我所说的连续预测,我使用了一种数据清理方法:寻找活跃条目数量中的巨大跳跃,然后进行移位以使其平滑。这样,活跃跳跃较大的月份就变成了零活跃跳跃。这种平滑方法在我尝试的众多方法中给出了最佳的CV分数。

然后我设置了CV环境。对于模型,我使用了XGBoost,添加了额外的指标,并防止了未来信息的泄露:

  • 滞后密度变化和滞后活跃值
  • 上一年的pct_bb、pct_college、pct_it、pct_foreign_born、median_hh_inc(许多公开笔记本在特征中使用2021年人口普查数据训练2019年数据时,存在隐含的前瞻性偏差)
  • 该县的劳动力和劳动力参与率
  • 该县10年平均人口百分比变化
  • 纬度和经度
  • 来自GoDaddy网站的engagement、participation和MAI_composite
  • 按人口加权的微型企业密度与周边县平均值的差异

我发现大约5000的人口截断值是有帮助的。将模型四舍五入为整数活跃值也有点帮助。这些外部指标对于长期预测更有用,因为存在向平均值回归的趋势。

其他注意事项:

  • 实际上,我发现训练1个月的前向变化,然后将该预测反馈到模型中并重新计算所有指标,能得到最佳的CV,而不是直接预测3个月后的预测。这样偏差更小。
  • 使用的scale变量在预测公共排行榜时似乎有效,但在我的CV环境中表现非常糟糕。
  • 同样,注意到最后一个值相当好,而且我使用的是前向滚动模型,我使用调整好的公共模型在1月预测中修补了一个作为真实值估计的预测,然后从该点开始前向滚动XGBoost模型。
同比赛其他方案