當前位置:
首頁 > 科技 > 為什麼說不能絲毫放鬆對疫情的警惕?Python模擬實驗告訴你

為什麼說不能絲毫放鬆對疫情的警惕?Python模擬實驗告訴你

新智元推薦

來源:Crossin的編程教室

編輯:張佳

這一個月來,大家最關注的就是新冠病毒疫情的發展了。令人欣慰的是,最近國內不少省市都沒有新增確診病例甚至病例數「清零」,已調低了防控級別,逐步復工復產。

這時我發現,在朋友圈中分化出了兩種截然不同的觀點:

一種認為,病毒還沒完全消失,這時候就出門,很可能帶來第二次傳播,所以應該繼續延續之前的封閉式管理;

而另一種則認為,目前湖北以外地區的疫情已基本得到控制,風險已經不高,而如果繼續限制出行則會給經濟帶來更大的損失,應該放開管控。

這兩個觀點我個人覺得都有道理但都不能走極端。既沒有必要過度恐慌,也不能對防控麻痹大意。尤其現在國外疫情擴散的情況下,我們更要注意潛在的風險。

這段時間在家裡,我也自己做了一個模擬人群行為和病毒傳播過程的程序,或許可以給大家一些參考。(代碼見文末)

出行模型:模擬群體中每一個人的行為

在流行病學中,已經有一些成熟的模型和公式。但我並非相關專業人士,所以我並沒有套公式,而是用了一種簡單粗暴的方法:模擬群體中每一個人的行為

這個模型的基本要素是區域,這裡是10萬個人分布在1萬個區域上的效果。圖上點的大小反應了這一區域里人數的多少。考慮到現實中人群不是均勻分布的,這裡我們80%的人集中在了中間25%的區域中

然後,讓其中的每一個人都移動起來。我給這個二次元世界的人們設定了這樣的規則:

在每個時間段中,有一定概率會出行,否則將留在原地。這個概率我們稱之為出行意願,可以在程序中修改。對應現實中,我們上班、上學、逛街、坐公交、去飯館,都是一種出行,都會在某個時刻與一群人在同一個區域

每個人會有3~6個常駐區域,在出行時,會有大概率在常駐區域中移動,但也有一定幾率會去新區域。這就好比,大多數人主要在辦公室、食堂、公交、家等幾個固定區域移動,同時也不可避免去其他一些地方

如果去新區域,那麼大概率會在周邊一格區域;但也有一定幾率會去隨機位置。對於隨機位置,你可以理解為火車、飛機等長途交通,現代人有可能在一天之內去到世界上任何一座大城市。

基於上述規則,我們的世界就動起來了。為了方便確認,我們標記出3個人,來觀察下他們的行為是否符合預期。

大部分時候,每個人都會在鄰近的幾個區域移動,偶爾也會出個遠門。

沒有設定任何數學公式的傳染模型

定義了人的行為,我們還要來定義另一個主角:病毒。我們設定如下規則:

疾病具有一定的潛伏期發病期,潛伏期無癥狀,難以識別。但潛伏期不代表沒有傳染性,所以我們會用另一個參數來設定傳染期的開始時間

在每個時間點上,人們會接觸部分同區域的人,處在傳染期的人就有一定幾率傳染給其他接觸者

隨著時間推進,被感染的人會依次經歷潛伏期、發病期。發病期有一定幾率會發展成重症,重症則有一定幾率會導致病亡

我們假定這些基本都是可自愈的。如果能堅持到發病期結束,則會康復

這其中牽涉的各環節幾率,我們都可以在程序的開始處設定好。

說明:因為代碼中用到的參數很多,為了便於理解,我把所有參數變數都用了中文命名。

首先嘗試設定潛伏期為5天左右發病期為10天左右,在潛伏期結束前一天具備傳播性的情況。

我們用顏色來標記一個地區的整體情況,紅色表示感染的人群的比例,綠色表示康復人群的比例。

可以看到整個地圖上經歷了從最初小範圍轉播,到大面積爆發,再到逐步自愈康復的過程。

統計每個時間點上不同狀況人群的數量,繪製出這樣幾條曲線:

其中藍色為健康人群、紅色為被感染者、綠色為康復人群、黑色則是不幸病亡人的數量。雖然我沒有設定任何數學公式,但這一曲線的形態與流行病學的經典模型是相符合。這也從側面驗證了我們的模擬具備一定的可參考性。

【模擬參數】

潛伏期分布 = (5, 2)

發病期分布 = (10, 3)

傳染起始日 = -1

傳播概率 = 0.5

免疫概率 = 0.1

重症概率 = 0.05

病亡概率 = 0.1

戴口罩意願 = 0

出行意願 = 0.8

接觸比例 = 0.5

入院意願 = 0.1

【模擬結果】

被感染:72019

病亡:18018

病亡率:20.0%

在這個比較粗放的模型中,如果不加以干預任其發展,最後除了我們預先設定了一定比例的天然免疫人群外,其餘人最終都會被全部傳染。最終的病亡人數就單純取決於該疾病的致命性。這在現實中自然是不可能的。

於是,我們再給這個模型增加額外的參數:醫院

在這個世界中,我們增加2萬張床位。當一個人有了發病表現之後,就很可能去醫院就醫。一旦進入醫院,那麼他將不再出行,同時病亡的可能性將大大下降。

再次模擬運行後可以看出,如果有充足的醫療資源,病亡率低很多。

【模擬參數】

醫院床位 = 20000

入院意願 = 0.1

救治概率 = 0.95

其他同上

【模擬結果】

被感染:85867

病亡:3944

病亡率:4.4%

但是!

在現實中,醫療資源是有限的,當遭遇到傳播性強、甚至潛伏期無癥狀時就會傳播的疾病,醫療資源會在短期內迅速耗盡,失去對疫情的控制:

【模擬參數】

醫院床位 = 2000

其他同上

【模擬結果】

被感染:80901

病亡:8956

病亡率:10.0%

開啟口罩、方艙防控模式,疫情擴散得到抑制

所以,抗疫不能僅靠醫院。當發病人數達到一定閾值之後,我們開啟防控模式:

大幅降低人群的出行意願,並減少同一區域的人群接觸比例

讓大多數人帶上口罩,降低傳播幾率

另外很重要的一點是,增加方艙這個設定:將所有發病人員儘可能收入方艙,阻止進一步傳播;同時也把有限的醫院資源留給重症病人

在多措並舉的努力下,可大大抑制疫情的擴散。

【模擬參數】

醫院床位 = 2000

方艙床位 = 10000

警戒人數 = 1000

戴口罩意願 = 0.9

出行意願 = 0.2

接觸比例 = 0.2

入院意願 = 1

其他同上

【模擬結果】

被感染:11343

病亡:173

病亡率:1.5%

放鬆警惕後果不堪設想

那麼,是否到了可以放鬆的時候呢?

如果現在我們稍稍改動一下程序,在進展到40天之後,把人們的出行意願、戴口罩意願、接觸幾率都恢復到平常的水準。那麼,疫情將會再次出現一波擴散。這還是考慮到已康復人不會再次感染的情況。真實情況下,潛在的風險可能更大。

【模擬參數】

解除時間 = 40

其他同上

【模擬結果】

被感染:76083

病亡:9901

病亡率:11.5%

所以啊,萬不可放鬆警惕,復工復產很重要,也要記得戴口罩,開窗通風勤洗手,別往人多地方跑。

即便不繼續維持之前高級別的防控措施,我們只要保證大多數人還在戴口罩,適當降低不必要的外出,那麼疫情就會得到有效的控制。並非一定要休克式的嚴防死守。在做好重點地區疫情防控的前提下,相對安全地區的人做好個人防護,有序復工才是更加可持續的應對方式。

【模擬參數】

解除時間 = 40

戴口罩意願 = 0.9

出行意願 = 0.8

接觸比例 = 0.5

入院意願 = 1

其他同上

【模擬結果】

被感染:11212

病亡:181

病亡率:1.6%

最後我想說,這次新冠病毒來勢兇猛,人類對它知之甚少。因此在第一回合,我們損失慘重,短期內也難有特效藥的出現。但我們的防控體系已經建立起來,從數據上也明顯看出國內的情況正在不斷好轉。但隨著復工潮的到來,以及病毒在國外的擴散,接下來的任務依然艱巨。而在這場防控戰中,我們每個人都不可能置身事外,都是決定成敗的因素之一。

在這裡,也希望在這個特殊時期大家多一些理性,也多一些寬容。齊心協力,共克時艱。

詳細的參數使用和模擬邏輯,大家可結合代碼來理解。建議使用Jupyter來運行代碼。

作者簡介:Crossin先生,上海交大計算機碩士,計算機視覺方向,曾在業內多家公司從事相關方面的技術工作。他的公眾號「Crossin的編程教室」專註於Python教學已有6年,淺顯易懂的零基礎教程累計讓數萬名學習者邁入編程的大門。

病毒傳播模型代碼:

https://gitee.com/crossin/snippet/tree/master/InfectSim

B站視頻:

https://www.bilibili.com/video/av93691362/

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!


請您繼續閱讀更多來自 新智元 的精彩文章:

5億聽障人士福音來了!阿里研發讀唇AI,識別精度超人類唇語專家
拋棄台積電?英偉達7nm安培GPU或選擇三星代工