
ROC curves 知多少 (一)
今天我們來聊聊模型預測能力常用的工具ーーROC curve,看完本文你可以更了解:
- 如何量測一個模型預測能力的好壞
- 耳熟能詳的 ROC curves 是怎麼來的
- ROC curves 背後隱含的其實是風險分布圖
- ROC curves 的形狀也有其含意
目錄
模型的預測能力
對於一個模型來說,最重要的目的之一就是協助我們「做判斷」,尤其是只有二種結果的情況(binary model),例如醫師診斷病人是否患有癌症,或者某個治療結果是否有成功。
那麼,我們要如何知道一個模型的好壞呢? (也就是究竟預測能力為何? 準不準確?) 因此,當建立好模型之後,我們便需要知道模型的「鑑別能力 (Discriminatory Performance)」。
好的鑑別能力,顧名思義就是要能盡可能判斷出正確的結果,而減少錯誤的判斷。如何做判斷就涉及判斷的閾值 (threshold)。
舉例來說,我們選擇把罹病機率 20% 當作判斷閾值的話,此時模型預測某個人罹病機率為 35%,我們就認為此人為陽性,反之預測機率低於 20% 則判斷為陰性。這個 20% (0.2) 即所謂的切點 (cut-point)。
有了模型所預測的結果,再加上之後實際觀察的結果,我們就可以知道模型測辦別能力的好壞了,兩者構成了 2 x 2 的分類表 (Classification Table) 或者是診斷表 (Diagnostic Table)。
假設我們有二百名病人,經由「某個診斷標準 (切點)」的檢查後結果如下:

其中,藍色底的為真實有病且正確判斷的病人,稱之為真陽性 (True Positive)。由於真實有病的有 100 人,經由簡單的計算可以得到真陽性率,也就是所謂的敏感度 (Sensitivity)。
Sensitivity:nTP/n1= 70/100= 0.7
同樣的,正確的判斷實際上是健康的人,則稱為真陰性率或特異度 (Specificity)。
Specificity:nTN/n0= 80/100= 0.8
有了敏感度和特異度,我們就可以說:
對於同一個研究族群在給定一個切點時,敏感度和特異度愈接近 1,模型就有愈好的鑑別能力。
例如:
cut-point=0.1 時,
Model 1: Sensitivity= 0.9, Specificity=0.8
Model 2: Sensitivity= 0.7, Specificity=0.6
→ Model 1 是較佳的模型 (具有較佳的鑑別能力)
然而,這樣做的缺點是,敏感度和特異度會隨著切點而變化,比較不同切點的顯得相當不方便。更好的方法是將這些切點都畫在圖上,如此一來就可以得到所謂的 ROC curve。

要注意的是,ROC curve 做圖時使用的 Y軸是敏感度(Sensitivity),X 軸則是 1- Specificity。
1- Specificity = 錯誤預測為陽性/真正的陰性
剛才我們說過,好的模型是敏感度和特異度愈接近 1 愈好。因此,在 ROC curve 裡我們想要以下這二點成立:
1- Specificity 愈接近 0 愈好
Sensitivity > 1- Specificity
基於這二點,在比較同一組資料的不同模型時,可以發現曲線下的面積愈大者,有愈好的鑑別能力,而這個面積就是所謂的 AUC (area under the curve)。

由此可知,ROC curve 及其底下的面積 AUC 可視為綜合評估模型的整體鑑別能力,方便用來找尋較佳的切點,以及比較多個模型的鑑別能力。
ROC curve 的舊酒裝新瓶
ROC curve 與風險分布圖
上述是一般教材常見的對於 ROC curve 的說明,實際上我們可以從不同的觀點來看看 ROC curve。
讓我們同樣考慮二群人,一是健康者,另一群則是病患。這二群人有各自的特性,因此在風險與頻率圖上有各自的分布。

由分布圖可知,健康者與病患雖然有自己的分布,但也有重疊的部分。此時我們按上述的方法,設定某個切點之後,可以得到:
真陽性 (True Positive, TP) 與真陰性 (True Negative, TN)
偽陽性 (False Positive, FP) 及偽陰性 (False Negative, FN)
而這四個值其實就是對應分類表上的四個值;而由風險分布圖上切點的變化,也對應上 ROC curve 的切點。

由此可知,ROC curve 的本質可以說是風險分布圖及切點選擇的結果。
此外,如果健康者與病患的風險分布愈接近 (重疊度愈高),AUC 就會愈小,此時不論切點如何切,都很難有好的鑑別能力。反之,兩者分布離得愈開就有愈好的鑑別能力。

ROC curve 形狀知多少
關於 ROC 我們通常關注的都是切點選擇及 AUC 的大小為何。而事實上 ROC curve 的形狀也透露了許多訊息。
當一個 ROC curve 的形狀較圓潤時,通常表示該模型由連續型的預測變項 (如血壓值血糖值) 或多個對於目標結果有相似效果的二元預測變項所組成 (例如疾病史的有無)。
相對的,如果某個二元變項相較於其他變項有較大的效果,或某個多組別的變項 (categorical variable) 對於目標結果的影響力遠大於其他組別時,此時 ROC curve 就會呈現不對稱的偏斜形狀。
有時這種偏斜形狀是來自風險分布圖的基本差異,如下圖:

此外,ROC curve 的線條本身除了常見的平滑曲線之外,還會有一格格呈階梯的形態。這通常是樣本太小使得發生率太低時,或者整個模型僅有類別型的預測因子,在預測因子 (如學歷及年齡層) 有限的情況下 (亦即切點少),曲線自然就會呈現階梯狀。

結語
ROC curve 和 AUC 是我們經用來評估一個或多個模型的鑑別能力的工具之一,本文我們試著從風險分布圖的觀點重新檢視 ROC curve,得到許多額外的資訊,例如 AUC 的大小代表了健康者與病患的風險分布的差異,分布的愈開 AUC 的值就愈大,也表示模型的辦別能力愈好;ROC curve 的形狀也透露其他有用的訊息。
也因此,在認定一個預測模型是有用的之時,除了作圖並計算 AUC 之外,還可以觀察一些額外訊息,幫助我們更了解所要判斷的目標,以便改善模型,做更精準的判斷。