返回列表

9th place solution (a lot of LGBMs blended)

376. COVID19 Global Forecasting (Week 5) | covid19-global-forecasting-week-5

开始: 2020-05-04 结束: 2020-05-11 健康管理与公共卫生 数据算法赛
第9名方案(大量LGBM模型融合)

第9名方案(大量LGBM模型融合)

作者: Ilia Larchenko
比赛排名: 第9名

我的方法非常直接:我训练了大量非常简单的LGBM模型,融合了它们的预测结果,并应用了额外的近似线性变换来优化最终指标。

概述

  • 每个模型将过去N天的新增病例数和死亡数作为输入,并除以该地区截止输入最后一天的最大病例/死亡数值,用于预测距离最后输入日第K天的病例或死亡数量(同样除以截止当日的最大值)。

  • 每个模型都使用所有可用数据进行训练:包括所有地区和所有可能的 N+K 天的时间窗口。但是不同的日期有不同的权重——越晚的日期权重越高。每个特定日期的权重与 (0.9)**(-n) 成正比,这意味着训练集中靠后的日期在训练期间具有更大的重要性。

  • 每个模型仅仅是使用默认参数的 lightgbm.LGBMRegressor()。我训练了许多不同的模型,遍历了 N(range(5, 40, 5))和 K(range(1,32))。

  • 然后,我使用所有模型对测试集或验证集中的每一天进行所有可能的预测(我使用了最后30天进行验证),并计算了每天的最小值、最大值和平均预测值。

  • 事实证明,这些预测相当悲观——预测值非常高。这就是为什么我应用了额外的线性变换和偏差因子,并使用以下公式计算最终预测(系数在验证集上进行了优化)。

pred_0.5 = a[0] * mean + a[1] * min + a[2] * max
pred_0.05 = pred_0.5 + (b[0] * mean + b[1] * min + b[2] * max) * dev(lamb_min)
pred_0.95 = pred_0.5 + (c[0] * mean + c[1] * min + c[2] * max) * dev(lamb_max)

其中 abc 只是线性系数。
dev(lamb) = np.array([lamb * n for n in range(num_days_to_predict)]) – 用于使较晚日期的预测置信度降低(或增加)。

未完成但可能应该做的事情

(我加入比赛较晚,没有足够的时间):

  • 优化LGBM的超参数。
  • 平滑预测(我发现某些天有很多异常值),例如使用预测值的5%和95%分位数代替最小值和最大值。
  • 使用其他信息作为输入,或以某种方式利用不同地区之间的联系信息。
同比赛其他方案