理解ROC和AUC

ROC

ROC的定義

比方說(shuō)在一個(gè)10000個(gè)人的數(shù)據(jù)集中队伟,有100個(gè)人得了某種病癥蚂蕴,你的任務(wù)是來(lái)預(yù)測(cè)哪些人得了這種病癥。你預(yù)測(cè)出了200人得了癌癥诊县,其中: * TN,True Negative:沒有得癌癥并且你也預(yù)測(cè)對(duì)沒有得癌癥的有9760人 * TP措左,True Positive:得了癌癥而且你也預(yù)測(cè)出來(lái)的病人有60人 * FN依痊,F(xiàn)alse Negative:得了癌癥但是你沒有預(yù)測(cè)出來(lái)的病人有40人 * FP,F(xiàn)alse Positive:沒有的癌癥但是你預(yù)測(cè)得了癌癥的有140人

  • True Positive Rate(TPR): 60/(60+40)=0.6
  • False Positive Rate(FPR): 140/(9760+140)=0.0141
  • accuracy: (9760+60)/10000=0.982
  • precision: 60/(60+140)=0.3
  • recall: 60/100=0.6
預(yù)測(cè) \ 實(shí)際 Positive 陽(yáng) 100 Negative 陰 9900
Positive 陽(yáng) 200 True Positive怎披,真陽(yáng)性胸嘁,TP 60 False Positive瓶摆,假陽(yáng)性,F(xiàn)P 140
Negative 陰 9800 False Negative缴渊,假陰性赏壹,F(xiàn)N 40 True Negative,真陰性衔沼,TN 9760
  • 在所有實(shí)際為陰性的樣本中,被錯(cuò)誤地判斷為陽(yáng)性之比率昔瞧。 FPR = FP rate = FP / ( FP + TN )
  • 在所有實(shí)際為陽(yáng)性的樣本中指蚁,被正確地判斷為陽(yáng)性之比率。TPR = TP rate = TP / (TP + FN)
  • precision = TP / (TP + FP)
  • recall = TPR = TP / (TP + FN)
  • accuracy = ( TP + TN ) / ALL
  • F-measure = 2 / (1/precision + 1 /recall)

放在具體領(lǐng)域來(lái)理解上述兩個(gè)指標(biāo)自晰。如在醫(yī)學(xué)診斷中凝化,判斷有病的樣本。那么盡量把有病的揪出來(lái)是主要任務(wù)酬荞,也就是第一個(gè)指標(biāo)TPR搓劫,要越高越好。而把沒病的樣本誤診為有病的混巧,也就是第二個(gè)指標(biāo)FPR枪向,要越低越好。不難發(fā)現(xiàn)咧党,這兩個(gè)指標(biāo)之間是相互制約的秘蛔。如果某個(gè)醫(yī)生對(duì)于有病的癥狀比較敏感,稍微的小癥狀都判斷為有病傍衡,那么他的第一個(gè)指標(biāo)應(yīng)該會(huì)很高深员,但是第二個(gè)指標(biāo)也就相應(yīng)地變高。最極端的情況下蛙埂,他把所有的樣本都看做有病倦畅,那么第一個(gè)指標(biāo)達(dá)到1,第二個(gè)指標(biāo)也為1绣的。

在上述癌癥檢測(cè)中(正反例極度不平衡的情況下)叠赐,

  • accuracy意義不大,從結(jié)果中可看出被辑,因?yàn)檎容^少燎悍,所以檢測(cè)再不怎么準(zhǔn)確,其accuracy值都很高盼理。
  • recall則是相對(duì)于真實(shí)情況而言的谈山,你正確檢測(cè)了60例癌癥病人,總癌癥病人有100例宏怔,那么recall則為60%奏路。
  • precision則是相對(duì)于模型預(yù)測(cè)情況而言的畴椰,你預(yù)測(cè)了200例癌癥病人,其中預(yù)測(cè)準(zhǔn)確的有60例鸽粉,那么precision則為30%斜脂;
  • 所以我們是希望能看到模型的recall和precision都很高,但是一般兩者難以同時(shí)達(dá)到最優(yōu)值触机,需要做一個(gè)權(quán)衡

有時(shí)我們還會(huì)見到sensitivity和specificity兩個(gè)概念:

  • sensitivity = recall = True Positive Rate
  • specificity = 1- False Positive Rate

也就是說(shuō)想要sensitivity高一點(diǎn)相當(dāng)于要True Positive Rate高一點(diǎn)帚戳,要specificity高一點(diǎn)相當(dāng)于False Positive Rate低一點(diǎn)/。為了權(quán)衡recall和precision儡首,對(duì)于評(píng)判二分類器的優(yōu)劣片任,可以使用ROC(Receiver Operating Characteristic)曲線以及AUC(Area Under roc Curve)指標(biāo)。

ROC的圖形化與計(jì)算

ROC曲線的幾個(gè)概念:

  • 橫坐標(biāo)是FPR蔬胯,縱坐標(biāo)是TPR
  • 圖中每個(gè)點(diǎn)則是不同"截?cái)帱c(diǎn)/閾值"下計(jì)算的FPR和TPR对供,截?cái)帱c(diǎn)/閾值 相當(dāng)于模型對(duì)于樣本的概率輸出,也可以說(shuō)是打分score

以醫(yī)生診斷為例氛濒,我們可以看出:


image.png
  • 左上角的點(diǎn)(TPR=1产场,F(xiàn)PR=0),為完美分類舞竿,也就是這個(gè)醫(yī)生醫(yī)術(shù)高明京景,診斷全對(duì);
  • 點(diǎn)A(TPR>FPR)炬灭,醫(yī)生A的判斷大體是正確的醋粟;
  • 中線上的點(diǎn)代表醫(yī)生給的結(jié)果與隨機(jī)按照一定比例報(bào)告病人患病的結(jié)果是一樣的,從左下角到右上角分別代表隨機(jī)的比例是0%到100%重归,隨機(jī)比例是50%時(shí)才代表一半對(duì)一半錯(cuò)米愿,即圖像中正中間的那個(gè)點(diǎn)。當(dāng)圖中點(diǎn)B位于0.5的位置時(shí)(TPR=FPR)鼻吮,也就是醫(yī)生B全都是蒙的育苟,蒙對(duì)一半,蒙錯(cuò)一半椎木;
  • 下半平面的點(diǎn)C(TPR<FPR)违柏,這個(gè)醫(yī)生說(shuō)你有病,那么你很可能沒有病香椎,醫(yī)生C的話我們要反著聽漱竖,為真庸醫(yī)。

上圖中一個(gè)閾值畜伐,得到一個(gè)點(diǎn)♀扇牵現(xiàn)在我們需要一個(gè)獨(dú)立于閾值的評(píng)價(jià)指標(biāo)來(lái)衡量這個(gè)醫(yī)生的醫(yī)術(shù)如何,也就是遍歷所有的閾值,得到ROC曲線万矾。還是一開始的那幅圖悼吱,假設(shè)如下就是某個(gè)醫(yī)生的診斷統(tǒng)計(jì)圖,直線代表閾值良狈。我們遍歷所有的閾值后添,能夠在ROC平面上得到如下的ROC曲線。

image.png

以一個(gè)簡(jiǎn)單的模擬數(shù)據(jù)來(lái)計(jì)算下ROC曲線每個(gè)點(diǎn)的值

  • 先有一組真實(shí)分類薪丁,比如0,1,0,1,即正例為2個(gè)遇西,反例為2個(gè);然后一組模型預(yù)測(cè)的打分(概率)严嗜,比如:0.2,0.3,0.5,0.8
  • 依據(jù)上述打分依次計(jì)算每個(gè)樣本輸出概率下的FPR和TPR
  • 首先截?cái)帱c(diǎn)為0.2努溃,即設(shè)定閾值為0.2,當(dāng)概率大于等于0.2時(shí)阻问,則預(yù)測(cè)為正例,因此4個(gè)樣本均為正例沦疾,此時(shí) TP = 2, FN = 0, FP = 2,TN = 0; FPR= FP / ( FP + TN ) = 2 / (2+0) = 1称近,TPR=TP / (TP + FN) = 2 / (2+0) = 1
  • 接著截?cái)帱c(diǎn)為0.3,即設(shè)定閾值為0.23哮塞,因此當(dāng)概率大于等于0.3時(shí)預(yù)測(cè)為正例刨秆,因此樣本1預(yù)測(cè)為反例,樣本2-4為正例忆畅,這時(shí)的此時(shí) TP = 2, FN = 0, FP = 1,TN = 1; FPR= FP / ( FP + TN ) = 1 / (1+1) = 0.5衡未,TPR=TP / (TP + FN) = 2 / (2+0) = 1
  • 計(jì)算截?cái)帱c(diǎn)0.5,即設(shè)定閾值為0.5時(shí)家凯,F(xiàn)PR=0.5缓醋,TPR=0.5;
  • 計(jì)算截?cái)帱c(diǎn)0.8绊诲,即設(shè)定閾值為0.8時(shí)送粱,F(xiàn)PR=0,TPR=0.5掂之;

Python可以用sklearn抗俄,R可以用ROCR包或者pROC包,這里以ROCR包來(lái)檢驗(yàn)下上述計(jì)算結(jié)果:

library(ROCR)
y <- c(0,1,0,1)
p <- c(0.2,0.3,0.5,0.8)
pred <- prediction(p, y)
perf <- performance(pred, "tpr", "fpr")

> perf
An object of class "performance"
Slot "x.name":
[1] "False positive rate"
Slot "y.name":
[1] "True positive rate"
Slot "alpha.name":
[1] "Cutoff"
Slot "x.values":
[[1]]
[1] 0.0 0.0 0.5 0.5 1.0
Slot "y.values":
[[1]]
[1] 0.0 0.5 0.5 1.0 1.0
Slot "alpha.values":
[[1]]
[1] Inf 0.8 0.5 0.3 0.2

x.values對(duì)應(yīng)FPR世舰,y.values對(duì)應(yīng)TPR, alpha.values對(duì)應(yīng)預(yù)測(cè)打分cutoff动雹,結(jié)果跟上面完全一致,然后簡(jiǎn)單做個(gè)ROC圖跟压。

library(pROC)
modelroc <- roc(y,p)
plot(modelroc, print.auc=TRUE, auc.polygon=TRUE)
image.png

AUC

AUC的定義

AUC值就相當(dāng)于ROC曲線的所覆蓋的面積胰蝠,可以從ROC曲線看出AUC值越大,其分類效果越好。

  • AUC = 1姊氓,是完美分類器丐怯,采用這個(gè)預(yù)測(cè)模型時(shí),不管設(shè)定什么閾值都能得出完美預(yù)測(cè)翔横。絕大多數(shù)預(yù)測(cè)的場(chǎng)合读跷,不存在完美分類器。
  • 0.5 < AUC < 1禾唁,優(yōu)于隨機(jī)猜測(cè)效览。這個(gè)分類器(模型)妥善設(shè)定閾值的話,能有預(yù)測(cè)價(jià)值荡短。
  • AUC = 0.5丐枉,跟隨機(jī)猜測(cè)一樣(例:丟銅板),模型沒有預(yù)測(cè)價(jià)值掘托。
  • AUC < 0.5瘦锹,比隨機(jī)猜測(cè)還差;但只要總是反預(yù)測(cè)而行闪盔,就優(yōu)于隨機(jī)猜測(cè)弯院。

如何計(jì)算AUC

  • 方法一:從早期的計(jì)算ROC曲線下的面積
  • 方法二:通過(guò)計(jì)算正例score大于反例score的概率:
    仍是上面的例子,真實(shí)分類:0,1,0,1泪掀,即正例為2個(gè)听绳,記為M個(gè),反例為2個(gè)异赫,記為N個(gè)椅挣;模型預(yù)測(cè)的打分:0.2,0.3,0.5,0.8。
    正例有2個(gè)(0.3和0.8)塔拳,反例有2個(gè)(0.2和0.5)鼠证,那么總共有2*2=4對(duì)([0.3,0.2],[0.8,0.2],[0.3,0.5],[0.8,0.5])正反樣本對(duì)。
    通過(guò)其模型預(yù)測(cè)的score可看出正例的score大于反例的有3對(duì)([0.3,0.2],[0.8,0.2],[0.8,0.5])(此處理解應(yīng)為[0.3,0.2],0.3為正例蝙斜,0.2為反例名惩,0.3>0.2),因此AUC則為3/4=0.75
  • 方法三:當(dāng)樣本比較多時(shí)孕荠,上述算法的復(fù)雜度過(guò)高O(N*M)娩鹉,有人提出一個(gè)簡(jiǎn)單的算法:對(duì)score從到小排序,最大的score排序索引為n稚伍,最小的則為1弯予;然后將正例的索引求和,減去正例-正例這種組合的個(gè)數(shù)M*(M+1)/2个曙;最后除以M*N锈嫩。
    以上述為例:(0.2,0.3,0.5,0.8) →(1受楼,2,3呼寸,4)艳汽,正例的排序索引為2和4,M和N都為2对雪,因此AUC=(2+4-2*(2+1)/2)/(2*2)=0.75

參考鏈接

理解ROC和AUC
ROC曲線與AUC值

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末河狐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瑟捣,更是在濱河造成了極大的恐慌馋艺,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迈套,死亡現(xiàn)場(chǎng)離奇詭異捐祠,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)桑李,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門踱蛀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人贵白,你說(shuō)我怎么就攤上這事星岗。” “怎么了戒洼?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)允华。 經(jīng)常有香客問我圈浇,道長(zhǎng),這世上最難降的妖魔是什么靴寂? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任磷蜀,我火速辦了婚禮,結(jié)果婚禮上百炬,老公的妹妹穿的比我還像新娘褐隆。我一直安慰自己,他們只是感情好剖踊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布庶弃。 她就那樣靜靜地躺著,像睡著了一般德澈。 火紅的嫁衣襯著肌膚如雪歇攻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天梆造,我揣著相機(jī)與錄音缴守,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛屡穗,可吹牛的內(nèi)容都是我干的贴捡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼村砂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼烂斋!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起箍镜,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤源祈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后色迂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體香缺,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年歇僧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了图张。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诈悍,死狀恐怖祸轮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情侥钳,我是刑警寧澤适袜,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站舷夺,受9級(jí)特大地震影響苦酱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜给猾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一疫萤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧敢伸,春花似錦扯饶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至躯砰,卻和暖如春蹲诀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背弃揽。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工脯爪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留则北,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓痕慢,卻偏偏與公主長(zhǎng)得像尚揣,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掖举,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容