在介绍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币余额
我的收藏
我的下载
下载帮助


最新资源
- 主要是在学习李航的统计学习方法和周志华的机器学习西瓜书的笔记和相关的代码实现
- 单片机技术试题集.doc
- 基于卷积神经网络的图像分类技术.docx
- JavaEE物联网云计算系列培训教材-Oracle数据库设计01.ppt
- 《计算机应用基础Windows-xp》综合练习.doc
- 清大学习吧项目管理手册汇编.doc
- 基于单片机的数字秒表系统研究设计.doc
- 数字图像处理期末考试答案.docx
- 中职服装专业课堂教学信息化探究.docx
- 创客教育在《计算机应用基础》课程教学中的应用.docx
- 大数据时代高校资产管理信息化建设研究.docx
- BIM+智慧工地的项目管理模式探究.docx
- 论网络虚拟财产的刑法保护.docx
- 计算机网络安全防范策略.docx
- 【高中信息技术课件】算法及其实现.ppt
- 国内外大数据下政策评估研究综述.docx


