AUC,area under ROC curve的縮寫,就是ROC曲線下的面積;ROC曲線是啥呢,就是類似于這樣的一張圖:

左邊是理想狀態(tài)下,右邊是基于有限樣例繪制,也就是實(shí)際情況下ROC曲線一般都是右邊那樣,從左下角一拱一拱地拱到了右上角;
可以看到橫坐標(biāo)叫假正例率,縱坐標(biāo)叫真正例率,啥意思呢,就是判定為真實(shí)際又恰好為真的數(shù)量 占實(shí)際就為真的比例就是真正例率(以下稱為TPR);判定為真實(shí)際卻為假的數(shù)量 占實(shí)際就為假的比例就是假正例率(以下稱為FPR)(以上是文字描述,公式看這里https://www.cnblogs.com/JesusAlone/p/9758471.html)
那么給定了一串樣本和對(duì)應(yīng)的打分,怎么得到的這個(gè)ROC曲線呢,這里就要提到閾值的概念了,先舉一個(gè)例子吧,比如有一串樣本和對(duì)應(yīng)的打分如下,class表示實(shí)際的類別,score表示模型的打分:

這里所有樣本按打分排成一串,要得到ROC曲線上的一點(diǎn),就要知道該點(diǎn)對(duì)應(yīng)的TPR和FPR,就要知道在這個(gè)點(diǎn)判定為真實(shí)際為真的數(shù)量、實(shí)際為真的樣本總數(shù),判定為真實(shí)際為假的數(shù)量、實(shí)際為假的樣本總數(shù);
實(shí)際為真的樣本總數(shù)其實(shí)是固定的,看一下上圖class = p的數(shù)量就是(以下用M表示,這里M=10),實(shí)際為假的看一下class = n的數(shù)量就是(以下用N表示,這里N=10);那么關(guān)鍵就是判定為真實(shí)際為真的數(shù)量和判定為真實(shí)際為假的數(shù)量了;
怎么去判定呢,關(guān)鍵在于閾值,一開始設(shè)定閾值為1,那么TPR和FPR就都為0(思考一下為什么,這里考一下什么叫“判定”),然后閾值到了0.9,TPR = 1/10、FPR = 0,在ROC圖上就從原點(diǎn)往上走了一步;
之后每遇到一個(gè)判定為真實(shí)際為真的樣本就往上走一步,每遇到一個(gè)判定為真實(shí)際為假的樣本就往右走一步,直到走到世界盡頭,劃掉,是走到(1,1),至此ROC曲線繪制完畢如下:

然后接著說(shuō)AUC怎么算,不能老是畫張圖出來(lái)然后一個(gè)一個(gè)矩形算吧,這些矩形背后難道沒(méi)有對(duì)應(yīng)的物理意義可以對(duì)著樣本就算出來(lái)的嗎,答案是有的;
比如上面的圖片,從0.2往右走一步表示閾值調(diào)整后后面緊接著一個(gè)判定為正的負(fù)樣本,那么這條橫線再往右的延長(zhǎng)線是不是就代表著這兩個(gè)正樣本(9和8)后面所有的負(fù)樣本,那么這條延長(zhǎng)線和x軸圍成的面積(這里要再乘以MN)表示的是不是就是這兩個(gè)正樣本所在位置后面的負(fù)樣本的數(shù)量;(這里從每個(gè)畫x的節(jié)點(diǎn)向右畫延長(zhǎng)線,兩條延長(zhǎng)線之間的面積就是該點(diǎn)后面負(fù)樣本的數(shù)量)
上面這段話可能有些不好理解,繼續(xù)拿例子來(lái)說(shuō),0.9后面有10個(gè)負(fù)樣本,那么這個(gè)點(diǎn)和x軸圍成矩形的面積(再*100)就是10,0.51后面有7個(gè)負(fù)樣本,那么這個(gè)點(diǎn)和0.52延長(zhǎng)線所圍成矩形的面積(再*100)就是7,以此類推;(嚴(yán)格證明好像要涉及一個(gè)啥Wilcoxon-Mann-Witney Test,在參考的第二篇里有提到,但這里可以直觀從auc的畫法上去理解)
那么這么只看樣本來(lái)算AUC的方法就呼之欲出了,AUC的面積就是每條延長(zhǎng)線之間的矩形面積之和,每個(gè)矩形面積又代表了這個(gè)正樣本后負(fù)樣本的個(gè)數(shù),所以整體的面積就是每個(gè)正樣本數(shù)后頭負(fù)樣本的個(gè)數(shù)之和,用公式表示就是:

這里M表示正樣本總數(shù),N表示負(fù)樣本總數(shù),其中,

這也揭示了AUC的物理意義,即任取一對(duì)正負(fù)樣本,正樣本的預(yù)測(cè)值大于負(fù)樣本的預(yù)測(cè)值的概率;那么有人還是嫌麻煩,難道還要一個(gè)一個(gè)去數(shù)嗎,當(dāng)然不是啦,公式就是要做到最簡(jiǎn)潔嘛,而且這里顯然跟每個(gè)正樣本所在的位置關(guān)系很大嘛;
繼續(xù)改良,先給出公式:

看上去很難但算起來(lái)很簡(jiǎn)單的樣子,就是把所有正樣本所在的位置(公式里的ranki)求和,然后把M和N一頓操作(回顧一下,M和N表示的是總的正樣本數(shù)和負(fù)樣本數(shù)),就ok了;注意哦這里的ranki所指的正樣本位置是從大開始的,比如上面例子里score = 0.9的樣本對(duì)應(yīng)的rank是20,score = 0.8的樣本對(duì)應(yīng)的rank是19,以此類推;
這個(gè)求和再相減的公式為什么能和上面那個(gè)I(P正樣本,P負(fù)樣本)的公式對(duì)應(yīng)呢,原來(lái)啊,這里做的就是把I(P正樣本,P負(fù)樣本)得到為rank - i,再求和;什么是rank - i 呢,繼續(xù)舉例子,當(dāng)rank = 20時(shí),包括自身和后面的正樣本數(shù)為10,減掉后就是對(duì)應(yīng)的負(fù)樣本數(shù)了;當(dāng)rank = 19時(shí),包括自身和后面的正樣本數(shù)為9,減掉后就是對(duì)應(yīng)的負(fù)樣本數(shù)了,以此類推再求和不就是總的正樣本后負(fù)樣本的個(gè)數(shù)嗎;
這里有一種特例我們一直沒(méi)有提到,那就是score相等的情況,在ROC曲線里這對(duì)應(yīng)了一根斜線(思考一下為什么,以及一段斜線表示的是幾個(gè)樣本),類似于下面這個(gè)樣子:

(答案:一個(gè)正樣本,兩個(gè)負(fù)樣本)
所以如果是直接計(jì)算曲線下面積就要用梯形公式而不是矩形公式來(lái)計(jì)算每一個(gè)豎向矩形的面積:

那如果用物理意義的公式來(lái)算,相同score樣本間的正序?qū)Φ膫€(gè)數(shù)應(yīng)該算作0.5,依然能夠得到每個(gè)正樣本的正序?qū)Φ膫€(gè)數(shù)再求和;
至于為什么是0.5,其實(shí)很簡(jiǎn)單,比如這個(gè)例子中的正反順序?yàn)椤痉?,正,[正,正,反],反,正,反,正,反,正】,[] 括起來(lái)的實(shí)例分?jǐn)?shù)相同,如果這幾個(gè)樣本按相同的rank只算這個(gè)rank后的負(fù)樣本數(shù)(即例子中[]后的負(fù)樣本數(shù)),其實(shí)得到的是(2,3)這個(gè)點(diǎn)和(1,1)的水平延長(zhǎng)線構(gòu)成的矩形面積,還少了前面三角形這一塊面積(負(fù)樣本數(shù)為底、正樣本數(shù)為高);
這一塊三角形的面積如果補(bǔ)全成矩形對(duì)應(yīng)的正反順序是正正反,正序?qū)Φ膫€(gè)數(shù)為1+1,現(xiàn)在直接連接了矩形的兩個(gè)對(duì)角,正序?qū)Φ膫€(gè)數(shù)便應(yīng)該算作0.5+0.5;可以得到總的正序?qū)€(gè)數(shù)是4+3.5+3.5+2+1=14;auc=14/30=7/15
那么對(duì)第二個(gè)帶rank的公式來(lái)說(shuō),相同scroe的rank要求和取均值;比如這個(gè)例子中score相同的三個(gè)樣本的rank就都是(9+8+7)/3=8,總的auc的計(jì)算是((10+8+8+5+3+1)-(6*7)/2) /6*5) = 7/15;至于為什么是取rank均值,而后面的相減項(xiàng)不變,對(duì)照上面的正序?qū)Φ膫€(gè)數(shù)計(jì)算方式可以認(rèn)為是3.5*2+5+4 = 16/2 = 8(上面式子里為什么是8);
(上面兩段沒(méi)有看懂也沒(méi)有關(guān)系,實(shí)際情況下score相同的情況非常小,而且套入計(jì)算公式時(shí)就把正序?qū)€(gè)數(shù)當(dāng)成0.5計(jì)算即可,用ranki那個(gè)公式就取三個(gè)rank的均值作為正樣本的ranki即可)
這里順道再說(shuō)一下西瓜書里提到的一個(gè)概念叫rank損失,公式如下:

理解了物理意義之后這個(gè)公式應(yīng)該不難理解了,Lrank = 1 - AUC,同樣還可以從圖里找到對(duì)應(yīng)的面積;
說(shuō)到這里AUC的計(jì)算方式就都說(shuō)完了~ 下面是拓展延伸部分,比較了ROC曲線和PRC曲線在用作metric時(shí)的優(yōu)劣;
最后引用的這篇文章后面的思考部分還提到了在類不平衡問(wèn)題下,比如正負(fù)例90:10,將所有樣本判定為正例,準(zhǔn)確率沒(méi)有意義但AUC可以處理(因?yàn)槿颗卸檎脑扐UC曲線也僅僅是連接了(0,0)和(1,1));
但更有意義的是它說(shuō)明了為什么工業(yè)界常用AUC來(lái)作為CTR預(yù)估的指標(biāo),比較了ROC曲線和PRC曲線(PRC曲線的畫法也是將樣本按score排成一串,每次取一個(gè)閾值路過(guò)一個(gè)樣本,算一個(gè)recall(橫坐標(biāo))和precision(縱坐標(biāo)),當(dāng)閾值和第一個(gè)預(yù)測(cè)值相等時(shí),recall(實(shí)際為真里預(yù)測(cè)為真的占比)~0,precision(預(yù)測(cè)為真里實(shí)際為真的占比)=1):

a/b是正負(fù)例均衡時(shí)的ROC和PRC,c/d是負(fù)例樣本擴(kuò)大10倍后的ROC和PRC,每個(gè)圖里兩個(gè)曲線是兩個(gè)分類器;可以看到在正負(fù)樣本大致分布均勻時(shí),ROC曲線更穩(wěn)定,沒(méi)有PRC曲線那么多的起伏(原因在于recall增加時(shí),precision大體呈下降趨勢(shì),但小范圍內(nèi)可能會(huì)不單調(diào));但正負(fù)比不均衡,負(fù)例遠(yuǎn)大于正例時(shí),PRC曲線就能更敏感地反映出分類器的真實(shí)性能;

作者舉了這樣一個(gè)例子:兩圖紅色的點(diǎn)表示相同的點(diǎn),即TPR也就是recall等于0.8的點(diǎn),假設(shè)共100個(gè)正例,簡(jiǎn)單的計(jì)算可知這兩幅圖表示出來(lái)了一個(gè)正例數(shù)為100,負(fù)例數(shù)為15200的樣本,但是“在點(diǎn)A處,分類器將1600 (1520+80)個(gè)樣本預(yù)測(cè)為positive,而其中實(shí)際上只有80個(gè)是真正的positive。 我們憑直覺(jué)來(lái)看,其實(shí)這個(gè)分類器并不好。但由于真正negative instances的數(shù)量遠(yuǎn)遠(yuǎn)大約positive,ROC的結(jié)果卻“看上去很美”,因?yàn)檫@時(shí)FPR因?yàn)樨?fù)例基數(shù)大的緣故依然很小。所以,在這種情況下,PRC更能體現(xiàn)本質(zhì)?!?/p>
原因作者也給出來(lái)了,在于“FPR 和 TPR (Recall) 只與真實(shí)的正例或負(fù)例中的一個(gè)相關(guān)(可以從他們的計(jì)算公式中看到),而其他指標(biāo)如Precision則同時(shí)與真實(shí)的正例與負(fù)例都有關(guān)”
當(dāng)然盡管如此,工業(yè)界還是采用ROC曲線來(lái)作為ctr的線下預(yù)估指標(biāo),這是為什么呢,作者也給出了自己的思考:首先,ROC和PRC都是排序強(qiáng)相關(guān)的指標(biāo),但相比較而言,一是因?yàn)锳UC還是能比較兩個(gè)算法之間的優(yōu)劣,只是絕對(duì)值可能會(huì)表現(xiàn)得過(guò)于樂(lè)觀;二是AUC魯棒性更強(qiáng),不管在何種情況下都能保持穩(wěn)定,不會(huì)出現(xiàn)PRC曲線偶爾可能抽風(fēng)的情況;三是AUC的計(jì)算方式更簡(jiǎn)單,基于以上三點(diǎn)采用的選擇。
參考:https://blog.csdn.net/qq_22238533/article/details/78666436?舉例計(jì)算了auc的兩種計(jì)算方式,沒(méi)有說(shuō)明原理
? ? ? ? ? ?https://blog.csdn.net/pzy20062141/article/details/48711355? 前半部分大體參考此篇
? ? ? ? ? ?https://blog.csdn.net/weixin_41362649/article/details/89081651?紅藍(lán)圖,舉例說(shuō)明了auc的第二種計(jì)算方式
? ??????????https://www.cnblogs.com/JesusAlone/p/9758471.html?簡(jiǎn)明扼要,旁征博引