我在滑 Instagram 或 Facebook 的時候,總會忍不住羨慕朋友們的生活怎麼都那麼光鮮亮麗:在歐洲的美麗教堂打卡、佳餚美酒的派對、或者有人開心地分享自己又再次升遷等等,常陷入一種「大家的生活都好完美」的想像,這正是經典的倖存者偏差 — 只有近況最美好的人才會主動分享,生活平凡無奇的人根本不會在社群媒體被你看到,而平凡人才是真正的多數。
要在資料科學領域深耕,除了要懂統計理論以外,擁有偵測出資料偏誤的嗅覺更是必備能力,才不會「Garbage in, garbage out」。
這則筆記將分享極其常見的倖存者偏差、以及與其概念相似的「死者偏誤」與右設限資料,我將用圖表介紹這些偏誤的意義以及真實案例,並分享該如何用漏斗分析與存活分析對抗這些數據分析偏誤。
目錄
倖存者偏差介紹
要談倖存者偏差,許多「大數據」相關書籍都會提起以下這個二戰時期戰鬥機 案例。
下圖是軍方觀察戰鬥機被砲火擊中位置的分佈圖,軍事專家在考慮該如何加強飛機防護、提高軍人生存率,依據這張圖,你會怎麼從數據提供資訊呢?
只看紅點最集中的區域,我們可能會認為機翼經常被砲火擊中,因此得到「需要加強機翼防護」的洞見,如果這樣推論,就犯了倖存者偏差,因為軍方能觀測到彈孔分佈的只有成功飛回來的倖存戰鬥機,而真的需要被加強的是那些在沙場上犧牲、飛不回來的戰鬥機。
當時的 統計學家 洞悉了這項倖存者偏差,與直覺相反地,他提出最需要強化的是分佈圖上完全沒有紅點的毫髮無傷區域,那些沒飛回來的飛機,正是被擊中這些區域,才沒出現在手上的觀測資料上。
倖存者偏差(Survivorship bias)指的是在分析資料時,只考慮現有、可觀測到的資料,也就是只分析「倖存者」,而忽略了那些沒有被觀測到的資料。這是其中一種 選擇偏誤,僅看到倖存者,造成我們分析的資料不足以代表整體,而造成分析者的推論錯誤。
以本文最一開始的舉例來說,我想知道我的所有朋友生活過得如何,但是 Instagram 上看到的只是樂於分享的一小部分朋友,用生活特別多采多姿的「倖存」朋友來推論整個人類社會「全都過得超令人羨慕」,當然與真相有巨大落差。
不只是日常生活,在商業分析以及資料科學,倖存者偏差當然也超常見。筆者好豪之前在 遊戲開發公司 工作時,一度有許多玩家同時抱怨某個手機遊戲產品經常造成當機並閃退,當時的軟體工程師提出,可以設計精細的 log 埋點,期望在遊戲關卡結束後,程式送回各個功能的執行細節與錯誤訊息,以詳細解析當機問題。
我們的資料團隊很快就發現這個方案行不通,它同樣犯了倖存者偏差,若是遊戲當機而閃退(APP 自動關閉),遊戲關卡根本不會正常結束,當然沒有辦法把當機細節傳回給伺服器。真的能回傳資料給我們的,只有沒遇到當機問題的「倖存者」玩家,而這些正常遊玩的資料對我們解析當機問題並沒有幫助。
死者也會造成偏誤:右設限資料
除了倖存者,我在《數據的假象》書中學到只分析「死者」也會造成偏誤的案例。
下方圖表是不同樂風的音樂表演者(包括歌手與演奏者)平均壽命,看了這張圖表,你心中想到什麼結論呢?
根據這項數據,一個非常不假思索的推論會是這樣的:「玩重金屬、饒舌、跟嘻哈音樂,會害你超短命!」。更甚者,可能還會因為重金屬或饒舌的歌詞比較「與眾不同」,順便給這些音樂貼反社會的負面標籤,加深大眾對這些音樂的刻板印象。例如,美國的華盛頓郵報是這麼描述這項數據的:
「嘻哈或饒舌的樂手,是比戰爭還危險的行業 — 打仗都不見得會讓平均壽命少一半」
Over half of dead hip-hop artists were murdered, study finds
華盛頓郵報 2015 年的報導
然而,這些都不是正確的推論!問題在於計算壽命長度時,只考慮到生命已經終結的死者,還沒有死亡的資料點並沒有算進去,造成只計算死者的分析偏誤。
(延伸閱讀:為什麼大家愛用資料來鬼扯?—《數據的假象》)
先前看到平均壽命較短的三種樂風:重金屬、嘻哈、饒舌,都是 1960 ~ 1970 年開始發展的,距離進行分析的 2015 年也才 40 年左右,如果這三種樂風的表演者都是 20 歲開始玩音樂,到分析的當下大約 50 ~ 60 歲,也就是說,這些樂手大部分都還活得好好的!計算「平均壽命」時,只有分析已經離世的表演者,能觀測到的當然只有英年早逝的一小部分人,造成看起來很短命的偏誤結論。前面華盛頓郵報提到「玩嘻哈是危險的行業」當然也是不公允的描述。
這項案例的偏誤來自 右設限資料(Right-censored data),執行分析的當下時點,我們有興趣觀測的事件在某些資料點還沒發生。舉例而言,計算壽命長度需要觀測出生與死亡兩個事件,但活著的人只有出生、沒有死亡事件,就好像時間軸右邊的延伸資訊被設限而看不到一樣(參考下圖)。
活著的人壽命不能用 死亡年份 - 出生年份
這個簡單公式計算,人們對這種右設限資料,常會有兩種錯誤分析法:
- 改成直接用
分析當下年份 - 出生年份
計算壽命- 那些資料點明明還活得好好的,會低估壽命長度
- 去除所有沒有死亡事件的資料
- 更加嚴重低估壽命長度
- 下圖把 “right-censored” 標籤的線去掉,平均長度當然會變短
- 前述的「短命樂風」案例就是源於此種錯誤資料分析法
右設限資料不只是出現在計算壽命的時候。若是健身房想知道客人平均會續約會員資格多少年,要是只分析已結案(已經解約)的客人,會忽略了現在還是會員的一大群客人。而現在的會員無從得知他們未來會續約到何年何月,同樣也是右設限資料。右設限資料的死者偏誤問題不算罕見,數據分析工作者需要時時放在心上。
(提醒:本文的「死者偏誤」只是筆者求方便解釋右設限概念而自創的名詞,統計專家會泛用的詞彙只有「右設限資料」而已)
不得不承認,比起倖存者偏差,筆者好豪認為右設限資料造成的分析偏差不容易直覺地發現,尤其它不是在視覺化呈現可以直接看出來的問題,還需要資料閱讀者有統計訓練背景、以及對數據脈絡的理解。相信看到這篇的你,下次看到沒有寫明的右設限資料,也能立即嗅出問題所在。
到這裡,我們已經介紹完分析倖存者與死者會造成的偏差,接下來我們聊聊在分析專案發現偏誤後究竟可以怎麼解決。
對抗偏誤:漏斗分析與存活分析
資料科學家發現正在分析的數據存在倖存者偏差後,該怎麼處理呢?確保資料的完整性是關鍵,思考你分析的個體或事件是否需要經過某些條件或階段才會被你觀測到,找出這些會過濾資料的條件、納入所有倖存與未倖存的資料。但這都是說得簡單、實作起來困難,所以實務上,筆者好豪經常以「漏斗分析」為主要的思考框架。
我的另一篇 資料科學職涯文章 曾介紹過,漏斗分析是探索一系列有順序的行為與事件的分析方法,客戶來到你的產品或服務,同樣也是有順序地經過不同的體驗歷程(Customer Journey),因此適合透過漏斗分析來辨識你正在分析的資料處於哪個階段、以及來自哪個階段,以確認數據從哪裡「倖存」。
延續我在前面小節提過的遊戲當機分析案例,資料團隊會這樣思考手機遊戲體驗歷程的漏斗:
- 開啟 APP
- 註冊帳號與設定完成
- 進入第 1 場遊戲
- 結束第 1 場遊戲
- 進入第 2 場遊戲
- …
想要偵測遊戲當機與閃退問題,就應該分析第 3 到 4 個階段(第 1 場遊戲開始與結束)之間的人數落差,來量化閃退問題有多大,並透過這兩個階段之間倖存與否來找出問題根源,例如,看到無法倖存到遊戲結束的手機裝置都是某幾個特定作業系統版本。
至於右設限資料,要解決它造成的偏誤,資料科學家會用 存活分析 (Survival Analysis)來對抗。當你手上的數據存在某些資料點出生與死亡事件都有,同時卻有另一群資料點只有出生、而沒有死亡事件,存活分析將幫助你把這兩種情況都考慮進去,並衡量與預估平均存活時間長度。
存活分析是一個很大的研究領域,礙於篇幅,筆者未來會再找機會詳細分享這項統計方法。如果你現在就急迫想學習,先推薦你閱讀:
- Python 的
lifespans
套件,存活分析法簡介 - 統計與機器學習課本《An Introduction to Statistical Learning》第二版,有完整的 Survival Analysis 章節
- Lorna Brightmore 的 PyData 講座,介紹右設限資料與存活分析應用案例
結語
當你的研究對象與手上資料可觀測到的對象不一致,資料只觀測到一小部分人、而不是你想研究的整體,這會是倖存者偏差;當你在分析與存續時間長度有關的問題,也要注意有哪些資料點還沒完成你正在研究的動作,可能會是右設限資料造成死者偏誤。
本文也簡單介紹了漏斗分析與存活分析,他們分別是對抗倖存者偏誤與右設限資料的分析工具。但事實上,筆者認為,先不談解決方案,光是能精準且即時地發現這兩項偏誤存在、給研究團隊警語,就已經是很厲害的資料科學家了。
這篇文章的許多案例都來自《數據的假象》這本書,書中分享了更多誤用數據與謬誤分析的範例,值得數據從業者閱讀、引以為鑒。筆者也曾寫過此書的 閱讀筆記,推薦你參考。
本文分享的內容是數據分析的基石,如果你正在入門資料科學,以下重要的基礎統計學知識也會對你有幫助:
最後,歡迎你追蹤好豪的 Facebook 粉絲專頁 與 Threads 帳號,我會持續努力分享統計學與資料科學知識!