python 画ks曲线_Python绘制KS曲线的实现方法
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绘制KS曲线的实现方法相关推荐
- python实现ks算法_Python绘制KS曲线的实现方法
Python绘制KS曲线的实现方法 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: Python绘制KS曲线的实现方法.txt ] (友情提示:右键点上行txt文档 ...
- python画趋势图_python 绘制走势图
1.工具 matplotlib numpy 2.matplotlib使用 import matplotlib.pyplot as plt #plt用于显示图片 import matplotlib.im ...
- python画数学函数_Python 绘制你想要的数学函数图形
Python 非常热门,但除非工作需要没有刻意去了解更多,直到有个函数图要绘制,想起了它.结果发现,完全用不着明白什么是编程,就可以使用它完成很多数学函数图的绘制.通过以下两个步骤,就可以进行数学函数 ...
- python画聚类图_python绘制的聚类图Python的局部变量和全局变量使用解惑
局部变量:在函数中定义的变量,作用域是当前函数,只对当前函数起作用. 全局变量:在代码开头定义的变量,作用域是整段代码,对整段代码起作用. 先看下面的实例, 最后给结论.name = 'PythonT ...
- python画数学函数_Python 绘制你想要的数学函数图形 !
Python 非常热门,但除非工作需要没有刻意去了解更多,直到有个函数图需要绘制,想起了它.结果发现,完全用不着明白什么是编程,就可以使用它完成很多数学函数图的绘制.通过以下两个步骤,就可以进行数学函 ...
- python画漏斗图_python绘制漏斗图步骤详解
pyecharts中的Funnel函数可以绘制漏斗图,自动根据数据大小生成由大到小自上而下排列的一个漏斗样的图形. 1.导入Funnel模块. from pyecharts import Funnel ...
- python画熊猫代码_Python 绘制散点图(Pandas + Matplotlib)
简单绘制一个散点图. 数据使用小朋友的身高和体重,简单看看. 数据结构:下面看一下其中几条的部分内容,我们只需要其中身高(Height)和体重(Weight)列的数据: 共七万五千多条,下面看看通过p ...
- python画彩色城墙_Python绘制城堡-(有惊喜!!!)
大城堡在这 importturtleimporttime turtle.setup(1000,1000,200,200)'''背景'''turtle.bgcolor('#191970')'''笔的大小 ...
- python画同心圆程序_Python Turtle:使用circle()方法绘制同心圆
I am not at this point interested in an efficient way of producing concentric circles: I want to see ...
最新文章
- 使用rel=noopener
- 每日一皮:当代互联网企业真实写照!
- 12月第2周.NET总量TOP10:中土意涨幅均环比增大
- element ui 二级菜单_基于avue和element-ui集成解决方案avue-cli
- eclipse下java.lang.OutOfMemoryError: PermGen space解决方法
- 【C#/.NET】.NET6中全局异常处理
- ASP.NET 生成唯一不重复的订单号 支持多用户并发、持多数据库的实现参考(C#.NET通用权限管理系统组件源码组成部分)...
- arduino 嗡鸣器 音乐_arduino蜂鸣器怎么输出指定的音乐
- VMware中安装Linux系统详细步骤
- Atitit. 委托的本质 c#.net java php的比较
- java详细设计模式有代码
- 问个globle的问题,如何定时更新论坛的数据啊?
- 计算机之父图灵的 150 封信,多在讨论 AI
- 易到要在网约车市场突围并不容易
- 来看看 random_state 这个参数
- Bluetooth Baseband介绍
- 通过Field Of View值计算屏幕成像的宽高
- wsdl 生成客户端文件boolean型有问题
- ReentrantLock源码走读分析
- 利用鲍伊-迪克测试法测试饱和蒸汽以确保适当灭菌消毒
热门文章
- #最全面# Python 下将 opencv MAT ( numpy ndarray ) 彩色 或 灰度 图像转化为 QImage 对象
- APP搭建:输入文字,单击显示(Android studio)
- 每天学点clickhouse
- 老Java程序员谈谈swing要不要学
- 6-6 使用函数判断完全平方数 (10 分)(C语言版)
- 如何将PDF删除水印?PDF怎么删除水印
- 彻底删除已经下载安装好的Mysql
- python画空心圆图_OpenCV-Python系列之绘图功能
- 【css】解决z-index失效或者不起作用
- nginx启动时指定prefix(覆盖编译时的 --prefix)