數據挖掘建模評價指標-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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容