混淆矩阵
confusing matrix 也译作混淆矩阵,是一项古老经典的统计技术,见下图。

classification代表分类器判断的结果,positive(是、阳性、真等),negative(非、阴性、假等)。
condition代表事实情况,true(事实为真)、false(事实是假)。
把classification和condition进行2*2组合可以得到4种分类结果。
1、TP(true positive):分类器认为是真,实际也是真;
2、TN(true negative):分类器认为是假,实际也是假;
3、FP(false positive):分类器认为是真,实际是假;
4、FN(false negative):分类器认为是假,实际是真;
总结一下,第一个字母T或F,代表这个分类结果是否正确,第二个字母P或N,代表分类器认为是正例还是负例。这些指标就是condition+prediction的组合。
指标
上面的4组数据都是分类结果,也就是自然数,但无法反映分类器的性能。这个时候,我们就要引入百分比的统计量来刻画。
Precision 准确率=
Recall 召回率 =
F1 score =
样本不均衡的评价指标
现实中,正负样本经常是非常不均衡的。而准确率和召回率对样本分布非常敏感。比如,正样本很多,假设分类器什么都不做,把所有样本都认为是正样本,那么,F1 score肯定很高,但这个分类器没有任何意义。那么,什么指标能在这种情况下反映分类器的能力呢?现在有请auc。
roc曲线

roc是分类器在0-1下分类预测概率作为判断条件时,TPR(纵轴)和FPR(横轴)的表现连成的曲线。先说结论,如上图所示,roc曲线下面积越大,分类器越好。
FPR,假正例率=
上图中间的直线就代表了最差的情况,分类器对样本的判断正负55开,近似随机。
如果分类器输出的阈值很小的情况下(靠左原点),但此时TPR就很快上升,但FPR上升很慢,说明分类器判断的信心很强。roc包围曲线的面积可以解读为:从所有正例中随机选取一个样本A,在从负例中选取一个样本B,分类器把A判为正例的概率比将B判为正例的概率大的可能性。所以,roc_auc也反映了分类器对样本排序的一个能力。
roc的缺点
由于roc曲线对分布不敏感,所以对分类准确率敏感的场景下,roc_auc就不是很适用。
PR曲线
与roc不同,precision&recall都是关于正例的。所以,不平衡时如果主要关心正例,pr曲线更合适。

纵轴是Precision,横轴是TPR。与roc不同的是,pr_auc明显小于roc_auc,说明准确率会受FP的影响。
指标比较
- ROC曲线由于兼顾正例与负例,所以适用于评估分类器的整体性能,相比而言PR曲线完全聚焦于正例。
- 如果有多份数据且存在不同的类别分布,比如信用卡欺诈问题中每个月正例和负例的比例可能都不相同,这时候如果只想单纯地比较分类器的性能且剔除类别分布改变的影响,则ROC曲线比较适合,因为类别分布改变可能使得PR曲线发生变化时好时坏,这种时候难以进行模型比较;反之,如果想测试不同类别分布下对分类器的性能的影响,则PR曲线比较适合。
- 如果想要评估在相同的类别分布下正例的预测情况,则宜选PR曲线。
- 类别不平衡问题中,ROC曲线通常会给出一个乐观的效果估计,所以大部分时候还是PR曲线更好。
- 最后可以根据具体的应用,在曲线上找到最优的点,得到相对应的precision,recall,f1 score等指标,去调整模型的阈值,从而得到一个符合具体应用的模型。
下面的图表生动的展示了样本不平衡对分类器指标的影响。

a,b是样本平衡下的roc、pr曲线。c,d是10倍样本差的情况下的对应曲线。很明显,roc是不受分布影响的,但d图的pr_auc就下降了很多。
而且pr曲线是非凸的,也就是说,可以通过图形去选取某些取值点(调参),trade off准确率和召回率。