Python實作,指揮中心的防疫政策有效嗎?

source :https://www.chinatimes.com/realtimenews/20200424004295-260405?chdtv

事先聲明:本文目的旨在展示簡化過後的思路,以及表達一種從問題分解到數據分析的方法,中間論據也許缺乏學術與實務之見解考量,不構成對任何政府政策的監督與批判效果。純為個人觀點,與我所處團體無任何利益關係也不具團體意見之效力。

完整程式碼與資料位於文末哦!

寫作動機

Covid-19 疫情是2020年一個非常嚴重的事件,不只喚起大眾公衛意識,也影響到各國經濟、勞工、物資調配等等….. 各國政府無不認真應對、商討共同對策,而臺灣的防疫措施尤其受到各國好評,指揮官陳時中曾回答,台灣能在防疫上做出控制,包括3個主要原因:專家群提供正確資訊協助指揮中心做決策;以及台灣疫情相關資訊很透明,與人民之間溝通良好;另外,也因為民眾普遍有遭遇SARS的經驗,所以對於此波疫情,在健康管理等措施都配合良好。

所以除了過去我們有過防疫經驗、大家上下一心提供正確資訊,還有很重要的一點:專家決策,在疫情之下除了勤洗手、戴口罩等個人防護措施,我們也可以思考:

「就算不是流行病學背景,如果今天要協助解決這樣的公衛問題,我們需要制定什麼樣的決策才能減緩疫情的傳播、幫助大家度過難關?」

疫情牽涉到的資料科學議題其實非常多,從商業界的供應鏈管控、人力配置、品牌商品供需策略到BI常用的資訊儀表板,包括約翰霍普金斯大學的儀表板、口罩地圖…再到預測領域的復工程度估計、疫情結束時間預測、傳播擴散模型、AI領域的計算機視覺,包括口罩辨識、社交距離偵測…到最直接相關的生醫基因序列檢定、病毒同源檢測,資料科學在解決問題上的確扮演了一個良好的夥伴角色。

決策的重量,指揮中心

Scope the problem ,因為上面能做的事情實在太多了,如果想協助解決問題就要排序自己的專案順序。我也曾經在疫情期間建立了一些預測模型、品牌衝擊的估計來分析疫情對商業界、臺灣生活的影響程度,今天想要探討的則是政策效果。因為除了第一線防疫人員,這些指揮中心的人應該是最需要、且最能夠透過資料科學家協助的,一個決策會牽扯到政府、人民上下合作,每一道決策都是很沈重的,因此透過檢視政策效果,我們可以從有效政策再去發想為什麼它是有效的、每一個人做了什麼事情才是對減緩疫情有幫助的?

也許防疫很簡單,每個人做了自己該做的事情就好,但是我們還是可以看看政策是怎麼制定的。事先聲明,有更嚴謹的做法,包括呈現差異、衡量效果在學術上還是用統計領域的做法會比較嚴謹。

流程如下:

Scope your problem

Data collection

Data Analysis

Scope your problem

我們今天想要看的是「政策效果」,最基本的方法就是去拆解這個名詞,政策效果是政策 + 效果,因此我會釐清與界定:

  • 「什麼政策」?A , B , C …?
  • 「什麼效果」? 我想看的是什麼?什麼東西可以用來衡量效果這件事情?

換句話說,我們可以賦予政策這個「事件」一個measurement,也就是「度量效果」。

政策非常多種,所以這是一個排序議題,用什麼值來排序?就是「效果」,優先選出自己感興趣的政策議題避免boil the ocean,通常我在排序問題的時候最常使用到的是報酬矩陣,不過還有一個專門解決沒看過問題的方法是「Synthesize your goal」,也就是你預期想知道的是什麼呢? 你做了這件事情最直接衝擊到的又是什麼呢?這個從心智模型出發目的是一樣的,比如在我的認知裡,「所有政策的制定,就應該減緩疫情效果。」這件事情我覺得是make sense的:

如果政策無法減緩疫情效果,那麼就不是一個「有效」政策。

這就是我的認知,於是我就知道了:只要無法減緩,就不是一個好的政策,後續就需要檢討,反之則是一個好的學習對象。 而跟「疫情效果」最直接相關的指標其實就是「確診人數」,所以我們大概界定出來了:

  • 效果:確診人數的變化,我想看1月到目前每天的確診人數
  • 政策:能夠對應確診人數的防疫措施

政策則需要去看新聞網站,看一下有沒有人有匯總,挑出自己感興趣的政策,並且能夠回答到自己的分析問題。這邊我挑選了兩個:

  1. 3/1 — 居家檢疫隔離服務 : 落實檢疫,會減少人的移動距離嗎?我覺得會,可以直接幫助到隔離者,增加隔離與檢測意願。
  2. 4/1 — 社交距離: 宣導社交距離能否減緩疫情呢?我覺得不會,宣導而已,而且施行起來有很多不便,就我的常識與生活(上課、工作、社團、其他相處),大多數人不會嚴格遵守1.5m。

注意到了嗎?我在挑選政策之後會分別建立一個假說,並且給出我的理由,建立假說的方式很多,這邊先不細談:

通常管理顧問在界定問題之後、收集與分析資料之前會先下一個假說,這樣我們才能有的放矢,試圖用資料去回答我們的問題。

Data Collection

確定了效果,我們就開始收集資料,資料源頭也算好找,我的需求就只出現了「時間、人數」,所以有這兩個欄位的資料,並且符合time period的1月之後就是我要找的資料,找資料的時候我會先上Github看一下有沒有人有匯總,不然就是先去釐清政策對應的利害人是誰,比如電信業可能要看NCC,公衛資料要找疾管署… 透過搜尋對方網站、open data來找。通常公衛資料在Open data中就可以找到。不過找到資料也不用太開心,我們先簡單看一下資料品質,理解資料的產生機制:

open data

ok ,這個資料我想是夠用的,它的即時性是每日更新的,而且有我想要看到的日期,其他都當作送我的(性別、縣市),那就可以下載下來。政府的資料還有一個優點,你知道誰是負責人,資料有疑問的時候都可以找到接口去詢問,這就是非常好的資料源。

另外知道了確診人數,還有別的資料可以度量嗎?有的,你要怎麼衡量「大家減少外出」呢?這可以很好聯想到「人們減少移動距離」,而移動距離的資料雖然比較私密,不過我很確定電信商有這些資料,題外話,這種對資料收集的敏感度是來自於過去分析經驗,多看個案、累積專案經驗即可,不用刻意累積或著急。

通常我確定了誰有這樣的資料,我就會去看看他們的提供方法,當然資料要是去識別、可公開的,這邊我就優先看看電信相關有沒有提供資料,果然有!Apple 之前釋出了Apple maps的資料,簡單講講AM,AM蘋果地圖(英語:Apple Maps)是一套由蘋果公司研發的電子地圖服務,也是macOS、iOS以及watchOS系統中預設的地圖服務軟體。

手機可以追得到你的定位,所以收集了開車、走路、搭乘大眾交通運輸工具等資料,我認為這個資料可以作為代理變數來解釋人們是否減少外出、呈現社交距離的資料,檢測social distance與疫情的關係。另外細粒度到城市,所以也可以分別看看不同城市的政策效果,我們來看看政策發布日期之後社交距離與案例判斷的關係,藉此查看政策對這些變數的影響效果。那麼到這邊,資料收集就結束,我們可以準備分析。

這邊是source :

open data 疫情查詢:https://data.gov.tw/dataset/120711

Apple distance case : https://www.apple.com/covid19/mobility

Data Analysis

通常我們會再進一步思考分析的策略,是哪一種分析方法、要用到什麼模型、什麼工具等等…這邊我就用Python,因為資料要處理接著分析實在太方便了,選得差不多之後就可以開始!先讀入我們需要使用到的套件。其實這次用到前四個就差不多了,我是習慣一次讀這些套件。

有了pandas我們就可以很快讀入資料,並且用head看一下資料大概長怎樣:

apple + open data

BTW,我覺得資料隱私上Apple這邊做得不錯,反之我們的確診人數資料隱私性上就不是很優,光這些資料,我大概就能透過一些推理的方法拼出這些人是誰,實在不夠去識別化,不過也許政府是為了人民健康安全才有限度公開人口統計的資料,這邊就不多加評論。還是建議大家維持資料分析的職業道德,不去揭露你分析的實體為何。

然後我們會處理到時間資料,所以先看一下各個變數的Data Type。

這邊我們將個案研判日改為datetime的形式,方便待會mapping到行動數據上。colors只是設定一下調色盤,之後畫圖可以用到。

看一下疫情資料

我們可以將畫圖風格改為R的ggplot,然後看一下疫情走勢:

我們可以看到3.15~3–27左右是個案密集出現的期間,而4/19也有一波高峰,是敦睦艦隊的事件。其實數據也會有這種問題,突然查檢出來其實是蠻難預料到的事情。原本看似漸漸穩定,不過後來爆出防疫缺口難免會打擊民心,更遑論對第一線醫檢人員的挫折,第一線醫護人員是最辛苦的,比起咎責(但是這有時候也是為了安撫民心與承擔責任的一種方式,也不能說咎責不好),更應該思考如何避免類似的情形發生。

接下來看看累積確診人數:

這邊也想說明一下,如果要估計疫情結束時間這種問題,透過這樣的EDA我們可以觀察到它是一個S curve,這個函數在社會科學或者流行病中是很常見的資料樣式,假設冠狀病毒的擴散和SARS、伊波拉一樣,都是呈現類似邏輯式函數的S曲線樣態,我們可以用每天公佈的確診人數,找到一條最適配的S曲線:f(x)=h⋅[1+exp(u−xs)]−1

  • h: S曲線的高度
  • u: S曲線的中間轉折點
  • s: S曲線的離散程度參數

不過這邊就不展示了,也許下一篇會寫疫情對品牌衝擊的量化分析,我們繼續本次的題目:

Apple data

這份資料格式並沒有Tidy,我們想要的是以date為index , distance為value的序列結構才是,所以要稍微整理一下。有興趣的讀者可以先思考一下該怎麼做,下方為資料整理的code,其實一行就結束了。可以稍微想一下!

透過先選取出臺灣的資料,再轉置與順序標註,我們就把資料換成自己想要的格式囉!

這樣我們就有了Apple的移動數據,接著來合併兩張表,這邊會用到映射的概念,就是將雙方重複的date當作合併指標,將資料mapping在一起。

好的,接下來我們想來看看以下兩個政策跟疫情的關係:

3/1 — 居家檢疫隔離服務

落實檢疫,會減少人的移動距離嗎?

此政策想要解決的問題是有些居家檢疫或者隔離者偷跑,或是遇到一些生活上的不便,但是不好向外求助的問題。 居家檢疫隔離服務理論上會大幅減少人民外出、並且整合地方與中央政府,我們來看看政策的說明:

此政策可以確保民眾於居家檢疫及居家隔離期間能獲得各項生活、心理及就醫支持,鼓勵配合防疫措施的民眾落實居家檢疫及居家隔離作業,降低民眾對居家檢疫及隔離對象的對立,提升全民防疫信心。重點綱要包括對象關懷、就醫協助、交通安排、生活支持及專線服務等,並於三月一日開始運作。

我們發現這樣並不是很好看出關係,原因是距離跟確診人數的尺度有差,在後面上升超過了距離,所以我們應該要用雙軸圖來看,首先我們來看看3/1的政策效果。簡單說,雙軸圖是指有多個(≥2)Y軸的數據圖表,多為柱狀圖+折線圖的結合,圖表顯示更為直觀。除了適合分析兩個相差較大的數據,雙軸圖也適用於不同數據走勢、數據同環比分析等場景。

並且標記出政策的執行日期(用垂直線表示即可)

哦,可以看到social distance似乎有下降,但是還是不太明顯,原因手機移動的週期性不好觀察,也許畫出均線會好一點,我們使用平移的方法來描繪出移動距離的變化。

均線在時間序列上是很常使用到的技巧,可以更明顯觀察出時間序列的走勢,在金融上也是一種技術分析的技巧。Python中方便的rolling.mean 語法就可以直覺的製造出均線囉!

這樣清楚了很多,我們可以看到人們真的從大概3/1開始減少了許多移動距離,政策生效,並且transit(大眾運輸)下降得最多,表示人們也減少了許多搭乘大眾交通運輸工具的機會。嚴謹一點我們可以透過統計檢定來看是否下降,但我覺得這張圖其實算是蠻明顯的。另外也要注意並不一定都是「此政策影響」有可能有其他因子變化,比如某個KOL突然大力宣導防疫政策變化,不過探討起來其實會很複雜,這又是影響範圍非常廣的政策,在報告的時候可以在旁邊放上「假設疫情只受到指揮中心發布政策影響」的假說,或者「為主要因子」的假說。

我們其實也可以看到數據整體是有週期性的,可以用百分位改變柱狀圖來呈現:

駕駛汽車似乎比較不受影響,不過走路、搭乘大眾運輸工具就下降比較多,猜測是因為大家不出門、也減少搭乘交通運輸工具,但是開車因為是內部空間,所以比較多人沒感覺?不過駕駛計程車、UBER、巴士等營業用車的駕駛人務必戴上口罩以保護自己。

這邊我們可以確認這是符合假說的,亦即我們覺得政策生效,而就這筆資料的結果來看似乎也是如此。公開「幫助居家隔離」跟減少人們移動次數存在顯著的關係。

4/1 — Social Distance

宣導社交距離能否減緩疫情呢?

社交距離:美國麻省理工學院(MIT)一項報告指出,由於新冠肺炎傳染力極強,社交距離2公尺並不能完全阻隔傳播,建議若必要的話,最好能相隔 8 公尺。不過每種移動方式的社交距離其實都不相同,舉例來說,搭乘大眾運輸工具無法拉開彼此的距離,就須全程佩戴口罩。因此在台灣搭乘大眾運輸工具,除了要量體溫,也要求必須戴口罩,才能進站和搭車;在餐廳吃飯時無法戴口罩,就需要用隔屏隔開。指揮中心甚至明文建議,朋友或情侶面對面交談時也需佩戴口罩。

這份「社交距離注意事項」是分別就餐廳、校園或辦公室、大眾運輸、賣場或其他營業場所、排隊人龍、特殊機構(如長照機構、監獄等)及其他特定場所等不同情境,提供維持社交距離的個別規範。建議民眾在防疫期間,務必遵守,以降低小區感染與傳播的機會,保護自己也保護他人。官方表示,相信國人的水平及自律精神,初期以柔性建議為主,暫時不會制訂罰則。

Policy Date : 中央流行疫情指揮中心3月31日宣布「社交距離指引」的原則,強調室外應保持1公尺、室內應為1.5公尺

似乎有趨緩一點?我們可以畫出差分後的數據來看看效果

其實之前就持續在下降了,這邊我們可以改看看,什麼時候是最高峰,而最高峰之後做了什麼作為之後的政策參考,3–25似乎疫情漸漸得到控制。

宣導社交距離能否減緩疫情呢?看起來還好,沒有特別有影響。

另一個點,交通工具

看到這邊,我突然發現了另外一個可以探討的點,我們來看看4/4,那一天指揮中心宣布搭乘大眾運輸工具應全面戴口罩,來看看政策說明:

未戴者不聽勸最高可罰1萬5,000元。原因是台灣已經有零星社區感染個案,出現不明感染源本土案例,更重要的是歐美疫情延燒,境外移入個案增加,需保持社交距離(人與人室內1.5公尺、室外1公尺)防堵疫情,因此才會一改先前2月7日衛福部網站說捷運、公車等大眾運輸工具不必戴口罩的呼籲。

我們來看看交通運輸工具的移動距離是否會因此顯著下降,全面戴口罩是一個合理的要求嗎?

ok, 搭乘交通運輸工具跟走路本身差距就持續在拉大,看起來不是因為交通運輸工具口罩政策的關係。統計上要確認這點可以做時間序列的結構變化 (structural break) 檢定,確定在實驗開始前後兩組差值有顯著變化。 不過在這邊我覺得蠻明顯的是差距持續在擴大。所以這其實是一個合理的要求,人們不會因為要求戴口罩而特別減少搭乘運輸工具,反而這變成一種基本素養。

結論

當然,我們也可以看看不同城市之間的執行效果,或者搭配領域專家來商討該如何制定更好的防疫決策,其實這種公衛議題的評估是很困難的,影響範圍很大,你很難移除掉其他因子的影響,有些人跳出來說話很有影響力,不可否認的是我們應該多注意自己的健康,並且關心身邊的人,協助團體檢測防疫缺口,各個公司、學校、政府都在嘗試,比如政大就非常多課程改成遠距教學、有些課的期中考也停了、部分社團活動也遭到禁止、有些公司的實習今年停招,疫情之下有些可能都是我們過去沒有遇過的問題,考驗解決問題與應變的能力,最後,希望大家都能平安過去!

程式碼與資料:https://github.com/Dennis055/Data-analysis-project/tree/master/project_analysis/COVID-19

歡迎想學習Python資料科學、商業分析、金融知識的人一起交流!本部落格的內容全部都是基於「分享」的實作、理論兼顧文章,希望能夠幫助到所有對資料科學領域有興趣的人們,長期關注可按左手邊的Follow!若喜歡我在 Medium 的內容,可以拍個手(Claps)這邊想做個實驗,好讓我知道你/妳喜不喜歡這篇文章:
拍 10 下:簽個到,表示支持(謝謝鼓勵!)
拍 20 下:想要我多寫「商管相關」
拍 30 下:想要我多寫「資科相關」
拍 50 下:我有你這讀者寫這篇也心滿意足了!

敬請期待下一篇!或是您也可以逛逛我的其他資料科學文章:人工智慧商務系列:

Python資料科學系列:

看我用金融的概念解釋AI:

如果想跟著我實作資料科學,開始寫程式必知必會基礎系列:

--

--

戴士翔 | Dennis Dai
Finformation當資料科學遇上財務金融

外商分析顧問,Ex- Apple Data Scientist,曾在FMCG巨頭/日商管顧/MBB管顧/高成長電商從事商業分析與數位轉型,專注分享管顧、商業、數據分析的思考。分析/演講/合作歡迎來信:dennis.dai.1011@gmail.com