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 相关文章推荐
netbeans7安装python插件的方法图解
Dec 24 Python
python抓取网页图片示例(python爬虫)
Apr 27 Python
python中异常报错处理方法汇总
Nov 20 Python
Python3 操作符重载方法示例
Nov 23 Python
Python数据持久化shelve模块用法分析
Jun 29 Python
Python爬取qq空间说说的实例代码
Aug 17 Python
Python从函数参数类型引出元组实例分析
May 28 Python
Python秒算24点实现及原理详解
Jul 29 Python
python每天定时运行某程序代码
Aug 16 Python
python实现拼接图片
Mar 23 Python
基于python实现判断字符串是否数字算法
Jul 10 Python
Python实现异步IO的示例
Nov 05 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 echo()和print()、require()和include()函数区别说明
2010/03/27 PHP
几个有用的php字符串过滤,转换函数代码
2012/05/01 PHP
浅析php中三个等号(===)和两个等号(==)的区别
2013/08/06 PHP
php封装的验证码工具类完整实例
2016/10/19 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
2018/05/29 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
js日期时间补零的小例子
2013/03/05 Javascript
基于OO的动画附加插件,可以实现弹跳、渐隐等动画效果 分享
2013/06/24 Javascript
基于jquery实现可定制的web在线富文本编辑器附源码下载
2015/11/17 Javascript
js创建jsonArray传输至后台及后台全面解析
2016/04/11 Javascript
简单了解JavaScript操作XPath的一些基本方法
2016/06/03 Javascript
jQuery实现的网格线绘制方法
2016/06/20 Javascript
JavaScript实现页面定时刷新(定时器,meta)
2016/10/12 Javascript
简单实现jquery焦点图
2016/12/12 Javascript
JS 在数组指定位置插入/删除数据的方法
2017/01/12 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
JavaScript实现抖音罗盘时钟
2019/10/11 Javascript
javascript实现获取中文汉字拼音首字母
2020/05/19 Javascript
vue.js watch经常失效的场景与解决方案
2021/01/07 Vue.js
Python中的getopt函数使用详解
2015/07/28 Python
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
使用Python设计一个代码统计工具
2018/04/04 Python
DataFrame中的object转换成float的方法
2018/04/10 Python
Python/ArcPy遍历指定目录中的MDB文件方法
2018/10/27 Python
python怎么提高计算速度
2020/06/11 Python
Python 处理日期时间的Arrow库使用
2020/08/18 Python
Python爬取股票信息,并可视化数据的示例
2020/09/26 Python
自我鉴定书面格式
2014/01/13 职场文书
物理力学求职信
2014/02/18 职场文书
金融管理专业毕业生求职信
2014/03/12 职场文书
同学会主持词
2014/03/18 职场文书
职员竞岗演讲稿
2014/05/14 职场文书
与美同行演讲稿
2014/09/13 职场文书
2014年机关后勤工作总结
2014/12/16 职场文书
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技