分类任务的评测指标,AUC,ROC

简述

分类是常见的有监督机器学习. 给定一个对象x, 划分到预定义好的一个类别y中. 当y有两种取值时, 就是二分类.
应用有 新闻分类, 商品分类, 垃圾邮件过滤等.
ctr 估也可以看作是二分类。

准备知识

二分类可以用P表示阳性,N表示阴性, 那么就有下列表格.

实际类别预测正确数预测错误数备注
PTPFNP=TP+FN
NTNFPN=TN+FP

符号说明

  • TP, True Positive
  • FP, False Positive
    假阳性, 错误地把阴性判断成了阳性.
  • TN, True Negative
  • FN, False Negative

总指标

  • 准确度
    A c c u r a c y = T P + T N P + N Accuracy=\frac {TP+TN}{P+N} Accuracy=P+NTP+TN

分类别指标

单独关心阳性类别的判断, 调整上述指标的分子与分母,有以下指标。

  • 精确率
    P r e c i s i o n ( P ) = T P T P + F P Precision(P)=\frac{TP}{TP+FP} Precision(P)=TP+FPTP
  • 召回率
    R e c a l l ( P ) = T P R = T P P Recall(P)=TPR=\frac{TP}{P} Recall(P)=TPR=PTP
  • TPR
    TPR, True Positive Rate.
    T P R = R e c a l l ( P ) = T P P TPR=Recall(P)=\frac{TP}{P} TPR=Recall(P)=PTP
  • FPR
    F P R = F P N FPR=\frac{FP}{N} FPR=NFP, 该指标越低效果越好.
  • F1 -Score
    F 1 ( y 1 ) = 2 × P r e c i s i o n ( P ) × R e c a l l ( P ) P r e c i s i o n ( P ) + R e c a l l ( P ) F1(y_1)=\frac{2\times Precision(P)\times Recall(P)}{Precision(P)+ Recall(P)} F1(y1)=Precision(P)+Recall(P)2×Precision(P)×Recall(P)

可以看到, 精确率和召回率有着一些相互对立, 此消彼长的关系.

ROC

ROC , Receiver Operating Characteristic.
有些分类器(如朴素贝叶斯) , 输出的是 <预测类别, 概率> 的形式, 取不同的阈值, 就可以在当前数据集上得到不同的指标. 以FPR 为横轴,TPR为纵轴,画出来的就是ROC曲线。

AUC

AUC, Area Under Curve. 就是ROC曲线与坐标轴所围成区域的面积. 值域通常为 [ 0.5 , 1.0 ] [0.5,1.0] [0.5,1.0],值越大效果越好.
如果AUC值为1 则代表完美的分类器, AUC 等于0.5 则表示与随机分类(俗称瞎蒙)效果一样,所以有个 y= x 的直线,这个线就是0.5的标准。 一般分类在0.7到0.9之间就具有一定的分类效果了,高于0.9那么你的分类就特牛了。

在样本分布不均衡的情况下, 只关注分类的总体正确率(Accuracy) 意义不大.
比如二分类, 真实的样本空间中A:B=99:1, 那么我即便不用机器学习, 每次都预测为A, 也能获得0.99的Accuracy.

GAUC

Group AUC, AUC的一个变种, 常用于{推荐,计算广告} 等个性化场景, 通常以user作为group的维度, 即 user weighted AUC.
AUC 是全局样本排序能力的一个体现, GAUC 侧重于单个user下样本间的排序能力, 以此作离线指标, 对线上AB效果的参考性更强.
G A U C = ∑ u ∈ U s a m p l e C n t ( u ) ∗ A U C u ∑ u ∈ U s a m p l e C n t ( u ) (2) GAUC=\frac{\sum_{u\in U}sampleCnt(u)*AUC_u} {\sum_{u\in U}sampleCnt(u)} \tag 2 GAUC=uUsampleCnt(u)uUsampleCnt(u)AUCu(2)
where A U C u AUC_u AUCu 表示该user下样本所组成数据集的AUC.

case

该例子来自参考[2].
举个很简单的例子,假如有两个用户,分别是甲和乙,一共有5个样本,其中+表示正样本,-表示负样本,我们把5个样本按照模型A预测的score从小到大排序,得到 甲-,甲+,乙-,甲+,乙+. 那么实际的auc应该是 (1+2+2)/(32)=0.833, 那假如有另一个模型B,把这5个样本根据score从小到大排序后,得到 甲-,甲+,甲+,乙-,乙+, 那么该模型预测的auc是(1+1+2)/(32)=0.667.

样本不均衡的讨论

在推荐任务中, 正负样本比可以达到1:19. 此时用rand()去预测, GAUC依旧是0.5.

多种实现方法

原始定义, 计算面积

划取不同的阈值,分别计算 FPR与TPR, 再计算AUC。

sklearn 实现

sklearn.metrics.ranking.roc_auc_score(y_true, y_score,...) 是sklearn中的方法,它划取不同的阈值,分别计算 FPR与TPR, 再计算AUC。

import numpy as np
from sklearn.metrics import roc_auc_score

y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])
print("AUC is ", roc_auc_score(y_true, y_scores))   # 0.75

tensorflow 实现

tf.metrics.auc(labels, predictions, ...), 与 sklearn 实现 一致.

等价方法,计算样本对

详见参考[1].
< P , N > <P,N> <P,N>这样的pair形式,在有M个正样本,N个负样本的数据集中, 可以组成 C M 1 C N 1 C_M^1C_N^1 CM1CN1个样本对.
A U C = ∑ i = 0 M ∗ N I ( p a i r i ) M ∗ N (1) AUC=\frac{\sum_{i=0}^{M*N}I(pair_i)}{M*N} \tag 1 AUC=MNi=0MNI(pairi)(1)
where I ( p a i r i ) ∈ { 0 , 1 } I(pair_i)\in\{0,1\} I(pairi){0,1}, 表示分类器有没有对这个pair正确分类, 若正确分类得分为1.

参考

  1. 他人blog,AUC的计算方法
  2. 他人blog,机器学习算法评价指标之group auc(gauc)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值