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多进程操作实例
Nov 21 Python
Python类的定义、继承及类对象使用方法简明教程
May 08 Python
python和shell获取文本内容的方法
Jun 05 Python
python实现AES加密和解密
Mar 27 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
Jun 20 Python
python xlwt如何设置单元格的自定义背景颜色
Sep 03 Python
Python namedtuple命名元组实现过程解析
Jan 08 Python
Python imutils 填充图片周边为黑色的实现
Jan 19 Python
pycharm无法导入本地模块的解决方式
Feb 12 Python
python烟花效果的代码实例
Feb 25 Python
如何完美的建立一个python项目
Oct 09 Python
pytorch 中nn.Dropout的使用说明
May 20 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
PHP编码规范的深入探讨
2013/06/06 PHP
php图片缩放实现方法
2014/02/20 PHP
PHP依赖注入原理与用法分析
2018/08/21 PHP
laravel使用Faker数据填充的实现方法
2019/04/12 PHP
显示、隐藏密码
2006/07/01 Javascript
HTML页面如何象ASP一样接受参数
2007/02/07 Javascript
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
JavaScript对象的property属性详解
2014/04/01 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
nodejs 如何手动实现服务器
2018/08/20 NodeJs
在微信小程序中渲染HTML内容的方法示例
2018/09/28 Javascript
微信小程序HTTP接口请求封装的实现
2019/02/21 Javascript
Jquery实现获取子元素的方法分析
2019/08/24 jQuery
js get和post请求实现代码解析
2020/02/06 Javascript
js this 绑定机制深入详解
2020/04/30 Javascript
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
python中使用pyhook实现键盘监控的例子
2014/07/18 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
python内置函数:lambda、map、filter简单介绍
2017/11/16 Python
Django框架多表查询实例分析
2018/07/04 Python
django一对多模型以及如何在前端实现详解
2019/07/24 Python
django的ORM操作 增加和查询
2019/07/26 Python
django中media媒体路径设置的步骤
2019/11/15 Python
用Python去除图像的黑色或白色背景实例
2019/12/12 Python
Python unittest单元测试openpyxl实现过程解析
2020/05/27 Python
Python 使用office365邮箱的示例
2020/10/29 Python
Python字节单位转换(将字节转换为K M G T)
2021/03/02 Python
美国男女折扣服饰百货连锁店:Stein Mart
2017/05/02 全球购物
仓库管理员岗位职责
2014/03/19 职场文书
小学校园文化建设汇报材料
2014/08/19 职场文书
入党培养人考察意见
2015/06/08 职场文书
赢在执行观后感
2015/06/16 职场文书
因个人工作失误检讨书
2019/06/21 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python
Spring Boot 实现敏感词及特殊字符过滤处理
2021/06/29 Java/Android