KS(Kolmogorov-Smirnov)(转)

来源:https://blog.csdn.net/u013421629/article/details/78217498

KS(Kolmogorov-Smirnov):KS用于模型风险区分能力进行评估, 
指标衡量的是好坏样本累计分部之间的差值。 
好坏样本累计差异越大,KS指标越大,那么模型的风险区分能力越强。

KS的计算步骤如下: 
1. 计算每个评分区间的好坏账户数。 
2. 计算每个评分区间的累计好账户数(注意是累计,也就是包含前面的区间)占总好账户数比率(good%)和累计坏账户数占总坏账户数比率(bad%)。 
3. 计算每个评分区间累计坏账户占比与累计好账户占比差的绝对值(累计good%-累计bad%),然后对这些绝对值取最大值即得此评分卡的K-S值。

在具体编程实现上可以利用画roc曲线方式:

def eval_ks(preds, dtrain):
    labels = dtrain.get_label()
    fpr, tpr, thresholds = roc_curve(labels, preds)
    ks = 0
    for i in range(len(thresholds)):
        if tpr[i] - fpr[i] > ks:
            ks = tpr[i] - fpr[i]
    return 'KS', ks

只不过这里面的分组,相当于每个单独的元素作为一组而已,TPR就是累计好样本占比,FPR是累计坏样本占比。roc_curve的thresholds是根据preds进行排序每次取其中一个作为threshold,从大到小依次取值,然后算出相应的TPR,FPR,这里面的计算结果一般tpr都大于fpr。

 

posted @ 2018-04-09 17:12  光彩照人  阅读(1102)  评论(0编辑  收藏  举报