模型常用评价指标-KS

KS

概述

KS值可以衡量模型区分能力的模型,指标部分衡量的是好坏样本累计百分比的最大差值。

具体计算方法介绍

  1. 首先计算出每个样本被标记为1的概率predict_score,然后按照从大到小进行排序,其次每个样本有其真实的标签。
  2. 计算每个predict_score作为阈值下的fpr-tpr;或者将其分箱比如均分为10份,分别计算每一份中的fpr、tpr。
  3. 最大的那个值就是本次模型训练的KS值。

    与其他曲线的区别

  4. KS和AUC一样,都是利用TPR、FPR两个指标来评价模型的整体训练效果。

  5. 不同之处在于,ks取的是TPR和FPR差值的最大值,能够找到一个最优的阈值;AUC只评价了模型的整体训练效果,并没有指出如何划分类别让预估的效果达到最好,就是没有找到好的切分阈值。

  6. 与PR曲线相比,AUC和KS受样本不均衡的影响较小,而PR受其影响较大。
    参考:https://www.cnblogs.com/gczr/p/10354646.html

指标值

  1. ks>0.3 模型效果较好
  2. 0.2<ks<0.3 模型可用
  3. ks<0.2 模型效果较差
  4. ks<0 模型错误

    具体实现

使用分箱的方式实现

​ 请参看本文链接,可以帮助我们理解KS的含义,但是需要注意的是:在划分箱之前的排序中,好像需要按照预测概率从大到小的顺序排序,文章中是按照从小到大排序的。

直接利用roc_curve的方式实现

  1. 计算KS。
  2. 绘制KS曲线。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    from 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