二分类模型评价指标-KS值

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wendaomudong_l2d4/article/details/72872206

title: ‘二分类模型评价指标-KS值’
author: “”
date: “2018年7月13日”
output: word_document

knitr::opts_chunk$set(echo = TRUE,eval=FALSE)

1. KS值

1.1 概念

  KS值越大,表示模型能够将正、负客户区分开的程度越大。
  通常来讲,KS>0.2即表示模型有较好的预测准确性。

  柯尔莫哥洛夫-斯米尔诺夫检验(Колмогоров-Смирнов检验)基于累计分布函数,用以检验两个经验分布是否不同或一个经验分布与另一个理想分布是否不同。

  绘制方式与ROC曲线略有相同,都要计算TPR和FPR。但是TPR和FPR都要做纵轴,横轴为把样本分成多少份。
步骤:

  1. 按照分类模型返回的概率降序排列
  2. 把0-1之间等分N份,等分点为阈值,计算TPR、FPR
  3. 对TPR、FPR描点画图即可

KS值即为Max(TPR-FPR)

###1.2 代码

  提供R代码一份,仅供参考。

# 获取数据 --------------------------------------------------------------------
#以ROCR包里自带数据为例

# 获取数据 --------------------------------------------------------------------
#以ROCR包里自带数据为例
library(ROCR)
data(ROCR.simple)
result <- data.frame(pre_prob=ROCR.simple$predictions,true_label=ROCR.simple$labels)
#概率大于0.5为正类,小于0.5负类
result <- within(result,{
  pre_label <- NULL
  pre_label[pre_prob>0.5] <- 1
  pre_label[pre_prob<=0.5] <- 0
})
head(result)


#install.packages("gmodels")
library(gmodels)
CrossTable(x=result$true_label,y=result$pre_label,prop.chisq=FALSE)
#画PRC曲线:横轴TPR纵轴Precision.Threshold
TPR <- NULL
FPR <- NULL
for(i in seq(from=1,to=0,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,TP/(TP+FN))
  FPR <- c(FPR,FP/(FP+TN))
}
library(ggplot2)
ggplot(data=NULL,mapping = aes(x=seq(0,1,0.1),y=TPR))+
  geom_point()+
  geom_smooth(se=FALSE,formula = y ~ splines::ns(x,10), method ='lm')+
  geom_line(mapping = aes(x=seq(0,1,0.1),y=FPR),linetype=6)
max(TPR-FPR)#KS值为0.69

下面的图坐标轴标题有误,纵轴tpr/fpr,横轴为threshold阈值(感谢sinat_27339001指出)

knitr::include_graphics("../Picture/Pic09-KS.png",dpi = 600)

这里写图片描述
PS:并没有觉得这个KS值有什么用啊~

2. Lift值

  以一个例子计算:
  对于某二分类模型,针对1000名顾客打分。如果实际数据中有90名顾客产生购买行为。那么,Random Rate=9%。按照概率降序排序,取前10%。如果其中60个人产生购买行为,那么排名前10%的用户其实际购买率的Lift=(60/100)/9%=6.67

3. 捕获率及响应率

  1. 按照概率降序排序,0-1等分,等分点为阈值
  2. 响应率为各个等分区间内的属于正1的占该区间或者累计区间总体观察数量的百分比
  3. 捕获率为各个等分区间内的属于正1的占该区间或者累计区间总体观察属于正1数量的百分比

                      2017-06-05 于杭州
                      2018-07-13 于南京市建邺区新城科技园

展开阅读全文

没有更多推荐了,返回首页