最近冠状病毒肆虐,国家调动一切资源抑制疫情。突然想建立一个模型,对确诊人数进行预测。
试想,如果你能够提前预判患者增速什么时候下降,是不是可以帮助自己做一些决策?什么时候返回工作岗位、是否适合进行金融投资增加仓位或减仓降低风险?😀
实现预测,首先要思考,应该建立一个怎么样的模型?人数预测,属于回归问题,我们可以考虑线性回归、多项式回归、逻辑回归、mlp等等。
针对训练数据少的情况,一个有效的解决办法就是,建立迁移模型!透过历史数据建立一个合适的模型,然后针对新数据进行二次训练。我首先想到了2003年的SARS。
找到了这张图:
接着上wiki确认一下(https://en.wikipedia.org/wiki/Severe_acute_respiratory_syndrome)eventual 8,098 cases。再对比其他数据源,发现这个图的数据是比较靠谱的(可能会有一些出入,但不会太大)。
需要把图片中的患者数量提取出来,how???
给大家推荐一款软件:getdata graph digitizer,加载图片并提取数据后是这样的:
数据提取到本地保存为csv
day 2 3 5 7 8 10 12 13 14 17 20 22 24 27 30 33 35 36 39
num 149 209 299 390 509 629 927 1315 1554 1853 2241 2510 2720 2900 3139 3378 3617 3826 4155
day 40 42 43 44 46 47 48 51 53 55 57 59 62 64 66 71 72 75 78
num 4364 4722 4991 5349 5707 5976 6274 6454 6812 7051 7260 7470 7709 7888 7979 8249 8368 8399 8460
day 81 83 87 89 91 93 96
num 8490 8491 8492 8493 8494 8554 8525
观察数据,发现人数趋势与sigmoid函数趋势比较接近,考虑建立mlp模型,采用relu+sigmoid+linear的层级结构。结构代码:
from keras.models import Sequential
from keras.layers import Dense
model = Sequential()
model.add(Dense(units=50, input_dim = 1, activation=‘relu’))
model.add(Dense(units=50,activation=‘relu’))
model.add(Dense(units=1, activation = ‘sigmoid’))
model.add(Dense(units=1, activation = ‘linear’))
model.compile(optimizer=‘adam’,loss=‘mean_squared_error’)
model.summary()
考虑到目前2月6号为止,冠状病毒患者数量接近30000,远高于SARS患者数量,而sigmoid函数有极大值,如果对sars数据直接归一化处理,最终预测结果最大值<9000,无法实现对冠状病毒患者数据的准确预测,计划把所有数据除以100000,加快模型迭代收敛。
y_sars_norm = y_sars/100000
model.fit(X_sars,y_sars_norm,epochs=1000)
y_sars_predict = model.predict(X_sars)
y_sars_predict = y_sars_predict*100000
fig1 = plt.figure(figsize=(7,5))
plt.scatter(X_sars,y_sars,label=‘实际人数’)
plt.plot(X_sars,y_sars_predict,label=‘预测结果’)
plt.title(‘SARS患者数量 VS 天数’)
plt.xlabel(‘第几天’)
plt.ylabel(‘确诊患者总数’)
plt.legend()
plt.show()
看书去拟合效果还不错~勉强满意
加载冠状病毒患者数据,对模型二次训练(记得进行数据预处理)
model.fit(X_new,y_new_norm,epochs=1000)
预测1-100日的患者数量,生成一个1-100的list,输入给模型,结果如下:
出行时间安排在2月中旬以后,如果疫情确实得到控制,那出行更为安全;
如果2月2日之前金融市场过于恐慌导致大量资产抛售,或许是加仓的机会
春运是一个很大的意外因素,春节后的返工期,人流巨大,如果控制不好,可能导致疫情的第二波爆发,因此要重点关注返工期后的一周的人数变化
模型预测数据仅供参考,欢迎有兴趣的小伙伴共同探讨。
finally:flare老师的实战课程“零基础入门人工智能:系统学习+实战”课程已经上线,欢迎小伙伴们订阅,和flare老师一起学习AI,掌握AI工具,解决实际问题。