疫情什么時候才能結束?菜鳥用Python進行預測
什么時候能去武大看櫻花?什么時候才能再去重慶吃麻辣火鍋?什么時候才能再去海南沖浪?什么時候才能再去大理看風花雪月?2020年的春節顯得格外漫長,一切的計劃似乎都被突如其來的新冠肺炎疫情給打斷了。
究竟什么時候生活才能恢復正常?本文將試圖用python對疫情的趨勢做個預測,待疫情結束之時,一起去武漢看櫻花,一起去春熙路看小姐姐可好。
1.準備工作
編程環境:anaconda下Spyder。
數據來源:整理自國家衛生健康委員會官網。
需要安裝的依賴庫有:scipy。scipy是一個用于數學、科學等領域的開源科學計算庫,其建立在Numpy之上,可用于處理積分、優化、常微分方程數值解的求解、信號處理等問題。本文主要用于函數擬合。
2.算法流程
1).理論解釋
如何預測新冠肺炎的累計確診人數,目前常用的方法有基于SIR的傳染病模型,以及基于Logistic方程的方法等。SIR模型實現起來相對較復雜,本文將基于一個更簡單的模型——利用Logistic方程進行預測。
Logistic方程可用于描述,物種增長模型,當一個物種遷入到一個新生態系統中后,若該物種在非理想生態系統(存在天敵,食物、空間等資源緊缺等)中存在生存阻力,則物種數量大致呈現S型增長。開始產生一個緩慢的增長期,慢慢的呈現指數型爆發,后期隨著環境阻力的變化,逐漸趨于穩定。
用函數可以表示為:
參數的含義如下:
:表示隨著時間的變化,環境中物種的數量。
:表示環境中物種能達到的極限值。
:表示環境開始時期,物種的數量。
:表示增長速率,在圖形中展現的就是曲線的陡峭程度,越大,物種數量越快逼近N值。
:表示時間。
2).程序實現
程序中,首先定義待擬合函數,然后獲取“累計確診”人數數據,并利用curve_fit()函數進行參數擬合,得出需要擬合的參數。最后將擬合曲線和實際確診人數在同一圖中顯示,直觀觀測出模型效果。
通過將1月20日至2月8日的數據進行Logistic方程擬合,在2月9-11日三天預測數據和實際數據較為吻合。但在2月12日,官方的數據突然激增,這讓我們的模型失效。
在重新調整訓練數據,我們選擇將1月20日至2月26日的數據作為訓練數據,2月27-28日數據作為對照數據,可得到新的擬合曲線,預測值和實際值都相對較為吻合。
結論:
(1)利用Logistic方程進行預測的數據統計口徑很關鍵,統計標準一致,可以讓整個擬合曲線更為平滑。
(2)通過預測曲線預計累計確診人數將在3月上旬達到最大值(預計為8萬余人),之后疫情將逐漸趨于穩定。
休息了那么久,在疫情即將結束之際,也希望大家新的一年里,不要被疫情耽誤,盡快進入工作。山花爛漫之時,一起去旅行。