1. 程式人生 > >[機器學習]模型評估:ROC,AUC,KS,GINI,Lift,Gain 總結

[機器學習]模型評估:ROC,AUC,KS,GINI,Lift,Gain 總結

中文,英文,簡稱

 

在模型建立之後,必須對模型的效果進行評估,因為資料探勘是一個探索的過程,評估-優化是一個永恆的過程。在分類模型評估中,最常用的兩種評估標準就是KS值和GINI, AUC值.

可能有人會問了,為什麼不直接看正確率呢?你可以這麼想,如果一批樣本中,正樣本佔到90%,負樣本只佔10%,那麼我即使模型什麼也不做,把樣本全部判定為正,也能有90%的正確率咯?所以,用AUC值夠保證你在樣本不均衡的情況下也能準確評估模型的好壞,而KS值不僅能告訴你準確與否,還能告訴你模型對好壞客戶是否有足夠的區分度。

 

這裡先整體給大家一個直觀的介紹。

概括:

Confusion Matrix -> Lift,Gain,ROC。

ROC -> AUC,KS -> GINI。

 

在介紹之前,我們先重新明確一下這些圖表的名稱,中文、英文、簡稱,全部來熟悉一下:

記住這個之後,我們來理解一下他們之間的關係。

擬人化概括

其實,這些圖之間的關係不是很複雜。我嘗試著用一個小故事概括一下人物之間的關係。

故事是這樣的:

首先,混淆矩陣是個元老,年齡最大也資歷最老。建立了兩個幫派,一個夫妻幫,一個階級幫。

之後,夫妻幫裡面是夫妻兩個,一個Lift曲線,一個Gain曲線,兩個人不分高低,共用一個橫軸。

再次,階級幫裡面就比較混亂。

           1. 幫主是ROC曲線。

           2. 副幫主是KS曲線,AUC面積

           3. AUC養了一個小弟,叫GINI係數

 

下圖是曲線與指標的綜合對比圖

 

一、ROC曲線和AUC值

在邏輯迴歸、隨機森林、GBDT、XGBoost這些模型中,模型訓練完成之後,每個樣本都會獲得對應的兩個概率值,一個是樣本為正樣本的概率,一個是樣本為負樣本的概率。把每個樣本為正樣本的概率取出來,進行排序,然後選定一個閾值,將大於這個閾值的樣本判定為正樣本,小於閾值的樣本判定為負樣本,然後可以得到兩個值,一個是真正率,一個是假正率。

真正率即判定為正樣本且實際為正樣本的樣本數/所有的正樣本數,假正率為判定為正樣本實際為負樣本的樣本數/所有的負樣本數。每選定一個閾值,就能得到一對真正率和假正率,由於判定為正樣本的概率值區間為[0,1],那麼閾值必然在這個區間內選擇,因此在此區間內不停地選擇不同的閾值,重複這個過程,就能得到一系列的真正率和假正率,以這兩個序列作為橫縱座標,即可得到ROC曲線了。而ROC曲線下方的面積,即為AUC值。

對於AUC值,也許有一個更直觀的理解,那就是,在按照正樣本概率值對所有樣本排序後,任意選取一對正負樣本,正樣本排在負樣本之前的概率值,即為AUC值。也就是說,當所有的正樣本在排序後都能排在負樣本之前時,就證明所有的樣本都被正確分類了,此時的AUC值也會為1。那麼AUC值也就很好算了,如果有N個負樣本,其中正樣本有M個,那麼可取的所有帶正樣本的樣本對數對於排在第一位的正樣本來說,有M+N-1個,但其中包含M-1對(正,正)的樣本,而對於後面所有的正樣本而言,能夠取到的正樣本概率大於負樣本對數肯定小於其位置-1。


二、KS曲線

 

K-S曲線其實資料來源和本質和ROC曲線是一致的,只是ROC曲線是把真正率和假正率當作橫縱軸,而K-S曲線是把真正率和假正率都當作是縱軸,橫軸則由選定的閾值來充當。

KS(Kolmogorov-Smirnov):KS用於模型風險區分能力進行評估,
指標衡量的是好壞樣本累計分部之間的差值。
好壞樣本累計差異越大,KS指標越大,那麼模型的風險區分能力越強。

KS的計算步驟如下:
1. 計算每個評分割槽間的好壞賬戶數。
2. 計算每個評分割槽間的累計好賬戶數佔總好賬戶數比率(good%)和累計壞賬戶數佔總壞賬戶數比率(bad%)。
3. 計算每個評分割槽間累計壞賬戶佔比與累計好賬戶佔比差的絕對值(累計good%-累計bad%),然後對這些絕對值取最大值即得此評分卡的K-S值。

 

下面這一段解釋得更詳細的K-S和AUC的區別是參考的這篇部落格:

https://blog.csdn.net/sinat_30316741/article/details/80018932

    由於ks值能找出模型中差異最大的一個分段,因此適合用於cut_off,像評分卡這種就很適合用ks值來評估。但是ks值只能反映出哪個分段是區分最大的,而不能總體反映出所有分段的效果,因果AUC值更能勝任。
    ROC值一般在0.5-1.0之間。值越大表示模型判斷準確性越高,即越接近1越好。ROC=0.5表示模型的預測能力與隨機結果沒有差別。
    KS值表示了模型將+和-區分開來的能力。值越大,模型的預測準確性越好。一般,KS>0.2即可認為模型有比較好的預測準確性。

好了,引用結束。
K-S值一般是很難達到0.6的,在0.2~0.6之間都不錯。一般如果是如果負樣本對業務影響極大,那麼區分度肯定就很重要,此時K-S比AUC更合適用作模型評估,如果沒什麼特別的影響,那麼用AUC就很好了。

 

三 GINI係數

 

·GINI係數:也是用於模型風險區分能力進行評估。
GINI統計值衡量壞賬戶數在好賬戶數上的的累積分佈與隨機分佈曲線之間的面積,好賬戶與壞賬戶分佈之間的差異越大,GINI指標越高,表明模型的風險區分能力越強。

GINI係數的計算步驟如下:
1. 計算每個評分割槽間的好壞賬戶數。
2. 計算每個評分割槽間的累計好賬戶數佔總好賬戶數比率(累計good%)和累計壞賬戶數佔總壞賬戶數比率(累計bad%)。
3. 按照累計好賬戶佔比和累計壞賬戶佔比得出下圖所示曲線ADC。
4. 計算出圖中陰影部分面積,陰影面積佔直角三角形ABC面積的百分比,即為GINI係數。

 

四 Lift , Gain

前三個指標應用場景更多一些


Lift圖衡量的是,與不利用模型相比,模型的預測能力“變好”了多少,lift(提升指數)越大,模型的執行效果越好。
Gain圖是描述整體精準度的指標。
計算公式如下:
                                       
                                                       
                  
作圖步驟:
1. 根據學習器的預測結果(注意,是正例的概率值,非0/1變數)對樣本進行排序(從大到小)-----這就是截斷點依次選取的順序
2. 按順序選取截斷點,並計算Lift和Gain ---也可以只選取n個截斷點,分別在1/n,2/n,3/n等位置
例圖:

   
 

 

參考:

  1. https://blog.csdn.net/Orange_Spotty_Cat/article/details/82425113
  2. https://blog.csdn.net/shy19890510/article/details/79501582