2019-01-18修改,新增ks值的R語言實現
風控模型中計算K-S值方法:
K-S值主要驗證風控模型對違約對象的區分能力,通常是在風控模型預測完全體樣本的風控評分後,將全體樣本按是否違約分爲兩部分,然後用K-S值檢驗兩組樣本的風控評分是否有顯著差異
將全體樣本按風控評分從低到高排序均分成十組,分別計算每組的實際好樣本數、實際壞樣本數、累計好樣本數、累計壞樣本數、累計好樣本數佔比(總好樣本數)、累計壞樣本數佔比(總壞樣本數)、abs(累計好樣本數佔比-累計壞樣本數佔比)
K-S值=max(abs(累計好樣本數佔比-累計壞樣本數佔比)),K-S值只能反映出哪個分段是區分最大的
全體樣本被分爲十等份,每份樣本風控評分的最大值可視爲閾值(小於閾值則預測爲好樣本),則累計好樣本數佔比爲真陽性率,累計壞客戶佔比爲假陽性率。K-S曲線的橫座標是等分值,縱座標分別是TPR+FRP累計值
K-S值>0.2即可認爲模型具有比較好的預測準確性,值越大表示模型的區分度越好
ks_value=function(result,pre_prob,true_label){
TPR <- NULL
FPR <- NULL
#預測概率從小到大排序
for(i in seq(from=0,to=1,by=0.1)){
#判爲正類實際也爲正類
TP <- sum((result$pre_prob <= i) * (result$true_label == 1))
#判爲正類實際爲負類
FP <- sum((result$pre_prob <= i) * (result$true_label == 0))
#判爲負類實際爲負類
TN <- sum((result$pre_prob > i) * (result$true_label == 0))
#判爲負類實際爲正類
FN <- sum((result$pre_prob > i) * (result$true_label == 1))
#真陽性率
TPR <- c(TPR,round(TP/(TP+FN),3))
#僞陽性率
FPR <- c(FPR,round(FP/(FP+TN),3))
}
max(TPR-FPR)
}