数据挖掘建模评价指标-KS指标的python代码实现的两种方法

KS指标即max(TPR-FPR)。

方法一

第一种方法很长,具体情境是:二分类问题,正样本标记为1,负样本标记为0。里面有用到pandas和numpy库,import语句就不贴了,代码如下:

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))

具体的逻辑是根据这篇文章中介绍的KS的计算方法:
https://wenku.baidu.com/view/5f3e9c803c1ec5da51e2700e.html

方法二

这个方法比较简洁,使用了sklearn的metrics里的函数roc_curve()求出FPR,TPR,然后直接计算max(TPR-FPR),是不是超方便哒~~~~

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))

亲测这两种方法计算出的结果是一样的!

参考:https://wenku.baidu.com/view/5f3e9c803c1ec5da51e2700e.html

你可能感兴趣的:(数据挖掘建模评价指标-KS指标的python代码实现的两种方法)