KS
概述
KS值可以衡量模型区分能力的模型,指标部分衡量的是好坏样本累计百分比的最大差值。
具体计算方法介绍
- 首先计算出每个样本被标记为1的概率predict_score,然后按照从大到小进行排序,其次每个样本有其真实的标签。
- 计算每个predict_score作为阈值下的fpr-tpr;或者将其分箱比如均分为10份,分别计算每一份中的fpr、tpr。
- 最大的那个值就是本次模型训练的KS值。
与其他曲线的区别
KS和AUC一样,都是利用TPR、FPR两个指标来评价模型的整体训练效果。
不同之处在于,ks取的是TPR和FPR差值的最大值,能够找到一个最优的阈值;AUC只评价了模型的整体训练效果,并没有指出如何划分类别让预估的效果达到最好,就是没有找到好的切分阈值。
- 与PR曲线相比,AUC和KS受样本不均衡的影响较小,而PR受其影响较大。
参考:https://www.cnblogs.com/gczr/p/10354646.html
指标值
使用分箱的方式实现
请参看本文链接,可以帮助我们理解KS的含义,但是需要注意的是:在划分箱之前的排序中,好像需要按照预测概率从大到小的顺序排序,文章中是按照从小到大排序的。
直接利用roc_curve的方式实现
- 计算KS。
- 绘制KS曲线。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15from sklearn.metrics import roc_curve
fpr, tpr, thresholds= roc_curve(df.label, df.score)
ks_value = max(abs(fpr-tpr))
# 画图,画出曲线
plt.plot(fpr, label='bad')
plt.plot(tpr, label='good')
plt.plot(abs(fpr-tpr), label='diff')
# 标记ks
x = np.argwhere(abs(fpr-tpr) == ks_value)[0, 0]
plt.plot((x, x), (0, ks_value), label='ks - {:.2f}'.format(ks_value), color='r', marker='o', markerfacecolor='r', markersize=5)
plt.scatter((x, x), (0, ks_value), color='r')
plt.legend()
plt.show()
参考:https://blog.csdn.net/sscc_learning/article/details/86707005