376. COVID19 Global Forecasting (Week 5) | covid19-global-forecasting-week-5
我的方法非常直接:我训练了大量非常简单的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)
其中 a、b 和 c 只是线性系数。
dev(lamb) = np.array([lamb * n for n in range(num_days_to_predict)]) – 用于使较晚日期的预测置信度降低(或增加)。
(我加入比赛较晚,没有足够的时间):