评价指标是评判数据表现的衡量标准,它是数据分析中非常重要的部分,也是产品经理必须掌握的重点内容。不同的数分任务采用不同的评价指标,对于同一种任务在不同场景下也会采用不同的评价指标。
例如在检测垃圾邮件这个场景中,这是一个典型的二分类问题,所以可以用精确率和AUC曲线这两个指标判断模型的效果;在人脸识别场景中,使用误识率、拒识率和ROC曲线这三个指标评判模型的效果。
不同指标的着重点不一样,一个指标在不同场景下适用性可能不一样,产品经理需要学习不同指标的特性,在项目中根据实际需要选择不同的评价指标。下文中我们重点讲解一些产品经理常用的评价指标。
01 混淆矩阵
混淆矩阵(Confusion Matrix)是评价模型精度的一种标准格式,用一个N行N列的矩阵形式来表示。矩阵每一列代表预测值,每一行代表实际值。
从混淆矩阵的名字不难看出来,它的作用是表明多个类别之间是否有混淆,也就是模型到底判断对了多少个结果,有多少个结果判断错了。同时混淆矩阵能够帮助我们理解准确率、精确率和召回率的区别。
面对一个二分类问题时,通常我们会将结果表示为正类与负类,两者可以随意指定。在上述区分猫狗图片的例子中,我们假定猫为正类、狗为负类。那么在实际进行预测的时候就会出现四种情况,如下图所示:
混淆矩阵
如果这张图片是猫,机器预测出来的结果也是猫,这种情况称为真正类(True Positive,以下简称TP);
如果这张图片是狗,机器预测出来的结果也是狗,这种情况称为真负类(True Negative,以下简称TN);
如果这张图片是猫,机器预测出来的结果是狗,这种情况称为假负类(False Negative,以下简称FN);
如果这张图片是狗,机器预测的结果是猫,则为假正类(False Positive,以下简称FP)。
02 准确率
准确率(Accuracy)是指预测正确的样本占总样本的比例,即模型找到的真正类与真负类与整体预测样本的比例。用公式表示为:
Accuracy=(TP+TN)/(TP+TN+FP+FN)
准确率的取值范围为[0,1],一般情况下取值越大,代表模型预测能力越好。
假设上述猫狗图片分类的例子中,猫狗图片各有500张。最后模型预测的结果中真正类有318个,真负类有415个,假正类有75个,假负类有182个。根据准确率的定义可以算出来目前模型的准确率为:(318+415)/(1000)=0.73。
准确率是评价模型效果最通用的指标之一,描述模型找到“真”类别的能力。也就是说模型准确识别出猫和狗的概率为0.73。但是在使用的时候有两点需要我们注意。首先是准确率没有针对不同类别进行区分,最后求得的准确率对每个类别而言是平等对待的,这种评价方式在很多场景下是有欠缺的。
在本例中,虽然可以看到模型的整体准确率是73.30%,但是从结果中明显可以看出来,模型对于猫的识别效果远不如对狗的识别效果。如果我们模型的目的是为了把猫的图片挑出来,那么这个准确率就有些虚高。
在实际的病患诊断中,计算机诊断出某患者患有癌症,实际上却未患癌症与计算机诊断出某患者未患有癌症,而实际上却患有癌症这两种情况的重要性不一样,不能一概而论。我们需要明确后续是降低误诊率还是提高确诊率,才能让后续模型优化更有针对性。
另外在正负样本极不平衡的情况下,准确率这个指标存在很大的缺陷。例如在银行的全量客户中,要寻找适合推荐信托产品的超高净值客户是非常难的。因为这部分人群要求存款较多、收入较高,比较稀少,往往只有万分之一的概率。
如果一个预测客户适不适合信托产品的模型用准确率去评判,哪怕模型把全部客户预测成负类,即全部都是不适合的情况,那么这个模型的精度也有 99% 以上。
但这个指标就失去了原有的意义,因为无法找到任何高净值的人群。所以我们一再强调,没有万能的指标,根据场景选择合适的指标非常重要。
03 精确率与召回率
精确率(Precision)和召回率(Recall)是一对好兄弟,虽然是两个不同的评价指标,但它们互相影响,通常一起出现。在很多书上又把精确率称为查准率,把召回率称为查全率。
召回率是针对原始样本而言的指标,它表示原始样本中的正例有多少被预测正确。
原始样本中的正例有两种情况,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为负类(FN),这两种情况组成了原始样本所有的正例。计算公式为:
Recall=TP/(TP+FN)
上述模型中识别猫类图片的召回率为:
318/(318+182)=0.63
从这个角度可以看出来总共500张猫的图片,模型只找对了318张,相比准确率而言,召回率更真实地反应了模型的效果。
而精确率是针对预测结果而言的指标,它表示预测为正类的样本中有多少是对的。预测结果为正例有两种情况,一种就是把正类预测为正类(TP),另一种就是把负类预测为正类(FP)。所以精确率的计算公式为:
Precision=TP/(TP+FP)
即上述模型中识别猫类图片的精确率为:
318/(318+75)=0.81
从这个指标可以看出来模型总共把393张图片预测为猫,其中只有318张图片预测正确。所以模型可能存在欠拟合的情况,将部分狗的照片判断成猫,判断为正类的条件太宽松。下一步优化的时候可以选择适当降低条件以此提高模型效果。如下图所示可以看出精确率与召回率的区别:
精确率与召回率
在理想情况下,我们希望精确率和召回率两者都越高越好。
然而事实上这两者在很多情况下是互相矛盾的。当召回率变高时意味着需要尽可能找到原始样本的正例,因此模型覆盖的数量会变多,模型就更高的几率犯错,将原本不属于该分类的样本也加进来,这就导致精确率下降。
如果我们希望模型尽可能多得找出猫的图片,我们会想办法提高召回率;如果我们希望模型找到的图片少一点但找出来的都是猫的图片,我们会想办法提高精确率。
有两个很典型的场景可以说明这两个指标实际运用的区别,一个是对于地震的预测,我们希望尽可能预测到所有的地震,哪怕这些预测到的地震中只有少数真正发生了地震,在这个时候我们就可以牺牲精确率。
宁愿发出100次警报,但是把10次真实的地震都预测对了,也不希望预测了10次但是只有8次真实的地震被预测出来了,因为只要有1次地震没被发现都会造成巨大的损失。因此这是一个“宁可抓错,不可放过”的场景。
还有一种是垃圾邮件分类的场景,我们希望模型能够尽可能找到所有垃圾邮件,但是我们更不希望把自己正常的邮件被分到垃圾邮件中,哪怕是一封正常的邮件,这会对用户造成很严重的后果。对于少数没有被识别出来的垃圾邮件,其实用户是可以容忍的。
这时候我们宁可少分类成垃圾邮件,但必须确保分的都是对的,这就是一个“宁可放过,不可抓错”的场景。因此在不同的场合中,需要产品经理根据实际情况,自己判断希望是精确率比较高或是召回率比较高。
另外精确率和准确率是比较容易混淆的两个评估指标,两者的核心区别在于:精确率是一个二分类指标,只适用于二分类任务,而准确率能应用于多分类任务。
04 ROC曲线
在逻辑回归的分类模型里,对于正负例的界定,通常会设一个阈值。大于阈值的样本判定为正类,小于阈值的样本为负类。如果我们减小这个阈值,会让更多的样本被识别为正类,从而提高了正类的识别率,但同时也会使得更多的负类被错误识别为正类。
直接调整阈值可以提升或降低模型的精确率和召回率,也就是说使用精确率和召回率这对指标进行评价时会使得模型多了“阈值”这样一个超参数,并且这个超参数会直接影响模型的泛化能力。在数学上正好存在ROC曲线能够帮助我们形象化地展示这个变化过程。
ROC曲线是一个画在二维平面上的曲线,平面的横坐标是假正类率(FalsePositive Rate,简称FPR),计算公式为:
FPR=FP/(FP+TN)
纵坐标是真正类率(True Positive Rate,简称TPR),计算公式为:
TPR=TP/(TP+FN)
对于一个分类器而言,每一个阈值下都会有一个FPR和TPR,这个分类器就可以映射成ROC平面上的一个点。当我们调整这个分类器分类时使用的阈值,就可以得到一个经过(0,0),(1, 1)的曲线,这条曲线就是这个分类器的ROC曲线,如下图所示。
ROC曲线
从图中可以看到,所有算法的ROC曲线都在y=x这条线的上方,因为y=x表示了随机的猜测的概率。所有二分类问题随便猜正确或不正确都是50%的准确率。
一般情况下不存在比随机猜测的准确率更糟糕的算法,因为我们总是可以将错误率转换为正确率。如果一个分类器的准确率是40%,那么将两类的标签互换,准确率就变为了60%。
从图中可以看出来,最理想的分类器是到达(0,1)点的折线,代表模型的准确率达到100%,但是这种情况在现实中是不存在的。如果我们说一个分类器A比分类器B好,实际上我们指的是A的ROC曲线能够完全覆盖B的ROC曲线。如果有交点,只能说明A在某个场合优于B,如下图所示。
分类器A与分类器B的ROC曲线
ROC曲线通常搭配着它对应的比率图一起使用,我们继续用猫狗图片分类的例子说明这两个图怎么看。原本我们猫狗的图片各有500张,如所示图形的X轴代表预测的概率值,Y轴代表观察的数量。
假设我们用一个新的分类器对图片进行分类,分类结果用黑色线代表狗图片的分布,用灰色代表猫图片的分布。模型给出的分值越高代表模型判断这张图片是猫的把握越大,反之模型的给出的分值越低代表模型判断这张图片不是猫的把握越大,也就是说这张图片更有可能是狗。
从下图中可以看出来这个分类器的分类效果还是挺好的,基本上基本把两个物群的分布分开,ROC曲线也非常靠近(0,1)这个点。
某分类器下的ROC曲线
如上图所示,如果将阈值设为0.3,左边划线部分的面积代表模型判断为狗的图片数量有300张左右,并且从图中可以看出来这300张图片全部分类正确。
如果将阈值设为0.5,则左边划线部分的面积代表模型判断为狗的图片有530张左右,从图中重叠部分可以看出来大约有40个分类结果是包含错误分类的,这些错误分类包括实际是狗的图片被分成猫的情况以及实际是猫的图片被分类成狗的情况。
0.3阈值与0.5阈值下的分类结果
这时候我们用另外一个分类器再进行分类,结果如图3-16所示。可以看到整个分类结果向右偏移,同时模型的效果变差,因为两个分类结果重叠的部分变大,无论我们把阈值设在哪里都会比上一个分类器产生更多的错误分类。
假如这时我们采用“宁可抓错,不可放过”的原则把阈值设置为0.8,则右边划线部分只有200个左右不会被分类为狗的图片,其余800个结果全部会被判定为狗的图片,尽管这里面有350个分类结果是错误的结果。
新的分类器下的ROC曲线
从上述例子中看出来,ROC曲线可以帮助我们从图像的角度分辨两个分类结果的分布情况以及选择模型合适的阈值。因此也是很多产品经理比较喜爱的指标之一。
这时很多读者可能会有疑问,既然已经有那么多评价标准,为什么还要使用ROC呢?
原因在于ROC曲线有个很好的特性:当测试集中的正负样本的分布变换的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现样本类不平衡,即正负样本比例差距较大,而且测试数据中的正负样本也可能随着时间变化,使用ROC曲线不管是数据集怎么变换,都有直观的展示效果。
05 AUC值
ROC曲线一定程度上可以反映分类器的分类效果,但始终是以图像的形式,不能告诉我们直接的结果。我们希望有一个指标,这个指标越大代表模型的效果越好,越小代表模型的效果越差。于是引入了AUC值(Area Under Curve)的概念。
AUC是数据分析中最常用的模型评价指标之一,实际上AUC代表的含义就是ROC曲线下的面积,如下图所示,它直观地反映了ROC曲线表达的分类能力。AUC值通常大于0.5小于1,AUC(面积)越大的分类器,性能越好。
AUC值的图形展示
AUC值的定义是:从所有正类样本中随机选取一个样本,再从所有负类样本中随机选取一个样本,然后分类器对这两个随机样本进行预测,把正类样本预测为正类的概率为p1,把负类样本预测为正类的概率为p0,p1>p0的概率就等于AUC值。
即AUC值是指随机给定一个正样本和一个负样本,分类器输出该正样本为正的概率值比分类器输出该负样本为正的那个概率值要大的可能性,AUC值越高代表模型的排序能力越强。理论上,如果模型把所有正样本排在负样本之前,此时AUC的取值为1,代表模型完全分类正确,但这种情况在实际中不可能出现。
总结AUC值的四种取值结果有:
AUC=1时,代表采用这个预测模型,不管设定什么阈值都能得出完美预测,模型能够将所有的正样本都排在负样本前面。但是在现实中不存在完美的分类器。
0.5
AUC=0.5时,代表模型的预测效果与随机猜测一样,只有50%的准确率。也就是说模型完全不能区分哪些是正样本哪些是负样本,没有预测价值。
AUC<0.5时,代表模型的预测效果比随机猜测还差;但只要将样本正负例互换,结果就能优于随机猜测。
作者:阿翘 《100个案例搞懂人工智能》作者,平安科技资深产品经理。主要研究产品策划、人工智能与互联网商业。