作者:黃存操/有勁基因
一個檢測究竟能做到多準確?該如何判斷結果可不可信?事實上,就算檢測的條件與對象都一模一樣,對於準確率仍然很難百分百掛保證,通常你會看到如下的敘述:
1. 此檢測技術的出錯率每萬次中少於一次
2. 此檢測技術的出錯率每千人中少於一次
3. 此檢測技術的出錯率每百人中少於一次
4. 此檢測技術每20次就可能出現一次錯誤
這些敘述看起來很雷同,深究其內容意義卻很不同,主要是因為各自對「準確度」的定義並不相同。目前關於檢測準確率(或出錯率)常見的指標有準確度、靈敏度、特異度…等等,多到令人昏頭轉向。想要弄清楚這些指標,就必須先從這些指標是「如何由實際數據轉換而來的」開始瞭解。本文將一步步示範如何從數據得出各種檢測指標,並會解釋各種指標的詳細意義。
步驟一、分類(陽性|陰性、異常 | 正常)
每個人根據其實際上有否罹患特定疾病,可區分為「無/有」兩種狀態:
● 正常:實際上沒生病(健康的人),簡稱此狀態為「無」
● 異常:實際上生病了(生病的人),簡稱此狀態為「有」
一般人在接受某疾病的罹患篩檢時,檢驗結果可區分為「陰/陽」兩種狀況:
● 陽性:檢測的結果是有生病,簡稱為「陽」
● 陰性:檢測的結果是沒生病,簡稱為「陰」
也就是說,每個人在做了特定疾病的檢驗後,其檢測結果會被分類到下列四種狀態的其中一種(括號內為代表符號)。而對所有檢測來說,想方設法要儘量避免的就是偽陽性與偽陰性的出現。
|
有(+) |
無(-) |
陽 |
檢測結果為陽性,且真的有生病(真陽性;TP) |
檢測結果為陽性,但其實沒有生病(偽陽性;FP) |
陰 |
檢測結果為陰性,但其實有生病(偽陰性;FN) |
檢測結果為陰性,且真的沒有生病(真陰性;TN) |
英文縮寫分別代表:TP(True Positive)/真陽性;FP(False Positive)/偽陽性;TN(True Negative)/真陰性;FN (False Negative)/偽陰性
有了上面這個表,我們就可以藉由「數人頭」的方式計算出這個疾病罹患檢測的統計結果;如下。表格內英文縮寫處要填入的是各欄位所對應的人數。
|
有 |
無 |
陽 |
TP |
FP |
陰 |
FN |
TN |
步驟二、列聯表 ✕ 混淆矩陣
上述由數人頭結果填寫出來的表格,傳統統計學上稱為列聯表(Contingency table)1;現在機器學習與AI當道,這個表格因此有個更酷炫的名字,叫做混淆矩陣(Confusion matrix)2。假設有個對十萬人進行的疾病罹患檢測,其人數統計結果做出來的列聯表如下:
|
有 |
無 |
陽 |
950人 |
50人 |
陰 |
5人 |
98,995人 |
將上述表格的數據,依據縱欄來加總、或是依據橫列來加總,可以得出以下結果:
|
有 |
無 |
列總和 |
陽 |
TP=950 |
FP=50 |
p=TP+FP=1,000 |
陰 |
FN=5 |
TN=98,995 |
n=FN+TN=99,000 |
欄總和 |
w=TP+FN=955 |
m=FP+TN=99,045 |
Tot=100,000 |
英文縮寫分別代表:p/檢驗出陽性的人數;n/檢驗出陰性的人數;w/實際上有患病的人數;m/實際上健康的人數;Tol/總人數
從這個表可得知此疾病篩檢的結果意義:
● 實際上有患病的人(w = 955)當中,有950位被正確檢測出來(真陽性;TP),另外的5位被誤判為陰性了,也就是偽陰性(FN)。
● 實際上健康的人(m = 99,045)當中,有98,995位被正確檢測為陰性(真陰性;TN),而有50位卻被誤判為陽性了,也就是偽陽性(FP)。
● 準確度:計算公式為(Accuracy)= (TP+TN)/Tot總人數 = 99.945%;換句話說此檢驗的誤判機率為0.055%。表示就這個檢測來說,每一萬次檢測,約莫會出現5~6個誤判案例。
步驟三、計算(靈敏度|特異性)
如果將列聯表各欄位中的數值,除以當成分母的欄總和,可以得到下面的比值:
|
有 |
無 |
檢出率 |
陽 |
950/w = |
50/m = |
1,000/Tot= |
陰 |
5/w = |
98,995/m= |
99,000/Tot= |
欄總和 |
w=TP+FN=955 |
m=FP+TN=99,045 |
Tot= 100,000 |
檢出率:從上述表格中右上角的數據格子可以知道,此檢驗檢出陽性結果(包括真陽性和偽陽性)的陽性檢出率剛好為1%。
檢測準確性,在此處的指標主要有「靈敏度/特異性」3兩種:
● 靈敏度(Sensitivity)= TP/w:真正有患病的人,被正確檢驗出陽性的機率是99.48%;換句話說,每兩百個有病的人中,大約就有一個可能會被誤判為沒病。
● 特異性(Specificity)= TN/m:沒患病的人,被正確檢驗判斷為陰性的機率是99.95%;換句話說,每兩千個健康的人,大概會有一個被誤判為有病。
步驟四、計算(PPV | NPV)
將列聯表各欄位中的數值,除以當成分母的列總和,可以得到下面的比值:
|
有 |
無 |
列總和 |
陽 |
950/p = |
50/p = |
p=TP+FP= 950+50=1,000 |
陰 |
5/n = |
98,995/n= |
n=FN+TN= 5+98,995=99,000 |
流行率 |
955/Tot = |
99,045/Tot = 99.045% |
Tot= 100,000 |
流行率:從上述表格中左下角的數據格子來看,有接近1%的受檢人其實真的罹患了這個疾病。
檢測準確性,在此處有下面「PPV/NPV」兩種指標可以參考:
● 陽性預測值PPV(Positive Predictive Value)= TP/p:在這個例子裡,確實有生病也被檢測出陽性的機率是95.0%。這裡PPV的值相對於其他幾項指標的值,低了許多。由於PPV所代表的意義是真陽性的檢出率,這個檢驗結果代表大約每20個判定為陽性的檢測結果中,大約有一個是誤判。這對於一般疾病來說或許還好,但若是檢測的目標為重大疾病(例如癌症),這樣的誤診就有可能無謂地增加病患心理負擔,或是引導錯誤的治療。
● 陰性預測值NPV(Negative Predictive Value)= TN/n:被檢測出陰性也的確沒患病的機率是99.995%。
步驟五、比較檢測的各項指標
根據前述各說明,這個列聯表的數據可得出最少五個指標,機率由高到低排序如下:
|
有 |
無 |
列總和 |
陽 |
950 |
50 |
1,000 |
陰 |
5 |
98,995 |
99,000 |
欄總和 |
955 |
99,045 |
100,000 |
● 陰性預測值NPV = 99.995%,每十萬個判定為陰性的檢測結果中,大約會有5個是誤判。
● 特異性(Specificity)= 99.95%,每一萬個健康的人中,大約有5個會被誤判為有病。
● 準確度(Accuracy)= 99.945%,每一萬次的檢測,大約有5次會出錯。
● 靈敏度(Sensitivity)= 99.48%,每一千個有病的人中,大約有5個會被誤判為沒病。
● 陽性預測值PPV = 95.0%,每20個判定為陽性的檢測結果中,大約會有1個是誤判。
之所以要有那麼多與準確率相關的指標,是因為不同疾病對於檢測結果所在意的重點不同。有些疾病檢測會希望儘量避免將沒病誤判成有病(也就是要降低偽陽性FP),有些疾病檢測則可能希望盡量避免將有病誤判為沒病(也就是要降低偽陰性FN)。一個檢測想要同時降低偽陽性和偽陰性兩者很困難,這時通常會藉由調整閥值(threshold),以便讓兩者都降低到可接受的範圍之內;這部分本文就不詳述。
現在回到文章的開頭那四句關於準確率的敘述,根據各自所在意的重點,更精準的說法如括號內所示:
1. 此檢測技術的出錯率每萬次中少於一次 ← 著重在陰性預測值NPV
(此檢測技術在每一萬次「判定為陰性」的檢測結果中,誤判的機率低於一次)
2. 此檢測技術的出錯率每千人中少於一次 ← 著重在特異性Specificity
(此檢測技術的出錯率:每一千個「其實沒生病」的健康人,被誤判為「有病 (偽陽性)」的機會低於一次)
3. 此檢測技術的出錯率每百人中少於一次 ← 著重在靈敏度Sensitivity
(此檢測技術的出錯率:每一百個「其實有生病的人」,被誤判為「沒病 (偽陰性)」的機會低於一次)
4. 此檢測技術每20次就可能出現一次錯誤 ← 著重在陽性預測值PPV
(此檢測技術每20次「判定為陽性」的檢測結果中,可能就有一次是誤判)
參考資料
1. Wikipedia. (2019 Sep). Contingency table. Retrieved from https://en.wikipedia.org/wiki/Contingency_table
2. Wikipedia. (2019 Jul). Confusion matrix. Retrieved from https://en.wikipedia.org/wiki/Confusion_matrix
3. Wikipedia. (2019 Sep). Sensitivity and specificity. Retrieved from https://en.wikipedia.org/wiki/Sensitivity_and_specificity