在介绍Python绘制KS曲线的实现方法之前,我们先来解释一下什么是KS曲线。KS曲线,全称为Kolmogorov-Smirnov曲线,是一种在信用评分模型评估中常用的统计工具。KS曲线能够提供信用评分模型区分好坏客户的能力,即模型的辨别力。在KS曲线中,横轴通常代表累计坏客户的比例,纵轴代表累计好客户的比例,通过对比两个累积率的差值(即KS值)来判断模型的好坏。KS值越大,表示模型的区分能力越强。 现在,我们来看看如何利用Python绘制KS曲线。需要一个实现KS曲线的基础函数,代码如下: ```python def PlotKS(preds, labels, n, asc): # preds 是预测值,labels 是真实标签,1 表示坏客户,0 表示好客户 # n 是分位数的数量 # asc 表示是升序还是降序,1 为升序,0 为降序 # 将标签转为二进制:1为坏客户,0为好客户 bad = labels ksds = DataFrame({'bad': bad, 'pred': preds}) ksds['good'] = 1 - ksds.bad # 根据asc参数对数据进行排序 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) # 计算累积率并进行平均 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 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))) # 绘制KS曲线 plt.plot(ksds.tile, ksds.cumsum_good, label='cum_good', color='blue', linestyle='solid') plt.plot(ksds.tile, ksds.cumsum_bad, label='cum_bad', color='red', linestyle='solid') plt.xlabel('Population') plt.ylabel('Cumulative Good/Bad Rate') plt.title('KS Curve') plt.legend(loc='upper right') plt.show() ``` 在这个函数中,我们首先导入了必要的库,并定义了函数`PlotKS`,它接受四个参数:`preds`代表预测分数,`labels`代表实际好坏标签,`n`代表需要计算的分位数个数,`asc`代表排序方式。函数体内部首先创建了一个数据框`DataFrame`,将好客户和坏客户的标签分别转换为1和0,并进行排序。 接着,函数计算了坏客户和好客户的累积比率,并通过`plt.plot`函数绘制了KS曲线。在绘制过程中,分别绘制了好坏客户的累积曲线,并为它们设置了不同的颜色和线型,以便区分。通过设置`plt.xlabel`和`plt.ylabel`设置了坐标轴的名称,`plt.title`设置了图表的标题,并且通过`plt.legend`设置了图例的位置。 函数输出了KS值以及在人口百分比中达到最大值的位置,并调用`plt.show()`显示了最终的KS曲线图。 以上就是使用Python绘制KS曲线的完整过程,通常这个过程是在模型评估阶段进行的。在数据分析和模型评估过程中,KS曲线是一个非常重要的工具,因为它能够直观地显示出模型的区分能力,是检验模型效果的重要指标之一。通过观察KS曲线,可以确定模型对于不同风险等级客户群体的区分效果,进而对模型进行调优。
















- qq_483982222020-12-24没用,浪费积分

- 粉丝: 12
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 计算机二级考试大纲(1).doc
- 新编网络科技有限公司员工手册模板.doc
- 图书管理系统报告(3)(1).doc
- 第6章-AT89S51单片机的定时器计数器演示幻灯片.ppt
- 投稿软件开发实习心得体会(1).doc
- 中国专网通信行业发展前景预测-市场规模将保持增长态势(1).docx
- 企业信息化的第三方咨询(1).pptx
- 基于安卓的计算器的设计及其实现.docx
- 案例驱动法的软件工程课程影响因素论文(1).doc
- 激发学生的创新潜能中小学人工智能教育方案(1).pptx
- 互联网营销趋势分析(1).ppt
- 信息化技术对加强工程安全质量监督的重要性(1).docx
- 试论在初中计算机教学中情感态度价值观的渗透问题(1).docx
- 医院信息系统安全.ppt
- 会计实务:超简单的个人所得税excel计算公式(1).doc
- 计算机软件开发过程中存在的问题与对策探析(1).docx


