ROC和AUC介紹以及如何計算AUC

2021-01-18 生存分析

ROC(Receiver Operating Characteristic)曲線和AUC常被用來評價一個二值分類器(binary classifier)的優劣。這篇文章簡單介紹ROC和AUC的特點,以及更為深入地,討論如何作出ROC曲線圖以及計算AUC。

ROC曲線

需要提前說明的是,我們這裡只討論二值分類器。對於分類器,或者說分類算法,評價指標主要有precision,recall,F-score,以及我們今天要討論的ROC和AUC。下圖是一個ROC曲線的示例。



正如我們在這個ROC曲線的示例圖中看到的那樣,ROC曲線的橫坐標為false positive rate(FPR),縱坐標為true positive rate(TPR)。下圖中詳細說明了FPR和TPR是如何定義的。



接下來我們考慮ROC曲線圖中的四個點和一條線。第一個點,(0,1),即FPR=0, TPR=1,這意味著FN(false negative)=0,並且FP(false positive)=0。Wow,這是一個完美的分類器,它將所有的樣本都正確分類。第二個點,(1,0),即FPR=1,TPR=0,類似地分析可以發現這是一個最糟糕的分類器,因為它成功避開了所有的正確答案。第三個點,(0,0),即FPR=TPR=0,即FP(false positive)=TP(true positive)=0,可以發現該分類器預測所有的樣本都為負樣本(negative)。類似的,第四個點(1,1),分類器實際上預測所有的樣本都為正樣本。經過以上的分析,我們可以斷言,ROC曲線越接近左上角,該分類器的性能越好。

下面考慮ROC曲線圖中的虛線y=x上的點。這條對角線上的點其實表示的是一個採用隨機猜測策略的分類器的結果,例如(0.5,0.5),表示該分類器隨機對於一半的樣本猜測其為正樣本,另外一半的樣本為負樣本。

如何畫ROC曲線?

對於一個特定的分類器和測試數據集,顯然只能得到一個分類結果,即一組FPR和TPR結果,而要得到一個曲線,我們實際上需要一系列FPR和TPR的值,這又是如何得到的呢?我們先來看一下Wikipedia上對ROC曲線的定義:

In signal detection theory, a receiver operating characteristic (ROC), or simply ROC curve, is a graphical plot which illustrates the performance of a binary classifier system as its discrimination threshold is varied.

問題在於「as its discrimination threashold is varied」。如何理解這裡的「discrimination threashold」呢?我們忽略了分類器的一個重要功能「概率輸出」,即表示分類器認為某個樣本具有多大的概率屬於正樣本(或負樣本)。通過更深入地了解各個分類器的內部機理,我們總能想辦法得到一種概率輸出。通常來說,是將一個實數範圍通過某個變換映射到(0,1)區間。

假如我們已經得到了所有樣本的概率輸出(屬於正樣本的概率),現在的問題是如何改變「discrimination threashold」?我們根據每個測試樣本屬於正樣本的概率值從大到小排序。下圖是一個示例,圖中共有20個測試樣本,「Class」一欄表示每個測試樣本真正的標籤(p表示正樣本,n表示負樣本),「Score」表示每個測試樣本屬於正樣本的概率。

接下來,我們從高到低,依次將「Score」值作為閾值threshold,當測試樣本屬於正樣本的概率大於或等於這個threshold時,我們認為它為正樣本,否則為負樣本。舉例來說,對於圖中的第4個樣本,其「Score」值為0.6,那麼樣本1,2,3,4都被認為是正樣本,因為它們的「Score」值都大於等於0.6,而其他樣本則都認為是負樣本。每次選取一個不同的threshold,我們就可以得到一組FPR和TPR,即ROC曲線上的一點。這樣一來,我們一共得到了20組FPR和TPR的值,將它們畫在ROC曲線的結果如下圖:


當我們將threshold設置為1和0時,分別可以得到ROC曲線上的(0,0)和(1,1)兩個點。將這些(FPR,TPR)對連接起來,就得到了ROC曲線。當threshold取值越多,ROC曲線越平滑。

其實,我們並不一定要得到每個測試樣本是正樣本的概率值,只要得到這個分類器對該測試樣本的「評分值」即可(評分值並不一定在(0,1)區間)。評分越高,表示分類器越肯定地認為這個測試樣本是正樣本,而且同時使用各個評分值作為threshold。我認為將評分值轉化為概率更易於理解一些。

AUC值的計算

AUC(Area Under Curve)被定義為ROC曲線下的面積,顯然這個面積的數值不會大於1。又由於ROC曲線一般都處於y=x這條直線的上方,所以AUC的取值範圍在0.5和1之間。使用AUC值作為評價標準是因為很多時候ROC曲線並不能清晰的說明哪個分類器的效果更好,而作為一個數值,對應AUC更大的分類器效果更好。

AUC意味著什麼

那麼AUC值的含義是什麼呢?根據(Fawcett, 2006),AUC的值的含義是: > The AUC value is equivalent to the probability that a randomly chosen positive example is ranked higher than a randomly chosen negative example.

這句話有些繞,我嘗試解釋一下:首先AUC值是一個概率值,當你隨機挑選一個正樣本以及一個負樣本,當前的分類算法根據計算得到的Score值將這個正樣本排在負樣本前面的概率就是AUC值。當然,AUC值越大,當前的分類算法越有可能將正樣本排在負樣本前面,即能夠更好的分類。

為什麼使用ROC曲線

既然已經這麼多評價標準,為什麼還要使用ROC和AUC呢?因為ROC曲線有個很好的特性:當測試集中的正負樣本的分布變化的時候,ROC曲線能夠保持不變。在實際的數據集中經常會出現類不平衡(class imbalance)現象,即負樣本比正樣本多很多(或者相反),而且測試數據中的正負樣本的分布也可能隨著時間變化。下圖是ROC曲線和Precision-Recall曲線的對比:

在上圖中,(a)和(c)為ROC曲線,(b)和(d)為Precision-Recall曲線。(a)和(b)展示的是分類其在原始測試集(正負樣本分布平衡)的結果,(c)和(d)是將測試集中負樣本的數量增加到原來的10倍後,分類器的結果。可以明顯的看出,ROC曲線基本保持原貌,而Precision-Recall曲線則變化較大。


SPSS中ROC曲線操作過程

SPSS 可進行ROC分析,操作步驟如下:

1.定義列變量,並輸入數據

(1)診斷分類值或檢測結果(test):多個診斷試驗則定義test1,test2,...

(2)金標準類別(group):1=病例組,0=對照組

(3)分類頻數(freq),需要進一步執行第二步

2.說明頻數變量 路徑:Data\Weight Case..., 選項:Weight case by, 填表:Freqency Variable (freq)

3.ROC分析:路徑:Grahps\Roc Curve... 填表:Test Variable(test), State Variable (group), Value of state variable,選項包括:

(display) ROC Curve,with diagonal reference line (機會線), standard error and confidence interval (面積的標準誤,及其可信區間), Coordinate points of the ROC curve (ROC曲線的坐標點), options:test direction (如果檢測值小劃歸為陽性,則需要選), cofidence level (%):需要除95%以外的可信度,可在此定義。

如果是連續型測量資料,則不需要第1步的(3)及第2步。


R中繪製

ROCR包中主要是兩個class:prediction和performance。前者是將預測結果和真實標籤組合在一起,生成一個 prediction對象,然後在用performance函數,按照給定的評價方法,生成一個performance對象,最後直接對 performance用plot函數就能繪製出相應的ROC曲線。


# plot a ROC curve for a single prediction run

# and color the curve according to cutoff.

data(ROCR.simple)

pred <- prediction(ROCR.simple$predictions, ROCR.simple$labels)

perf <- performance(pred,"tpr","fpr")

plot(perf,colorize=TRUE)

上面是ROCR中的一個例子,ROCR.simple$predictions是預測結果,ROCR.simple$labels是真實的標籤,從而產生一個prediction對象;然後tpr是true positive rate的意思,fpr則是false positive rate的意思,這樣最後畫出來的就是最常見的ROC曲線。

本公眾號精彩歷史文章:

04:如何在R軟體中求一致性指數( Harrell'concordance index:C-index)?

05:Nomogram 繪製原理及R&SAS實現.

06 : Lasso方法簡要介紹及其在回歸分析中的應用

07 : 最優模型選擇中的交叉驗證(Cross validation)方法

08 : 用R語言進行分位數回歸(Quantile Regression)

09 : 樣本數據中異常值(Outliers)檢測方法及SPSS & R實現

10 : 原始數據中幾類缺失值(Missing Data)的SPSS及R處理方法

11 : [Survival analysis] Kaplan-Meier法之SPSS實現

12 : [Survival analysis] COX比例風險回歸模型在SPSS中的實現

13 : 用R繪製地圖:以疾病流行趨勢為例

14 : 數據挖掘方法:聚類分析簡要介紹 及SPSS&R實現

15 : 醫學研究中的Logistic回歸分析及R實現

回復文章前代碼數字如「04」即可查看或直接查看歷史文章。


公眾號:survival-analysis

郵箱:survival_analysis@126.com 歡迎關注轉發


相關焦點

  • AUC的一般計算和近似計算方式
    import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom sklearn.metrics import roc_curve, auc# Calculate 'True Positive Rate' and 'False Positive Rate
  • 機器學習備忘錄 | AUC值的含義與計算方法
    通常很多的機器學習工具都封裝了模型指標的計算,當然也包括 AUC 值。可以看出,使用 scikit-learn 工具提供的 roc_auc_score 函數計算 AUC 值相當簡單,只需要提供樣本的實際標籤和預測值這兩個變量即可,大大方便了我們的使用,真心感謝這些開源軟體的作者們!
  • 一文讀懂AUC-ROC
    英文原文:https://towardsdatascience.com/understanding-auc-roc-curve-68b2303cc9c5在機器學習中,性能測量是一項重要任務。當涉及到分類問題時,我們依靠AUC  -  ROC曲線來做性能評測。當我們需要檢查或可視化多類分類問題的性能時,我們使用AUC(曲線下面積)和ROC(接收器操作特性)曲線。
  • 機器學習中的AUC-ROC曲線
    雖然它只適用於二值分類問題,但我們將在最後看到如何擴展它來評估多類分類問題。我們還將討論敏感性(sensitivity )和特異性(specificity )等主題,因為這些是AUC-ROC曲線背後的關鍵主題。目錄什麼是敏感性和特異性?預測概率AUC-ROC曲線是什麼?AUC-ROC曲線是如何工作的?
  • AUC 的缺陷是什麼?
    我們不建議使用 AUC 出於五個原因:(1) 忽略了預測的概率值和模型的擬合優度;(舉個例子,假設某個模型對 「1」 類樣本輸出的概率都是 0.51,對 「0」 類樣本輸出的概率均為 0.49,此時 AUC 是 1,但是二元交叉熵非常大,因為預測結果和真實標籤之間的誤差太大);根據 auc 的公式我們可以知道 auc 對於具體的概率值不敏感,
  • AUC和線上點擊率指標不一致問題分析
    AUC和線上點擊率指標不一致問題分析 原標題:AUC和線上點擊率指標不一致問題分析蘑菇街搜索、推薦排序算法owner,大規模機器學習從業者
  • 為什麼是AUC值而不是GSEA來挑選轉錄因子呢
    但是我們留下來了一個懸念,如何從幾萬個注釋結果裡面挑選到最後100個富集成功的motif呢?首先批量計算AUC值如果是單細胞轉錄組數據裡面,每個單細胞都是有一個geneLists,那麼就是成千上萬個這樣的calcAUC分析,非常耗費計算資源和時間,就需要考慮並行處理,我們這裡暫時不需要,所以直接 nCores=1 即可。
  • 從結構到性能,一文概述XGBoost、Light GBM和CatBoost的同與不同
    雖然在計算速度上,和需要在預分類特徵值上遍歷所有可能的分割點的預分類算法相比,直方圖算法的效率更高,但和 GOSS 算法相比,其速度仍然更慢。為什麼 GOSS 方法如此高效?在 Adaboost 中,樣本權重是展示樣本重要性的很好的指標。
  • 機器學習:基於sklearn的AUC的計算原理
    二、ROC曲線roc曲線:接收者操作特徵(receiveroperating characteristic),roc曲線上每個點反映著對同一信號刺激的感受性。首先AUC值是一個概率值,當你隨機挑選一個正樣本以及負樣本,當前的分類算法根據計算得到的Score值將這個正樣本排在負樣本前面的概率就是AUC值,AUC值越大,當前分類算法越有可能將正樣本排在負樣本前面,從而能夠更好地分類。接下來,我們來具體一個實現的列子:sklearn給出了一個計算roc的例子:
  • 股票變動率roc應用 定義和計算公式介紹
    在股市中,在分析股票的時候,一般情況下都需要使用不同的指標進行股票分析,股票變動率指標(roc)就是其中一個技術分析指標。roc指標是變動速率指標,它具有超買超賣的特性,那麼股票變動率roc應用如何呢?
  • 簡單粗暴理解與實現機器學習之邏輯回歸:邏輯回歸介紹、應用場景...
    ROC曲線的意義說明AUC指標大小應用classification_report實現精確率、召回率計算應用roc_auc_score實現指標計算邏輯回歸介紹邏輯回歸(Logistic Regression)是機器學習中的一種分類模型,邏輯回歸是一種分類算法,雖然名字中帶有回歸,但是它與回歸之間有一定的聯繫。
  • 具有貝葉斯優化的XGBoost和隨機森林
    和隨機森林,並指出這些算法的優缺點。它建立目標函數的後驗分布,並使用高斯過程回歸計算該分布中的不確定性,然後使用獲取函數來決定採樣的位置。貝葉斯優化專注於解決問題:max f(x)(x∈A)超參數的尺寸(x∈Rd)經常在最成功的應用d <20。
  • roc指標選股公式 該指標的計算方法如何
    ROC指標一般指變動率指標,那麼這roc指標選股公式怎麼樣?還有roc指標的計算方法如何?我們一起來看看!roc指標選股公式 roc指標是以當日的收盤價和N天前的收盤價比較,通過計算股價某一段時間內收盤價變動的比例
  • roc變動率如何看 該指標的計算公式如何?
    炒股的人都知道,股市中的一些技術分析指標是要了解的,不同的指標有不同的含義,ROC也是技術分析最常見的參考指標之一了,那麼roc變動率如何看呢?還有該指標的計算公式如何?我們一起來看看!