データマイニングモデリング評価指標-KS指標のpythonコード実現の2つの方法

1453 ワード

KS指標であるmax(TPR-FPR).
方法1
第1の方法は長いが,具体的なシナリオは,二分類問題,正サンプルマーク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
方法2
この方法は比較的簡潔で,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))

親測の2つの方法で計算した結果は同じです!
参照先:https://wenku.baidu.com/view/5f3e9c803c1ec5da51e2700e.html