天天看點

ROC、K-S,教你巧妙使用模型評價名額

無論是利用模型對信用申請人進行違約識别,還是對授信申請人進行逾期識别……在各種各樣的統計模組化中,永遠必不可少的一步是對模型的評價,這樣我們就可以根據模型評價名額的取值高低,來決定選取哪個模型。

最近在某國内商業銀行的授信項目中,我們嘗試了決策樹、logistic等模型來探尋逾期客戶的特征。有一天一位專攻系統的小夥伴忽然問我,ROC曲線和K-S曲線的差別和聯系是什麼?我當時簡單解釋了一下,事後卻細思恐極,因為我僅僅解釋了知其然,而沒有解釋是以然。好吧,為了幫小夥伴真正了解這些概念,我就在此詳細分解一番。

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

- 預測1 預測0 合計
真實1 True Positive (TP) False Negative (FN) Actual Positive(TP+FN)
真實0 False Positive (FP) True Negative(TN) Actual Negative(FP+TN)
合計 Predicted Positive(TP+FP) Predicted Negative(FN+TN) TP+FP+FN+TN

我們最關心的結果是正确預測的機率和誤判率,常見的名額有:

(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

繼續閱讀