二、正负样本不平衡处理方法总结( 六 )


在正负样本分布得极不均匀()的情况下,PRC比ROC能更有效地反应分类器的好坏 。
# 方法一:def cal_auc(list_one, list_two):'''计算AUC值'''positive = []negative = []for index in range(len(list_one)):if list_one[index] == 1:positive.append(index)else:negative.append(index)SUM = 0for i in positive:for j in negative:if list_two[i] > list_two[j]:SUM += 1elif list_two[i] == list_two[j]:SUM += 0.5else:passreturn SUM / (len(positive)*len(negative))# 方法二:from sklearn.metrics import roc_auc_scoreroc_auc_score(test_result,predict_result))# 计算坐标点和阈值,大于阈值为类别1,小于阈值为类别0fpr, tpr, thresholds = metrics.roc_curve(y_true, y_score) auc = metrics.auc(fpr,tpr) # 计算auc值
3、KS(洛伦兹曲线)评分
KS曲线其实数据来源和本质和ROC曲线是一致的,只是ROC曲线是把真正率和假正率当作横纵轴,而K-S曲线是把真正率和假正率都当作是纵轴,横轴则由选定的阈值来充当 。KS(-):KS用于模型风险区分能力进行评估,指标衡量的是好坏样本累计部分之间的差值 。好坏样本累计差异越大,KS指标越大,表示模型能够将正、负客户区分开的程度越大,那么模型的风险区分能力越强 。KS值的取值范围是[0,1]
通常来讲,KS>0.2即表示模型有较好的预测准确性 。
ks求解方法:
ks需要TPR和FPR两个值:真正类率(truerate ,TPR), 计算公式为TPR=TP/ (TP+FN),刻画的是分类器所识别出的 正实例占所有正实例的比例 。另外一个是假正类率(falserate,FPR),计算公式为FPR= FP / (FP + TN),计算的是分类器错认为正类的负实例占所有负实例的比例 。KS=max(TPR-FPR) 。其中:
TP:真实为1且预测为1的数目
FN:真实为1且预测为0的数目
FP:真实为0的且预测为1的数目
TN:真实为0的且预测为0的数目
计算步骤:
示例:
ID
逾期情况
预测值
U1
0.8
U2
0.2
U3
0.7
U4
0.3
U5
0.5
U6
0.5
U7
0.5
U8
0.7
U9
0.7
U10
0.2
排序(从小到大):
分布点
横坐标
逾期计数
非逾期计数
差异
(0.2,0)(0.2,0)
0.2
0/5
2/5
0.4
(0.3,0)
0.3
0/5
3/5
0.6
(0.5,1)(0.5,1)(0.5,0)
0.5
2/5
4/5
0.4
(0.7,1)(0.7,1)(0.7,0)
0.7
4/5
5/5
0.1
(0.8,1)
0.8
5/5
5/5
计数的分母为此类的总人数,最后得分为0.6.
from sklearn import metricsdef ks(y_predicted, y_true):label=y_true#label = y_true.get_label()fpr,tpr,thres = metrics.roc_curve(label,y_predicted,pos_label=1)return 'ks',abs(fpr - tpr).max()
由于KS值能找出模型中差异最大的一个分段,因此适合用于,像评分卡这种就很适合用ks值来评估 。但是ks值只能反映出哪个分段是区分最大的,而不能总体反映出所有分段的效果,因果AUC值更能胜任 。
4、模型稳定性指标PSI
群体稳定性指标PSI(Index)是衡量模型的预测值与实际值偏差大小的指标 。
PSI = sum((实际占比-预期占比)* ln(实际占比/预期占比))
一般认为PSI小于0.1时候模型稳定性很高,0.1-0.25一般,大于0.25模型稳定性差,建议重做 。