Python绘制KS曲线的实现方法


Posted in Python onAugust 13, 2018

python实现KS曲线,相关使用方法请参考上篇博客-R语言实现KS曲线

代码如下:

####################### PlotKS ##########################
def PlotKS(preds, labels, n, asc):
  
  # preds is score: asc=1
  # preds is prob: asc=0
  
  pred = preds # 预测值
  bad = labels # 取1为bad, 0为good
  ksds = DataFrame({'bad': bad, 'pred': pred})
  ksds['good'] = 1 - ksds.bad
  
  if asc == 1:
    ksds1 = ksds.sort_values(by=['pred', 'bad'], ascending=[True, True])
  elif asc == 0:
    ksds1 = ksds.sort_values(by=['pred', 'bad'], ascending=[False, True])
  ksds1.index = range(len(ksds1.pred))
  ksds1['cumsum_good1'] = 1.0*ksds1.good.cumsum()/sum(ksds1.good)
  ksds1['cumsum_bad1'] = 1.0*ksds1.bad.cumsum()/sum(ksds1.bad)
  
  if asc == 1:
    ksds2 = ksds.sort_values(by=['pred', 'bad'], ascending=[True, False])
  elif asc == 0:
    ksds2 = ksds.sort_values(by=['pred', 'bad'], ascending=[False, False])
  ksds2.index = range(len(ksds2.pred))
  ksds2['cumsum_good2'] = 1.0*ksds2.good.cumsum()/sum(ksds2.good)
  ksds2['cumsum_bad2'] = 1.0*ksds2.bad.cumsum()/sum(ksds2.bad)
  
  # ksds1 ksds2 -> average
  ksds = ksds1[['cumsum_good1', 'cumsum_bad1']]
  ksds['cumsum_good2'] = ksds2['cumsum_good2']
  ksds['cumsum_bad2'] = ksds2['cumsum_bad2']
  ksds['cumsum_good'] = (ksds['cumsum_good1'] + ksds['cumsum_good2'])/2
  ksds['cumsum_bad'] = (ksds['cumsum_bad1'] + ksds['cumsum_bad2'])/2
  
  # ks
  ksds['ks'] = ksds['cumsum_bad'] - ksds['cumsum_good']
  ksds['tile0'] = range(1, len(ksds.ks) + 1)
  ksds['tile'] = 1.0*ksds['tile0']/len(ksds['tile0'])
  
  qe = list(np.arange(0, 1, 1.0/n))
  qe.append(1)
  qe = qe[1:]
  
  ks_index = Series(ksds.index)
  ks_index = ks_index.quantile(q = qe)
  ks_index = np.ceil(ks_index).astype(int)
  ks_index = list(ks_index)
  
  ksds = ksds.loc[ks_index]
  ksds = ksds[['tile', 'cumsum_good', 'cumsum_bad', 'ks']]
  ksds0 = np.array([[0, 0, 0, 0]])
  ksds = np.concatenate([ksds0, ksds], axis=0)
  ksds = DataFrame(ksds, columns=['tile', 'cumsum_good', 'cumsum_bad', 'ks'])
  
  ks_value = ksds.ks.max()
  ks_pop = ksds.tile[ksds.ks.idxmax()]
  print ('ks_value is ' + str(np.round(ks_value, 4)) + ' at pop = ' + str(np.round(ks_pop, 4)))
  
  # chart
  plt.plot(ksds.tile, ksds.cumsum_good, label='cum_good',
             color='blue', linestyle='-', linewidth=2)
             
  plt.plot(ksds.tile, ksds.cumsum_bad, label='cum_bad',
            color='red', linestyle='-', linewidth=2)
            
  plt.plot(ksds.tile, ksds.ks, label='ks',
          color='green', linestyle='-', linewidth=2)
            
  plt.axvline(ks_pop, color='gray', linestyle='--')
  plt.axhline(ks_value, color='green', linestyle='--')
  plt.axhline(ksds.loc[ksds.ks.idxmax(), 'cumsum_good'], color='blue', linestyle='--')
  plt.axhline(ksds.loc[ksds.ks.idxmax(),'cumsum_bad'], color='red', linestyle='--')
  plt.title('KS=%s ' %np.round(ks_value, 4) + 
        'at Pop=%s' %np.round(ks_pop, 4), fontsize=15)
  

  return ksds
####################### over ##########################

作图效果如下:

Python绘制KS曲线的实现方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python greenlet实现原理和使用示例
Sep 24 Python
Python 实现一个颜色色值转换的小工具
Dec 06 Python
Windows安装Python、pip、easy_install的方法
Mar 05 Python
flask的orm框架SQLAlchemy查询实现解析
Dec 12 Python
python使用turtle库绘制奥运五环
Feb 24 Python
使用python实现CGI环境搭建过程解析
Apr 28 Python
Python devel安装失败问题解决方案
Jun 09 Python
python 破解加密zip文件的密码
Apr 22 Python
Pytorch实现图像识别之数字识别(附详细注释)
May 11 Python
Python下opencv使用hough变换检测直线与圆
Jun 18 Python
详解Python中的进程和线程
Jun 23 Python
Python matplotlib绘制雷达图
Apr 13 Python
Python标准库shutil用法实例详解
Aug 13 #Python
详解windows python3.7安装numpy问题的解决方法
Aug 13 #Python
python之super的使用小结
Aug 13 #Python
Selenium控制浏览器常见操作示例
Aug 13 #Python
详解python3中的真值测试
Aug 13 #Python
利用Python将每日一句定时推送至微信的实现方法
Aug 13 #Python
Selenium鼠标与键盘事件常用操作方法示例
Aug 13 #Python
You might like
图书管理程序(三)
2006/10/09 PHP
PHP机器学习库php-ml的简单测试和使用方法
2017/07/14 PHP
PHP INT类型在内存中占字节详解
2019/07/20 PHP
PHP7新特性
2021/03/09 PHP
IE 缓存策略的BUG的解决方法
2007/07/21 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
2012/02/11 Javascript
extjs_02_grid显示本地数据、显示跨域数据
2014/06/23 Javascript
javascript实现微信分享
2014/12/23 Javascript
jQuery中cookie插件用法实例分析
2015/12/04 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
2016/09/29 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
2017/01/23 Javascript
基于jQuery的表单填充实例
2017/08/22 jQuery
利用three.js画一个3D立体的正方体示例代码
2017/11/19 Javascript
在小程序中使用腾讯视频插件播放教程视频的方法
2018/07/10 Javascript
Vue点击切换颜色的方法
2018/09/13 Javascript
JavaScript进制转换实现方法解析
2020/01/18 Javascript
解决小程序无法触发SESSION问题
2020/02/03 Javascript
JS如何把字符串转换成json
2020/02/21 Javascript
ElementUI Tree 树形控件的使用并给节点添加图标
2020/02/27 Javascript
一起来了解一下JavaScript的预编译(小结)
2021/03/01 Javascript
Python代理抓取并验证使用多线程实现
2013/05/03 Python
Python学习笔记之if语句的使用示例
2017/10/23 Python
对pandas里的loc并列条件索引的实例讲解
2018/11/15 Python
opencv中图像叠加/图像融合/按位操作的实现
2020/04/01 Python
Python matplotlib模块及柱状图用法解析
2020/08/10 Python
python 实现围棋游戏(纯tkinter gui)
2020/11/13 Python
俄罗斯皮肤健康中心:Pharmacosmetica.ru
2020/02/22 全球购物
监理资料员岗位职责
2014/01/03 职场文书
幼儿园教师考核制度
2014/02/01 职场文书
驾驶员培训方案
2014/05/01 职场文书
支部鉴定材料
2014/06/02 职场文书
2014年扶贫帮困工作总结
2014/12/09 职场文书
2014年财政工作总结
2014/12/10 职场文书
《去年的树》教学反思
2016/02/18 职场文书
python使用torch随机初始化参数
2022/03/22 Python
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers