风控模型中的KS-指标

KS-指标

  • ks定义

    ks是指通过衡量好坏样本累计分布之间的差值,来评估模型的风险区分能力。KS曲线又叫洛伦兹曲线。以TPR和FPR分别作为纵轴,以阈值作为横轴,画出两条曲线。KS曲线则是两条曲线的在每一个阈值下的差值
    真阳性率(TPR) : 判定为正例也是真正例的比率
    伪阳性率(FPR) :判定为正例却不是真正例的比率
    注:ks取的是TPR和FPR差值的最大值

  • KS(Kolmogorov-Smirnov)指标即max(TPR-FPR)

  • KS指标的含义

    KS值可以反映模型的最优区分效果,此时所取的阈值一般作为定义好坏用户的最优阈值。KS值越大,模型的预测准确性越好。KS值的取值范围是[0,1] ,一般,KS>0.2即可认为模型有比较好的预测准确性。
    KS<0.2:模型无鉴别能力;
    0.2-0.4之间,模型勉强接受;
    0.41-0.5之间,模型具有区别能力;
    0.51-0.6之间,模型有很好的区别能力;
    0.61-0.75之间,模型有非常好的区别能力;
    KS>0.75,模型异常,很有可能有问题。

  • ks 图像
    风控模型中的KS-指标

    ks图线显示的是不同的阈值(cut_off)对应的不同ks值,取两条曲线的差值的最大值为ks值。故,ks值是找出模型中差异最大的一个分段,如评分卡这种相对就比较适合ks值的评估。对于一般任务更加关注负样本,那么区分度肯定就是很重要的,使用KS比AUC更加适合用于模型的评估。

  • 代码的实现

  • 第一种方法:

    def compute_ks(data):
    sorted_list = data.sort_values([‘predict_proba’], ascending=[True])#按照样本为正样本的概率值升序排序 ,也即坏样本的概率从高到低排序
    total_good=sorted_list[‘label’].sum()
    total_bad = sorted_list.shape[0] - total_good
    max_ks = 0.0
    good_count = 0.0
    bad_count = 0.0
    for index, row in sorted_list.iterrows(): #按照标签和每行拆开
    if row[‘label’] == 0:
    bad_count +=1
    else:
    good_count +=1
    val = abs(bad_count/total_bad - good_count/total_good)
    max_ks = max(max_ks, val)
    return max_ks
    test_pd=pd.DataFrame()
    y_predict_proba=est.predict_proba(X_test)[:,1]#取被分为正样本的概率那一列
    Y_test_1=np.array(Y_test)
    test_pd[‘label’]=Y_test_1
    test_pd[‘predict_proba’]=y_predict_proba
    print (“测试集 KS:”,compute_ks(test_pd))

  • 第二种方法:

    y_predict_proba = est.predict_proba(X_test)[:,1]
    fpr,tpr,thresholds= sklearn.metrics.roc_curve(np.array(Y_test),y_predict_proba)
    print (‘KS:’,max(tpr-fpr))

上一篇:学习曲线


下一篇:超市用户的k-means聚类处理