返回列表

6th Place Solution - Lightgbm with Target flattened

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

开始: 2022-12-16 结束: 2023-06-16 销量与需求预测 数据算法赛
第六名解决方案:使用目标扁平化的Lightgbm

第六名解决方案:使用目标扁平化的Lightgbm

作者:此般浅薄 | 发布时间:2023-06-21 11:46:56 | 竞赛排名:第6名

非常感谢Kaggle和Godaddy举办这次比赛。祝贺所有获奖者,也感谢创建了许多优秀公开笔记本的朋友们。
以下是我的解决方案:

验证方法

  • 使用最近12个月的数据作为验证集
  • 为评估解决方案的有效性,我额外计算了12个验证月中"改善月份"的数量(而非简单的平均CV提升)。因为某些月份的增长率(mbd(当前月+1)/mbd(当前月)-1)存在异常高/低的情况,平均CV可能导致过拟合

异常值平滑处理

  • 对2022年6月至2022年8月的数据进行均值平滑,处理普遍的急升-急降现象
    • 还存在其他类似"原始值→急升→急降→原始值"的数据点,但尚未找到最佳处理方法
  • 采用giba提出的基于分数的基本常数平滑
  • 对几乎不变的cfips设置稳定黑名单:
    • [28055, 13101, 13265, 31009, 31115, 31149, 38047, 38087, 48033, 48301]

特征工程

  • 行动差异、目标平移、目标差异
  • 目标差异窗口:
    • 求和
    • 标准差
  • 目标窗口:
    • 求和
    • 0.2分位数
    • 0.8分位数
    • 下界:
      • 仅当sign(0.2分位数)=sign(0.8分位数)时有值,其他情况为0
      • 负值时取0.8分位数
      • 正值时取0.2分位数
  • 州集群

增强建模框架

构建增强模型框架,输入:1) 特征 2) n_cross:需预测的未来月份数,输出:未来n_cross个月mbd的增长率。通过调整n_cross从1-5,可直接预测公开/私有mbd。
详细结构:

  • 增强框架特征 = 基础特征 + n_cross
  • n_cross = 预测未来mbd的月份数
  • 输出目标:[mbd(当前月+n_cross)/mbd(当前月)]**(1/n_cross)-1
  • 模型:Xgboost

目标扁平化:使用扁平化目标训练并在预测时进行逆变换

  • 目标变量的分布随活跃基数变化而变化。活跃基数越低,目标的绝对值越高。
  • 通过模拟将所有活跃基数转换为相同的目标分布。假设转换后分布将变扁平,据此构建转换公式:
    • coef=(1/(0.007*(active_series/10+105))+1)
    • target_flatten=target_series/coef
  • 使用扁平化目标训练模型,预测时进行逆变换

后处理

  • 我注意到公开排行榜月份的趋势异常高于正常月份。这种现象也出现在其他月份(如2022年7月)。我认为这种整体月份趋势不可预测,模型不应过拟合它。
  • 考虑到公开月份的mbd是后续私有月份的基础,我对预测结果进行如下后处理:
    prediction=prediction*(1+0.001)
同比赛其他方案