模型評估——ROC、KS


無論是利用模型對信用申請人進行違約識別,還是對授信申請人進行逾期識別……在各種各樣的統計建模中,永遠必不可少的一步是對模型的評價,這樣我們就可以根據模型評價指標的取值高低,來決定選取哪個模型。本篇主要講述一下ROC曲線和K-S曲線的區別和聯系。

以二分類問題為例,模型輸出會出現四種情況:

    

我們最關心的結果是正確預測的概率和誤判率,常見的指標有:

(1)True Positive Rate,簡稱為TPR,計算公式為TPR=TP/(TP+FN)——所有真實的“1”中,有多少被模型成功選出;

(2)False Positive Rate,簡稱為FPR,計算公式為FPR=FP/(FP+TN)——所有真實的“0”中,有多少被模型誤判為1了;

(3)Precision=TP/(TP+FP),或2TP/((TP+FN)+(TP+FP))。

其中最常用的是TPR和FPR。最理想的模型,當然是TPR盡量高而FPR盡量低啦,然而任何模型在提高正確預測概率的同時,也會難以避免地增加誤判率。聽起來有點抽象,好在有ROC曲線非常形象地表達了二者之間的關系。

對於一個二分類模型,輸出的最初結果是連續的;假設已經確定一個閥值,那么最初結果大於閥值時,則輸出最終結果為1,小於閥值則輸出為0。假如閥值取值為0.6,那么FPR和TPR就可以計算出此時的取值,標志為一個點,記為(FPR1,TPR1);如果閥值取值為0.5,同理就可以計算出另一個點,記為(FPR2,TPR2)。設定不同的閥值,就可以計算不同的點(FPR,TPR),

我們以FPR為橫坐標,TPR為縱坐標,把不同的點連成曲線,就得到了ROC曲線。理論上ROC就是這么畫出來的,那么問題來了,閥值如何確定?

以Logistic模型為例,模型輸出的結果其實是概率,然后我們通過設定閥值,把概率轉化為最終的輸出結果0和1。首先出現在我們腦中的直觀想法,就是把(0,1)區間進行等分,比如,等分為十個區間(其實分成多少份都可以,大家可以自由發揮),那么就可以分別以0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9為閾值,首先計算出根據閥值判定出的0和1有多少,以及判定為1真實為1和判斷為1真實為0的有多少;然后計算出不同的(FPR,TPR)值;最后把點之間進行連線,畫出的曲線即是ROC曲線。

下面,我們以某商業銀行某時間段內某支行客戶的逾期相關數據為例詳細說明:P代表此支行的某客戶的逾期率(暫且定義為在此時間段內某客戶的逾期可能性),Y代表是否為高逾期客戶,X是與逾期有關的相關指標,比如行業、企業規模、客戶的五級分類等等。

然而,當把這個直觀的想法對案例數據付諸實施的時候,我們發現計算出的概率值都落在[0.0092,0.578]區間范圍內。這種情況下,如果還用上面的“直觀想法”(即仍然假定P小於閾值時,判定為0),那么設定閾值為0.1到0.5時,能夠計算出不同的(FPR,TPR)值;而將閾值取到0.6到0.9時,模型的判定結果為所有的樣本就都是0了……so sad!計算出的(FPR,TPR)值都是(0,0),ROC曲線的點由11個變成了6個…….

看來實踐是檢驗真理的唯一標准!面對這個特殊案例,我們的直觀想法肯定需要改進。最終,我們的實現方法是:

1. 把(0,1)區間升級為(min(P),max(P));

2. 取值(min(P),max(P))/10,設定閥值為(min(P),max(P))*k/10,其中k=1,2,3,…,9;

3. 根據不同的閥值,計算出不同的(FPR,TPR)值。

這時候再畫出ROC曲線,就避免了上面的問題。

以上思路講完后,可能有的小伙伴要問了:這樣在寫代碼實現的過程中,每次都要和閥值進行做比較,計算量比較大,不如先對樣本計算出的P值從小到大排序(當然從大到小也可以),取前百分之幾(比如10%)處的值為閥值,那么排序之后前百分之幾(比如前10%)的判定為0,其他則判定為1。這樣計算量就少了很多啦!

於是,我們繼續改進閥值的設置,首先把Logistic模型輸出的概率從小到大排序,然后取10%的值(也就是概率值)作為閥值,同理把10%*k(k=1,2,3,…,9)處的值作為閥值,計算出不同的(FPR,TPR)值,就可以畫出ROC曲線啦。

可是,從小到大排序之后,每次取前百分之幾處的值為閥值呢?總共分成10份還是100還是1000份呢?有選擇困難症的小伙伴又糾結了,告訴你個辦法,別糾結,有多少個模型輸出的概率值就分成多少份,不再考慮百分之幾!比如Logistic模型輸出的概率有214個,那么我們把214個目標變量從小到大進行排序,然后分別以這214個的概率值為閥值,可以計算出214個不同的(FPR,TPR)值,也可以畫出ROC曲線。

ROC曲線畫好后,就要發揮用處!對於一個模型一組參數可以畫出一條ROC曲線,此時最優的閥值是什么呢?TPR和FPR是正相關的,也就是說,正確判定出1的數量增加時,必然要伴隨着代價:誤判為1的FP也增加。

從ROC曲線上也可以反映出這種變化,從ΔTPR>ΔFPR到ΔTPR<ΔFPR,最理想的閥值是ΔTPR=ΔFPR時。但是在實際應用中,我們很少能夠給出ROC曲線的函數表達式,這時的解決方法包括:

(1)給出ROC曲線的擬合函數表達式,然后計算出最優的閥值,這個目前通過軟件實現難度不大:如何給出最優擬合函數,計算數學上有很多方法;

(2)計算出ΔTPR≈ΔFPR的點即為最優的閥值;

(3)從業務上給出最優的閥值。

對於一個模型多個參數的情況,就可以畫出多條ROC曲線,此時哪組參數是最優的呢?我們可以結合AUC指標,哪組參數的AUC值越高,說明此組參數下的模型效果越好。另外,在SAS的評分模型輸出中,常用來判斷收入分配公平程度的gini系數也用來評價模型,此時gini=2*AUC-1.

對了,解釋一下AUC指標:ROC曲線下方的面積Area Under the ROC Curve,簡稱為AUC。這是評價模型的另一個方法,AUC值越大,說明模型的分辨效果越好。

常用的模型評價還有K-S曲線,它和ROC曲線的畫法異曲同工。以Logistic模型為例,首先把Logistic模型輸出的概率從大到小排序,然后取10%的值(也就是概率值)作為閥值,同理把10%*k(k=1,2,3,…,9)處的值作為閥值,計算出不同的FPR和TPR值,以10%*k(k=1,2,3,…,9)為橫坐標,分別以TPR和FPR的值為縱坐標,就可以畫出兩個曲線,這就是K-S曲線。

從K-S曲線就能衍生出KS值,KS=max(TPR-FPR),即是兩條曲線之間的最大間隔距離。當(TPR-FPR)最大時,也就是ΔTPR-ΔFPR=0,這和ROC曲線上找最優閥值的條件ΔTPR=ΔFPR是一樣的。從這點也可以看出,ROC曲線、K-S曲線、KS值的本質是相同的。

以某模型的評價為例,在K-S曲線的橫坐標0.4時取KS=0.53,可以認為最優的閥值是從小到大排序的40%處的值:

      

      

K-S曲線能直觀地找出模型中差異最大的一個分段,比如評分模型就比較適合用KS值進行評估;但同時,KS值只能反映出哪個分段是區分度最大的,不能反映出所有分段的效果。所以,在實際應用中,模型評價一般需要將ROC曲線、K-S曲線、KS值、AUC指標結合起來使用。

在目前常用的統計軟件中,基本都可以直接輸出ROC曲線、AUC值、K-S曲線等。不過有的小伙伴會問,我用的軟件沒有這些內嵌指標,怎么辦?還能怎么辦,自己寫幾行代碼畫唄,相信你們可以的。

轉自:http://www.sohu.com/a/132667664_278472


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM