十分钟理解机器学习分类模型评估指标

一、从混淆矩阵说起

我们以二分类模型来举例,假设我们要预测用户在借款之后是否会逾期。

对于我们的预测来说,有逾期/不逾期两种结果。

对于真实情况,同样有逾期/不逾期两种结果。

我们以逾期为正例,以不逾期为反例,将预测结果与真实结果进行列联交叉,就生成了混淆矩阵:

预测正例 预测反例
实际正例 TP: True Positive FN: False Negative
实际反例 FP: False Positive TN: True Negative
  • TP: 真正例,预测为正例,实际也是正例
  • FP: 假正例,预测为正例,实际为反例
  • FN: 假反例,预测为反例,实际为正例
  • TN: 真反例,预测为反例,实际也是反例

欢迎大家关注我的个人博客【数洞】 【备用站】

需要指出的是,上述这些都是计数,即真正例的个数、假正例的个数等。那么相对应的,用这些计数除以实际每个分类的总数,就得到了四个比率:

  • TPR: True Positive Rate,真正率,被预测为正的正样本数/实际正样本数。
  • FPR: False Positive Rate,假正率,被预测为正的负样本数/实际负样本数。
  • FNR: False Negative Rate,假负率,被预测为负的正样本数/实际正样本数。
  • TNR: True Negative Rate,真负率,被预测为负的负样本数/实际负样本数。

对应混淆矩阵的公式如下:

TPR=\frac{TP}{TP+FN}

FPR=\frac{FP}{FP+TN}

FNR=\frac{FN}{FN+TP}

TNR=\frac{TN}{FP+TN}

可以发现,这些简写均为单词首字母的组合,这一点可以帮助我们免于死记硬背每个公式,只要从根本上理解了这些指标的含义,就可以自己组装出来具体的公式。

简单来说,我们在设计一个分类模型时,希望它能尽可能分类正确,即实际为正例的,我们希望能将它归类到正例中;实际为反例的,我们希望能将它归类到反例中。也就是提高上述TP和TN部分的比例。

混淆矩阵是评估一个分类模型效果的基础,有许多评估指标都是基于分类指标,比如接下来我们提到的准确率、精确率、召回率等。

二、最简单的准确率

准确率(accuracy)最为简单,也最容易理解,它就是我们预测正确的比例,也就是上述TP和TN部分占总体的比例:

ACC=\frac{TP+TN}{TP+FP+FN+TN}

与准确率相对的是错误率(Error),我们可以简单地使用Error=1-ACC来计算,也可以使用混淆矩阵类计算:

Error=\frac{FN+FP}{TP+FP+FN+TN}

准确率存在的一个问题是在不同分类的数量不均衡时的表现不太好。举个例子来说明这种情况:

A分类有90个,B分类有10个

  • 模型一:在A分类中预测正确81个,在B分类中预测正确0个。
  • 模型二:在A分类中预测正确72个,在B分类中预测正确8个。

我们来计算一下,模型一的准确率为ACC_{1}=\frac{81+1}{81+9+1+9}=81\%,而模型二的准确率的准确率为ACC_{2}=\frac{72+8}{72+18+8+2}=80\%,可以看到,模型一的整体准确率为81%,高于模型二的80%,那么模型一就真的比模型二好吗?

通过仔细观察我们可以看到,事实上模型一只是简单粗暴地将所有个例都分类到A分类中,就得到了更高的准确率,模型二在分类A和分类B上有着同样不错的预测效果,却在准确率上输给了模型一。假如说我们决策的目的是判断用户是否会产生逾期,而B分类就是会产生逾期的用户,那么模型一会给我们带来难以接受的损失,相对来说,模型二虽然整体准确率低于模型一,但是明显会帮助我们避开那些劣质用户,从而保障资本安全。

面对这种准确率失真的情况,我们可以通过计算真正率和真负率的均值来得到平均准确率(Average Per-Class Accuracy):

Ave\_Acc=\frac{TPR+TNR}{2}=\frac{\frac{TP}{TP+FN}+\frac{TN}{FP+TN}}{2}

我们再来看一看上述的例子,计算得到ACC_1=45\%,ACC_2=80\%,模型二远远优于模型一,在这一案例中,显然平均准确率更符合我们的设想。

三、最常用的精确率和召回率

精确率(Precision)和准确率一字之差,含义却完全不同。通俗来说,精确率就是预测的正例中实际为正的比例。

假设有100个人,我们的任务是识别出他们中间的好人。那么精确率就是在我们预测的好人中,真正的好人所占的比例。假如我们判断其中90个是好人,但事实上这90人中只有81人是好人,那么我们的精确率就是 P=81/90=90\% 。精确率对应到混淆矩阵就是:
P=\frac{TP}{TP+FP}

召回率(Recall)则是实际为正的个例中被我们预测为正的比例。仍以上例来说明,假设一共有93个好人,但是我们只预测对了其中81个,那么我们的召回率就是 R=81/93=87\% 。召回率对应到混淆矩阵的公式为:

P=\frac{TP}{TP+FN}

可以看到,召回率是一个与精确率相互补的指标。它们都来自于信息检索领域,后来广泛应用于推荐系统、机器学习模型等效果的评估。

以推荐系统为例来加深理解:我们给用户推荐了100篇文章,用户看了其中的50篇,那我们的精确率P就是50%;用户一共看了200篇文章,其中50篇来自我们的推荐,另外50篇是他自己通过其他途径阅读到的,那么我们的召回率R就是25%。

精确率和召回率哪个更重要呢?这个要视我们分类的目的来决定。比如我们要识别出信贷欺诈用户或者识别出网上逃犯,那么显然召回率更重要,因为这种情况下我们宁肯错杀三千,绝不放过一个,当然针对这类情况,肯定需要更多后续的手段来保障好人的利益;而当我们要预测股票的涨跌或者要给用户推荐他喜爱的商品时,显然精确率更重要。

显然,几乎不存在我们只需要关注其中一个指标的情况。精确率和召回率总是相辅相成,在不同的目的下我们为它们赋予不同的权重,从而让它们更好地为模型评估、对比提供支持。

在这样的考量下,F1-Score应运而生。

四、综合性能强大的F1-Score

首先,F1-Score是精确率和召回率的调和平均值。我们知道常用的有算术平均值、几何平均值、加权平均值,那么,什么是调和平均值呢?

调和平均值(Harmonic Mean)就是各个统计量的倒数的算数平均值的倒数。

调和平均值的一个特点是更重视较小值,举个例子来说明:

假设A=10,B=40,则\frac{2}{H}=\frac{1}{10}+\frac{1}{40},或H=\frac{1}{(\frac{1}{10}+\frac{1}{40})\times\frac{1}{2}}=16

调和平均值也有简单调和平均值与加权调和平均值之分。具体到F1-Score来说,如果我们赋予精确率和召回率相同权重,那我们的F1-Score就是精确率和召回率的简单调和平均值:

F_1=\frac{1}{(\frac{1}{P}+\frac{1}{R})\times\frac{1}{2}}=\frac{2\times{P}\times{R}}{P+R}

对我们来说,精确率和召回率的重要性并不总是等同。假如我们需要为它们赋予不同的权重,我们就需要使用到加权调和平均值。

我们用H_w来表示加权调和平均值,使用w_a, w_b分别表示我们赋予a和b的不同的权重,那么a和b的加权调和平均值为:

H_w=\frac{1}{\frac{1}{w_a + w_b}\times{(\frac{w_a}{a}+\frac{w_b}{b}})}=\frac{w_a+w_b}{\frac{w_a}{a}+\frac{w_b}{b}}=\frac{(w_a+w_b)\times{a}\times{b}}{w_a\times{b}+w_b\times{a}}

现在我们为精确率赋以\beta^2的权重,为召回率赋以1的权重,那么我们的F_1就是:

F_1=\frac{1}{\frac{1}{w_P+w_R}\times{(\frac{w_P}{P}+\frac{w_R}{R}})}=\frac{w_P+w_R}{\frac{w_P}{P}+\frac{w_R}{R}}=\frac{(w_P+w_R)\times{P}\times{R}}{w_P\times{R}+w_R\times{P}}=\frac{(\beta^2+1)\times{P}\times{R}}{\beta^2\times{R}+P}

这就是F_1的由来,作为一个综合了精确率与召回率两大指标的指标,F_1的使用颇为广泛。

五、ROC和AUC

ROC(Receiver Operating Characteristic)的全称是受试者工作特征,源于二战中用于敌机检测的雷达信号分析技术。

首先,分类模型的目标可以通俗地理解为:在尽可能少地将负例分类为正例的同时,尽可能多地将正例分类为正例。因此,我们可以观察假正率与真正率的变化趋势,来观察我们的模型是否能在较低的假正率下得到较高的真正率。这里的真正率和假正率,在混淆矩阵部分有提到,忘记的可以往上翻一下。

ROC曲线就是以假正率为横轴,以真正率为纵轴绘制的曲线,它表现了随着假正率的增长,我们是否能得到更大的真正率的增长。

绘制ROC曲线时,我们要先对预测样本做一个排序。如何排序呢?根据概率,根据我们的模型计算出来的每个样本属于正例的概率做一个逆序排列。比如说,我们的模型预测样本1属于正例的概率为99%,在所有样本里最高,那样本1就排在第一个;我们的模型预测样本2属于正例的概率为1%,在所有样本里最低,那样本2就排在最后一个。这样按照概率从大到小排序好之后,我们就得到了一个在模型预测中从“最正”到“最负”的样本列表。

接下来我们需要了解一个截断点的概念。由于我们输出了每个样本归属于正例的概率,这一概率是一个从0到1的数字,假如在概率大于0.5的时候,我们就讲样本归类到正例中去,那么0.5就是我们设置的截断点。ROC曲线就是根据在不同的截断点条件下得到的(假正率,真正率)数值对绘制而成的曲线。

我们依照概率大小,依次将每个样本预测为正例,由此来得到一系列的(假正率,真正率)数值对。

显而易见的是,当我们将所有样本都预测为反例时,这一数值对为(0,0);当我们将所有样本预测为正例时,这一数值对为(1,1):

  • 当模型的预测效率与随机预测一样——即随机为每个样本分配到正负例中,那ROC曲线就是一条从(0,0)到(1,1)的近似线段,表明每当我们将更多的1%的负例预测为正例,我们基本上也能将更多的1%的正例预测为正例;
  • 当我们的ROC曲线在对角线之上时,说明我们的模型预测效果比随机预测要好,也就是说,在我们预测为正例的概率最大的一批样本中,其正例的比例明显高于负例,因此真正率的增长明显快于假正率的增长;
  • 当我们的ROC曲线在对角线之下时,就说明跟我们的模型反着来预测可能会更好……
  • 假设我们的模型比较健康的话,ROC曲线的导数应该是逐渐降低的。假如中间某些地方真正率的增长速度反而高于开头,那可能说明我们的模型选择、特征选取或者参数配置出现了一些问题,导致某些明显正例概率更大的样本被我们的模型认为正例概率不够高。
image

如上图,ROC曲线下方的面积就是AUC。一个模型的ROC曲线如果完全在另一个模型的ROC曲线上方,那说明这个模型明显好于另一个模型。但是在实际的预测过程中,我们会经常遇到不同模型的ROC曲线相交叉的情况,很难界定到底哪个模型更好,这时我们就需要通过AUC来进行判断了。

AUC的现实意义是给定一个正例A,一个负例B,在我们的模型中给出A属于正例的概率大于B属于正例的概率的概率。也就是说我们的模型认为A比B更像正例的概率。因此AUC的值越大,就说明了模型预测效果越好。

由于真正的ROC曲线是一个个阶梯状的线段组成的(因为每当新增一个样本预测为正例,要么它的确是正例,那就向上增加真正率而假正率不变;要么它是反例,那就向右增加假正率而真正率不变),因此其面积计算很简单,就是每个阶梯下方的矩形面积之和。事实上,ROC和AUC的绘制与计算我们几乎不会通过手动的方式完成(否则只需要几十个样本就足以让我们焦头烂额),我们可以使用计算机方便地完成这些任务。不过下边还是贴一下AUC的计算公式:

AUC=\frac{1}{2}\sum\limits_{i=1}^{m-1}(x_{i+1}-x_i)\cdot(y_i+y_{i+1})

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容