更多大数据分析、建模等内容请关注gongzhonghao《bigdatamodeling》

将代码封装在函数PlotKS_N里,Pred_Var是预测结果,可以是评分或概率形式;labels_Var是好坏标签,取值为1或0,1代表坏客户,0代表好客户;descending用于控制数据按违约概率降序排列,如果Pred_Var是评分,则descending=0,如果Pred_Var是概率形式,则descending=1;N表示在将数据按风险降序排列后,等分N份后计算KS值。

PlotKS_N函数返回的结果为一列表,列表中的元素依次为KS最大值、KS取最大值的人数百分位置、KS曲线对象、KS数据框。

代码如下:

 1 ####################   PlotKS_N ################################2 PlotKS_N<-function(Pred_Var, labels_Var, descending, N){3   # Pred_Var is prop: descending=14   # Pred_Var is score: descending=05   library(dplyr)6  7   df<- data.frame(Pred=Pred_Var, labels=labels_Var)8  9   if (descending==1){
10     df1<-arrange(df, desc(Pred), labels)
11   }else if (descending==0){
12     df1<-arrange(df, Pred, labels)
13   }
14
15   df1$good1<-ifelse(df1$labels==0,1,0)
16   df1$bad1<-ifelse(df1$labels==1,1,0)
17   df1$cum_good1<-cumsum(df1$good1)
18   df1$cum_bad1<-cumsum(df1$bad1)
19   df1$rate_good1<-df1$cum_good1/sum(df1$good1)
20   df1$rate_bad1<-df1$cum_bad1/sum(df1$bad1)
21
22   if (descending==1){
23     df2<-arrange(df, desc(Pred), desc(labels))
24   }else if (descending==0){
25     df2<-arrange(df, Pred, desc(labels))
26   }
27
28   df2$good2<-ifelse(df2$labels==0,1,0)
29   df2$bad2<-ifelse(df2$labels==1,1,0)
30   df2$cum_good2<-cumsum(df2$good2)
31   df2$cum_bad2<-cumsum(df2$bad2)
32   df2$rate_good2<-df2$cum_good2/sum(df2$good2)
33   df2$rate_bad2<-df2$cum_bad2/sum(df2$bad2)
34
35   rate_good<-(df1$rate_good1+df2$rate_good2)/2
36   rate_bad<-(df1$rate_bad1+df2$rate_bad2)/2
37   df_ks<-data.frame(rate_good,rate_bad)
38
39   df_ks$KS<-df_ks$rate_bad-df_ks$rate_good
40
41   L<- nrow(df_ks)
42   if (N>L) N<- L
43   df_ks$tile<- 1:L
44   qus<- quantile(1:L, probs = seq(0,1, 1/N))[-1]
45   qus<- ceiling(qus)
46   df_ks<- df_ks[df_ks$tile%in%qus,]
47   df_ks$tile<- df_ks$tile/L
48   df_0<-data.frame(rate_good=0,rate_bad=0,KS=0,tile=0)
49   df_ks<-rbind(df_0, df_ks)
50
51   M_KS<-max(df_ks$KS)
52   Pop<-df_ks$tile[which(df_ks$KS==M_KS)]
53   M_good<-df_ks$rate_good[which(df_ks$KS==M_KS)]
54   M_bad<-df_ks$rate_bad[which(df_ks$KS==M_KS)]
55
56   library(ggplot2)
57   PlotKS<-ggplot(df_ks)+
58     geom_line(aes(tile,rate_bad),colour="red2",size=1.2)+
59     geom_line(aes(tile,rate_good),colour="blue3",size=1.2)+
60     geom_line(aes(tile,KS),colour="forestgreen",size=1.2)+
61
62     geom_vline(xintercept=Pop,linetype=2,colour="gray",size=0.6)+
63     geom_hline(yintercept=M_KS,linetype=2,colour="forestgreen",size=0.6)+
64     geom_hline(yintercept=M_good,linetype=2,colour="blue3",size=0.6)+
65     geom_hline(yintercept=M_bad,linetype=2,colour="red2",size=0.6)+
66
67     annotate("text", x = 0.5, y = 1.05, label=paste("KS=", round(M_KS, 4), "at Pop=", round(Pop, 4)), size=4, alpha=0.8)+
68
69     scale_x_continuous(breaks=seq(0,1,.2))+
70     scale_y_continuous(breaks=seq(0,1,.2))+
71
72     xlab("of Total Population")+
73     ylab("of Total Bad/Good")+
74
75     ggtitle(label="KS - Chart")+
76
77     theme_bw()+
78
79     theme(
80       plot.title=element_text(colour="gray24",size=12,face="bold"),
81       plot.background = element_rect(fill = "gray90"),
82       axis.title=element_text(size=10),
83       axis.text=element_text(colour="gray35")
84     )
85
86   result<-list(M_KS=M_KS,Pop=Pop,PlotKS=PlotKS,df_ks=df_ks)
87   return(result)
88 }

作图如下:

转载于:https://my.oschina.net/u/3869506/blog/1819007

R语言计算KS值、绘制KS曲线相关推荐

  1. R语言使用pROC包绘制ROC曲线实战:roc函数计算AUC值、plot.roc函数绘制ROC曲线、添加置信区间、为回归模型中的每个因子绘制ROC曲线并在同一个图中显示出来

    R语言使用pROC包绘制ROC曲线实战:roc函数计算AUC值.plot.roc函数绘制ROC曲线.添加置信区间.为回归模型中的每个因子绘制ROC曲线并在同一个图中显示出来 目录

  2. R语言使用pROC包绘制ROC曲线、获取最优阈值(threshold)及最优阈值对应的置信区间

    R语言使用pROC包绘制ROC曲线并获取最佳阈值(threshold)及最佳阈值对应的置信区间 #ROC曲线 ROC(receiver operating characteristic curve)接 ...

  3. R语言使用pROC包绘制ROC曲线并使用smooth函数绘制平滑的ROC曲线(方法包括:binormal、density、fitdistr、logcondens、logcondens.smooth)

    R语言使用pROC包绘制ROC曲线并使用smooth函数绘制平滑的ROC曲线(方法包括:binormal.density.fitdistr.logcondens.logcondens.smooth) ...

  4. 偏AUC(partial AUC)或者部分AUC是什么?R语言使用pROC包绘制ROC曲线并定义偏AUC(partial AUC):分别聚焦特异度、敏感度角度

    偏AUC(partial AUC)或者部分AUC是什么?R语言使用pROC包绘制ROC曲线并定义偏AUC(partial AUC):分别聚焦特异度.敏感度角度 目录

  5. R语言计算AUC(ROC曲线)的注意事项

    之前的推文中介绍了ROC曲线的本质以及两面性: ROC阳性结果还是阴性结果? 并详细介绍了如何手动计算真阳性率/假阳性率,以及怎样计算多个,并把点连接成线,变成ROC曲线:ROC曲线纯手工绘制 这些现 ...

  6. R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、编写自定义函数在三线表中添加p值

    R语言使用table1包绘制(生成)三线表.使用单变量分列构建三线表.编写自定义函数在三线表中添加p值 目录

  7. 三线表是什么?R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、编写自定义三线表结构(将因子变量细粒度化重新构建三线图)、编写自定义函数在三线表中添加p值

    三线表是什么?R语言使用table1包绘制(生成)三线表.使用单变量分列构建三线表.编写自定义三线表结构(将因子变量细粒度化重新构建三线图).编写自定义函数在三线表中添加p值 目录

  8. R语言使用for循环绘制多个模型的DCA(Decision Curve Analysis)曲线并保存特定分辨率的DCA曲线的结果文件

    R语言使用for循环绘制多个模型的DCA(Decision Curve Analysis)曲线并保存特定分辨率的DCA曲线的结果文件 目录

  9. R语言计算回归模型每个样本(观察、observation、sample)的杠杆值(leverage)实战:如果一个样本的预测变量比其他样本的预测变量值更极端,那么被认为具有很高的杠杆作用

    R语言计算回归模型每个样本(观察.observation.sample)的杠杆值(leverage)实战:如果一个样本的预测变量比其他样本的预测变量值更极端,那么被认为具有很高的杠杆作用 目录

  10. R语言可视化包ggplot2绘制线性回归模型曲线实战( Linear Regression Line)

    R语言可视化包ggplot2绘制线性回归模型曲线实战( Linear Regression Line) 目录 R语言可视化包ggplot2绘制线性回归模型曲线实战( Linear Regression ...

最新文章

  1. 天数换算月份_Js 计算指定月份的天数
  2. 大话数据结构(十)java程序——队列
  3. 《图解HTTP》读书笔记--第2章简单的HTTP协议
  4. 信息系统项目管理师-项目风险管理考点笔记
  5. switch 根据键盘录入成绩 显示分数及判断等级(第三次)
  6. 【转】全排列算法非递归实现和递归实现
  7. 操作系统难点解析之进程和线程
  8. servlet3异步_Servlet 3的异步Servlet功能
  9. SpringBoot和SpringCloud面试题
  10. android vitamio 教程,使用vitamio开发步骤
  11. HDU各种考试题题解
  12. CocoaPods 简易教程 Alamofire请求数据 Swift
  13. 分布式系统的现代消息传递
  14. python制作网页挂机_Python实现自动挂机脚本(GUI 打包)
  15. [转载]美国夫妻生活如何在钱上更亲密
  16. 主机访问虚拟机Web服务器
  17. 华为AR路由器配置导出
  18. Python实现群发邮件
  19. 金蝶云星空与飞书系统对接方案(飞书审批)
  20. 仓储委外加工/周转加工

热门文章

  1. MSP430学习笔记-定时器A
  2. 你离真正的全栈开发人员只差学会 Electron
  3. Java如何实现定时任务?
  4. DeepXDE 科学机器学习库(薛定谔方程)
  5. 您的 MAD 得分是多少?| MAD Skills
  6. 华为RIM设备短路故障
  7. 基于spring boot 的学生科研项目共享平台毕业设计源码271611
  8. okhttp post请求
  9. 读刘未鹏老大《你应当如何学习C++(以及编程)》
  10. 模块 , 用户管理系统 , 购物车程序 , 分页显示.