/Forecast_COVID-19

使用python预测拟合并预测COVID-19发展的趋势

Primary LanguagePython

Forecast_COVID-19

使用python预测拟合并预测COVID-19发展的趋势
本次预测基于python语言,选择传染病学中经典模型SEIR模型,S代表易感人群,E代表处于潜伏期的人群,I代表患者,R代表移除人群

数据爬取

数据来源于网易新闻每日公布的疫情人数,选择网易新闻作为爬取对象的原因是:网易新闻提供了爬虫接口,而且疫情数据直接存储在json中,可直接发出请求并提取其中数据,按照要求分割数据,将所需数据存储到data文件夹下,对于大型网站如丁香园,在爬取其发布的数据时,其统一资源定位符url难寻找,而且还要对爬取后的数据进行json化处理,当然,网上已经存在处理好的数据接口,可以直接调用,为了更深入的了解爬虫,我选择了爬取网易新闻的数据。

模型建立

有了数据之后,4要对SEIR模型进行改进,该模型规定潜伏期人群没有传染性,这显然不符合COVID-19的特征,因此在算法实现过程中,增加了潜伏期人群对易感人群的传染,而且COVID-19大约存在17%的无症状患者,这也是在模型过程中需要考虑的。为了更加准确的预测疫情的发展趋势,使用了动态化的参数,即通过logistic函数求导来表示接触率的变化,具体操作为:不断迭代某一时期的接触率,使用梯度下降法通过最小损失函数找到最优接触率,梯度通过偏导数表示,根据时间(每一行)来迭代,不断更新参数,基本可再生数R0=接触率/康复率,当基本可再生数<0时,表示疫情拐点(或者是确诊人数开始下降)。

灵敏度分析

在算法运行过程中,选择2019-12-08到2020-02-13之间的数据作为训练数据,来训练模型,用2020-02-13到2020-02-23之间的数据做函数拟合,效果图见Figure_4.png,最终结果疫情将在2020-02-20左右到达拐点,确诊人数(减去了康复,死亡的人数)到达最大,约为60000人,疫情将在2020年4月中旬得到基本控制,整个时期的平均绝对百分误差为约0.07,模型效果良好。

模型不足

模型未考虑2020-02-13之后政策等因素的变化对疫情造成的影响
模型对于死亡率的数值比较笼统,随着疫情的深入,医疗环境成熟,死亡率应该会有一定的回落
仅展示对于全国疫情的预测,其余预测、拟合结果均在image文件夹下