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 相关文章推荐
使用wxPython获取系统剪贴板中的数据的教程
May 06 Python
探究Python中isalnum()方法的使用
May 18 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
Aug 08 Python
利用Python批量提取Win10锁屏壁纸实战教程
Mar 27 Python
Python使用pandas处理CSV文件的实例讲解
Jun 22 Python
Python3.5 Pandas模块之Series用法实例分析
Apr 23 Python
python递归法解决棋盘分割问题
Jul 17 Python
给Python学习者的文件读写指南(含基础与进阶)
Jan 29 Python
Python交互环境下打印和输入函数的实例内容
Feb 16 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
Mar 06 Python
Python ORM框架Peewee用法详解
Apr 29 Python
最简单的matplotlib安装教程(小白)
Jul 28 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初学者头疼问题总结
2006/07/08 PHP
在普通HTTP上安全地传输密码
2007/07/21 PHP
PHP生成唯一的促销/优惠/折扣码(附源码)
2012/12/28 PHP
常见的四种POST 提交数据方式(小总结)
2015/10/08 PHP
PHP单例模式简单用法示例
2017/06/23 PHP
PHP观察者模式原理与简单实现方法示例
2017/08/25 PHP
asp.net和php的区别点总结
2019/10/10 PHP
动态调用css文件——jquery的应用
2007/02/20 Javascript
来自chinaz的ajax获取评论代码
2008/05/03 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
2014/01/02 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
angular中使用路由和$location切换视图
2015/01/23 Javascript
举例讲解如何判断JavaScript中对象的类型
2016/04/22 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
2017/03/02 Javascript
VUE2实现事件驱动弹窗示例
2017/10/21 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
修改node.js默认的npm安装目录实例
2018/05/15 Javascript
python访问sqlserver示例
2014/02/10 Python
使用Python编写简单的端口扫描器的实例分享
2015/12/18 Python
Python 自动刷博客浏览量实例代码
2017/06/14 Python
Django如何配置mysql数据库
2018/05/04 Python
详谈Pandas中iloc和loc以及ix的区别
2018/06/08 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
2018/12/30 Python
Python爬取视频(其实是一篇福利)过程解析
2019/08/01 Python
Python 线程池用法简单示例
2019/10/02 Python
python 视频逐帧保存为图片的完整实例
2019/12/10 Python
python不到50行代码完成了多张excel合并的实现示例
2020/05/28 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
HTML 5 标签、属性、事件及浏览器兼容性速查表 附打包下载
2012/10/20 HTML / CSS
Rockport乐步美国官网:风靡美国的白宫鞋
2016/11/24 全球购物
党支部创先争优活动总结
2014/08/28 职场文书
校园广播稿范文
2015/08/19 职场文书
2015年教师个人业务工作总结
2015/10/23 职场文书
高中数学课堂教学反思
2016/02/18 职场文书
python plt.plot bar 如何设置绘图尺寸大小
2021/06/01 Python
JavaScript文档对象模型DOM
2021/11/20 Javascript