ROC、AUC
ROC 、AUC
ROC曲线是评价学习器泛化能力的指标,他纵轴是“真正例率”(TPR),横轴是“假正例率”(FPR),需要FPR越小,TPR越高,则模型越好
TPR = TP / (TP + FN) 可以理解为模型对正例的灵敏度
FPR = FP / (TN + FP) 可以理解为模型对负例的特异度
AUC,就是area under ROC curve,ROC曲线下包裹的面积。
一些AUC问题
有位同学提出AUC的相关问题,尝试理解一下:https://zhuanlan.zhihu.com/p/75131938
1、对数据随机均匀采样,对AUC有什么影响?
答:
没有影响。当正负样本分布发生变化时,ROC曲线形状能够基本保持不变。
2、改变训练集、测试集的比例,AUC有什么变化?
答:
几乎没有变化。
手头有一个xgboost模型,全部数据在800w左右,随机抽取10%当测试集,另外90%作为训练集和测试集,AUC为0.87200669;随机抽取50%当测试集,另外50%作为训练集和测试集,AUC为0.87107088。
3、AUC高,一定代表模型效果好吗?
答:
AUC是ROC曲线下面的面积,不同的ROC形状可以得到相同的AUC,就看ROC的“拐点”更靠近(0,0)还是(1,1)。拐点更靠近(1,1)则说明当分类的阈值往下减的时候,TP增长的比FP增长的更慢了,说明此时阈值再往小调已经就过了。但是一些场景可能需要更少的误报,允许少报,也要保证报出来的是正确的,这样来说拐点更靠近(0,0)就比(1,1)的要好。
4、相比RPC和F1,AUC的优势是什么
答:
不受正负样本比变化的影响
当正负样本分布发生变化时,ROC曲线形状能够基本保持不变,而P-R曲线则不能。ROC能尽量降低不同测试集带来的干扰。如果研究者希望更多地看到模型在特定数据集上的表现,P-R曲线能够更直观地反映其性能。
5、AUC适用于什么场景
答:
AUC值是一个概率值,当你随机挑选一个正样本以及负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值,AUC值越大,当前分类算法越有可能将正样本排在负样本前面,从而能够更好地分类。
所以AUC适合于排序场景。
6、负样本非常多的情况下,AUC会偏高还是偏低
答:???
qd_pred_frame = pd.DataFrame(preds, columns=['pred']) qd_origin_frame = pd.DataFrame(test_y, columns=['origin']) qd_result_frame = pd.merge(qd_pred_frame, qd_origin_frame, left_index=True, right_index=True) FPR_list, TPR_list = [], [] AUC = 0 for i in range(0,100,2): th = i/100 tp = len(qd_result_frame[(qd_result_frame['pred']>=th)&(qd_result_frame['origin']==1)]) fp = len(qd_result_frame[(qd_result_frame['pred']>=th)&(qd_result_frame['origin']==0)]) fn = len(qd_result_frame[(qd_result_frame['pred']<th)&(qd_result_frame['origin']==1)]) tn = len(qd_result_frame[(qd_result_frame['pred']<th)&(qd_result_frame['origin']==0)]) prc = tp/(tp+fp) rec = tp/(tp+fn) FPR = fp/(fp+tn) TPR = tp/(tp+fn) FPR_list.append(FPR) TPR_list.append(TPR) AUC = AUC + FPR*TPR x = np.array(FPR_list) y = np.array(TPR_list) plt.figure() plt.figure(figsize=(10,10)) plt.xlim(0,1) plt.ylim(0,1) plt.xlabel("FPR") plt.ylabel("TPR") plt.grid() plt.plot(x,y) plt.show()
AUC = 0
for i in range(49):
AUC += 0.5 * (FPR_list[i]-FPR_list[i+1]) * (TPR_list[i+1]+TPR_list[i])
print(f'AUC: {AUC}')
另有一种计算方法,贴上来