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曲线的实现方法相关推荐

  1. python实现ks算法_Python绘制KS曲线的实现方法

    Python绘制KS曲线的实现方法 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  Python绘制KS曲线的实现方法.txt ] (友情提示:右键点上行txt文档 ...

  2. python画趋势图_python 绘制走势图

    1.工具 matplotlib numpy 2.matplotlib使用 import matplotlib.pyplot as plt #plt用于显示图片 import matplotlib.im ...

  3. python画数学函数_Python 绘制你想要的数学函数图形

    Python 非常热门,但除非工作需要没有刻意去了解更多,直到有个函数图要绘制,想起了它.结果发现,完全用不着明白什么是编程,就可以使用它完成很多数学函数图的绘制.通过以下两个步骤,就可以进行数学函数 ...

  4. python画聚类图_python绘制的聚类图Python的局部变量和全局变量使用解惑

    局部变量:在函数中定义的变量,作用域是当前函数,只对当前函数起作用. 全局变量:在代码开头定义的变量,作用域是整段代码,对整段代码起作用. 先看下面的实例, 最后给结论.name = 'PythonT ...

  5. python画数学函数_Python 绘制你想要的数学函数图形 !

    Python 非常热门,但除非工作需要没有刻意去了解更多,直到有个函数图需要绘制,想起了它.结果发现,完全用不着明白什么是编程,就可以使用它完成很多数学函数图的绘制.通过以下两个步骤,就可以进行数学函 ...

  6. python画漏斗图_python绘制漏斗图步骤详解

    pyecharts中的Funnel函数可以绘制漏斗图,自动根据数据大小生成由大到小自上而下排列的一个漏斗样的图形. 1.导入Funnel模块. from pyecharts import Funnel ...

  7. python画熊猫代码_Python 绘制散点图(Pandas + Matplotlib)

    简单绘制一个散点图. 数据使用小朋友的身高和体重,简单看看. 数据结构:下面看一下其中几条的部分内容,我们只需要其中身高(Height)和体重(Weight)列的数据: 共七万五千多条,下面看看通过p ...

  8. python画彩色城墙_Python绘制城堡-(有惊喜!!!)

    大城堡在这 importturtleimporttime turtle.setup(1000,1000,200,200)'''背景'''turtle.bgcolor('#191970')'''笔的大小 ...

  9. python画同心圆程序_Python Turtle:使用circle()方法绘制同心圆

    I am not at this point interested in an efficient way of producing concentric circles: I want to see ...

最新文章

  1. 使用rel=noopener
  2. 每日一皮:当代互联网企业真实写照!
  3. 12月第2周.NET总量TOP10:中土意涨幅均环比增大
  4. element ui 二级菜单_基于avue和element-ui集成解决方案avue-cli
  5. eclipse下java.lang.OutOfMemoryError: PermGen space解决方法
  6. 【C#/.NET】.NET6中全局异常处理
  7. ASP.NET 生成唯一不重复的订单号 支持多用户并发、持多数据库的实现参考(C#.NET通用权限管理系统组件源码组成部分)...
  8. arduino 嗡鸣器 音乐_arduino蜂鸣器怎么输出指定的音乐
  9. VMware中安装Linux系统详细步骤
  10. Atitit. 委托的本质 c#.net java php的比较
  11. java详细设计模式有代码
  12. 问个globle的问题,如何定时更新论坛的数据啊?
  13. 计算机之父图灵的 150 封信,多在讨论 AI
  14. 易到要在网约车市场突围并不容易
  15. 来看看 random_state 这个参数
  16. Bluetooth Baseband介绍
  17. 通过Field Of View值计算屏幕成像的宽高
  18. wsdl 生成客户端文件boolean型有问题
  19. ReentrantLock源码走读分析
  20. 利用鲍伊-迪克测试法测试饱和蒸汽以确保适当灭菌消毒

热门文章

  1. #最全面# Python 下将 opencv MAT ( numpy ndarray ) 彩色 或 灰度 图像转化为 QImage 对象
  2. APP搭建:输入文字,单击显示(Android studio)
  3. 每天学点clickhouse
  4. 老Java程序员谈谈swing要不要学
  5. 6-6 使用函数判断完全平方数 (10 分)(C语言版)
  6. 如何将PDF删除水印?PDF怎么删除水印
  7. 彻底删除已经下载安装好的Mysql
  8. python画空心圆图_OpenCV-Python系列之绘图功能
  9. 【css】解决z-index失效或者不起作用
  10. nginx启动时指定prefix(覆盖编译时的 --prefix)