返回列表

Some ML, A lot of judgement and luck

373. COVID19 Global Forecasting (Week 4) | covid19-global-forecasting-week-4

开始: 2020-04-09 结束: 2020-04-15 健康管理与公共卫生 数据算法赛
一些机器学习,大量的判断和运气

一些机器学习,大量的判断和运气

作者:Μαριος Μιχαηλιδης KazAnova
比赛排名:第 2 名

简介

当你试图解决如此严重的问题时,这个标题可能看起来不太令人鼓舞,但这确实在这个系列赛中(考虑到较长的时间跨度)效果尚可(至少在前两周是这样)。我认为,如果你不是流行病学专家(甚至即使你是),预测那么长的时间(例如未来30天)需要大量的猜测和运气。

当你试图预测那么远的未来时,有太多未知的事情,比如:

  • 疫苗会问世吗?(好吧,这个可能还不是当前的情况——我认为我们还处于早期阶段)或者会有有效的药物吗?
  • 人们是否真的遵守了社交隔离规则,或者他们打算遵守吗?
  • 政府将实施什么规则?
  • 政府在执行规则时会有多严格?
  • 根据不同国家/地区人们的社交方式,感染率会有何不同?等等。

不用说,数据并不完美。

短期预测(也许在3-5天内)可以合理地建模。我希望你不介意我分享一篇博客,其中总结了一些关于如何在短时间跨度内针对现存病例进行建模的想法——其中提到的许多技巧也应用在了这里,特别是在数据预处理和预测的后处理方面。

我仍然相信,机器学习从业者与经验丰富的流行病学家联手合作,效果会优于任何个人独自工作,特别是当你试图同时对许多国家/县/城市进行大规模预测时。

(它的得分与我上传的模型略有不同,0.02549 对比 0.02551,尽管我使用了相同的种子——可能是因为我在 Windows 笔记本上运行——或者是 lightgbm 版本不同——不确定)。

机器学习部分

幂增长模型(Power Growth model)在过去描绘流行病方面效果很好,我认为许多人在这里已经做出了很好的实现。

我自己尝试了一个简单的实现——问题在于,如果没有专业知识(至少对我来说),调整增长是具有挑战性的——所以我尝试专门对增长进行建模。我尝试预测的不是计数或对数计数,而是:

“我每天需要用什么值乘以前一天的累计值”。对于第2、3周,我建立了60个独立的模型。确诊人数和死亡人数每一个+x天各有一个模型。

我使用 lightgbm 来构建模型。

特征包括:

  • X 累计计数是在多少天前达到的。其中 X 对于确诊病例是 [1,5,10,20,50,100,250,500,1000] 天,对于死亡病例是 [1,2,5,10,20,50]
  • 确诊和死亡的最多10个滞后的3天窗口平均增长率。
  • 第0天的实际确诊和死亡人数作为行计数。

目标是每个+x天的平均3天增长率。因此,我没有对 future1/current 的比率进行建模,而是在预测 day+1 的目标时取了 future1/current + future2/future1 + future3/future2 的平均值。这是因为它有很多峰值,所以平均值平滑了目标,并且(我认为)可以控制过拟合。

对于第2周,我只通过观察进行验证——没有交叉验证。对于第3周,我根据第2周的结果进行验证,对于第4周则根据第2周和第3周的结果验证。第2周和第3周模型的一个根本缺陷是它们忽略了0。模型需要一个 >=1 的初始值来增加增长,所以我预计后续模型的表现会差很多(除非我很幸运——不仅是我,最重要的是世界不再有新的死亡)。我用来初始化零病例值的规则很差(说得客气点)。

在第4周,我添加了一个模型,试图通过建模天数之间对数计数的差异来预测0病例。模型设置和特征是相同的,唯一的区别是,除了比率之外,该模型还使用相同窗口的对数计数差。在该模型中,我还添加了美国县级数据——我看到添加后有一点点改进(可能是因为它严重偏向于0,因为累计值通常较小)。除此之外,我没有发现其他外部资源

同比赛其他方案