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和perl实现批量对目录下电子书文件重命名的代码分享
Nov 21 Python
python定时器(Timer)用法简单实例
Jun 04 Python
构建Python包的五个简单准则简介
Jun 15 Python
Python使用bs4获取58同城城市分类的方法
Jul 08 Python
修改默认的pip版本为对应python2.7的方法
Nov 06 Python
将tf.batch_matmul替换成tf.matmul的实现
Jun 18 Python
Tensorflow与Keras自适应使用显存方式
Jun 22 Python
python线性插值解析
Jul 05 Python
Python 如何调试程序崩溃错误
Aug 03 Python
python中lower函数实现方法及用法讲解
Dec 23 Python
简单介绍Python的第三方库yaml
Jun 18 Python
Django数据库(SQlite)基本入门使用教程
Jul 07 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封装类似thinkphp连贯操作数据库Db类与简单应用示例
2019/05/08 PHP
javascript Split方法,indexOf方法、lastIndexOf 方法和substring 方法
2009/03/21 Javascript
Mootools 1.2教程 Fx.Morph、Fx选项和Fx事件
2009/09/15 Javascript
js下关于onmouseout、事件冒泡的问题经验小结
2010/12/09 Javascript
js加强的经典分页实例
2013/03/15 Javascript
Js Jquery创建一个弹出层可加载一个页面
2014/05/08 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
JavaScript实现的字符串replaceAll函数代码分享
2015/04/02 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
javascript实现的猜数小游戏完整实例代码
2016/05/10 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
浅谈angularjs $http提交数据探索
2017/01/20 Javascript
WebStorm ES6 语法支持设置&babel使用及自动编译(详解)
2017/09/08 Javascript
原生js实现针对Dom节点的CRUD操作示例
2019/08/26 Javascript
npm全局环境变量配置详解
2020/12/15 Javascript
Python语言的12个基础知识点小结
2014/07/10 Python
Python基于pygame实现的font游戏字体(附源码)
2015/11/11 Python
Python实现简单网页图片抓取完整代码实例
2017/12/15 Python
django中静态文件配置static的方法
2018/05/20 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
2018/07/16 Python
Python线性拟合实现函数与用法示例
2018/12/13 Python
python实现名片管理器的示例代码
2019/12/17 Python
Django数据结果集序列化并展示实现过程
2020/04/22 Python
Python Serial串口基本操作(收发数据)
2020/11/06 Python
python使用dlib进行人脸检测和关键点的示例
2020/12/05 Python
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
制药工程专业职业生涯规划范文
2014/03/10 职场文书
3.12植树节活动总结2014
2014/03/13 职场文书
篝火晚会主持词
2014/03/25 职场文书
促销活动总结报告
2014/04/26 职场文书
合理化建议书
2015/02/04 职场文书
食品安全责任书范本
2015/05/09 职场文书
当幸福来敲门观后感
2015/06/01 职场文书
2016年12月份红领巾广播稿
2015/12/21 职场文书
趣味运动会口号
2015/12/24 职场文书
某某幼儿园的教育教学管理调研分析报告
2019/11/29 职场文书