机器学习解决问题的通用流程:问题建模——特征工程——模型选择——模型融合
其中问题建模主要包括:设定评估指标,选择样本,交叉验证
解决一个机器学习问题都是从问题建模开始,首先需要收集问题的资料,深入理解问题,然后将问题抽象成机器可预测的问题。在这个过程中要明确业务指标和模型预测目标,根据预测目标选择适当指标用于模型评估。接着从原始数据中选择最相关的样本子集用于模型训练,并对样本子集划分训练集和测试集,应用交叉验证的方法对模型进行选择和评估。
评估指标很多,我们应该选择一个能跟业务指标波动一致的评估指标,这样通过观察评估指标就能判断模型效果,可以大大提高模型迭代效率。
评估指标用于反应模型效果,在预测问题中,要评估模型的效果,就需要将模型预测结果 和真真实标注 进行比较,评估指标定义为和的函数。
通常线下使用的是机器学习评估指标,线上使用的是业务指标,如果线下指标和线上指标不同,则可能会出现线下指标变好而线上指标变差的现象。为此,在一个新问题的开始阶段,都会进行多轮模型迭代,来探索和线上业务指标一致的线下指标,尽可能使线下指标的变趋势和线上指标一致。
精确率和召回率主要用于二分类问题(从其公式推导也可看出),结合混淆矩阵有:
精确率P和召回率R的定义为:
上述计算公式中的Positive与Negative是预测标签,True与false代表预测正误;
要注意,精确率和召回率是二分类指标,不适用多分类,由此得到P-R曲线以及ROC曲线均是二分类评估指标(因为其横纵轴指标均为二分类混淆矩阵计算得到),而准确率适用于多分类评估。(可以将多分类问题转换为二分类问题进行求解,将关注的类化为一类,其他所有类化为一类)
理想情况下,精确率和召回率两者都越高越好。然而事实上这两者在某些情况下是矛盾的,精确率高时,召回率低;精确率低时,召回率高;关于这个性质通过观察PR曲线不难观察出来。比如在搜索网页时,如果只返回最相关的一个网页,那精确率就是100%,而召回率就很低;如果返回全部网页,那召回率为100%,精确率就很低。因此在不同场合需要根据实际需求判断哪个指标跟重要。
上图分析一下:
这样一来呢,我们可以选择只看我们感兴趣的class,就是minority class的precision,recall来评价模型的好坏。
准确率和错误率既可用于二分类也可用于多分类:
上述公式是准确率、错误率针对二分类情况时候的计算公式
精确率和准确率是比较容易混淆的两个评估指标,两者是有区别的。精确率是一个二分类指标,而准确率能应用于多分类,其计算公式为:
F1函数是一个常用指标,F1值是精确率和召回率的调和均值,即
F值可泛化为对精确率和召回率赋不同权值进行加权调和:
利用 给P和R赋予不同的权重,若 则为F1值。
下面是两个场景:
我们以召回率R为横轴、以精确率P为纵轴,能够画出P-R曲线,如下图:
从上图不难发现,precision与Recall的折中(trade off),曲线越靠近右上角性能越好,曲线下的面积叫AP分数,能在一定程度上反应模型的精确率和召回率都很高的比例。但这个值不方便计算,综合考虑精度与召回率一般使用F1函数或者AUC值(因为ROC曲线很容易画,ROC曲线下的面积也比较容易计算).
先看平滑不平滑,在看谁上谁下(同一测试集上),一般来说,上面的比下面的好(红线比黑线好);
F1(计算公式略)当P和R接近就也越大,一般会画连接(0,0)和(1,1)的线,线和PRC重合的地方的F1是这条线最大的F1(光滑的情况下),此时的F1对于P-R曲线就好象AUC对于ROC一样。一个数字比一条线更方便调模型。
注:既然Precision与Recall都是二分类指标,则PR曲线也必然是二分类指标,虽然可以将precision、Recall及PR曲线应用到多分类,但是这种情况相当于是多分类转换为二分类情况分析(将关注的类视为一类,将其他所有类化为一类)
在众多的机器学习模型中,很多模型输出的是预测概率,而使用精确率、召回率这类指标进行模型评估时,还需要对预测概率设分类阈值,比如预测概率大于阈值为正例,反之为负例。这使得模型多了一个超参数,并且这超参数会影响模型的泛化能力。
接受者操作特征(Receiver Operating Characteristic, ROC)曲线不需要设定这样的阈值,ROC曲线纵坐标是真正率,横坐标是假正率,如下图,去对应的计算公式为:
同时,TPR与FPR又有其他名称,如下:
假设我们的minority class,也就是正例,是1。反例,为0。$\hat{Y}$是真实label Y的估计(estimate)。
看出来没有,sensitivity和specificity是条件于真实label Y的概率的。我们讲这个叫条件概率嘛。那么意思就是说,无论Y的真实概率是多少,都不会影响sensitivity和specificity。也就是说,这两个metric是不会受imbalanced data 影响的,那就很客观了啊,是不是!而precision呢,就会随着你的测试集里面的正反比例而变化哦。
另外值得注意的是, AUC的计算方法同时考虑了学习器对于正例和负例的分类能力,在样本不平衡的情况下,依然能够对分类器做出合理的评价。AUC对样本类别是否均衡并不敏感,这也是不均衡样本通常用AUC评价学习器性能的一个原因。
例如在癌症预测的场景中,假设没有患癌症的样本为正例,患癌症样本为负例,负例占比很少(大概0.1%),如果使用准确率评估,把所有的样本预测为正例便可以获得99.9%的准确率。但是如果使用AUC,把所有样本预测为正例,TPR为1,FPR为1。这种情况下学习器的AUC值将等于0.5,成功规避了样本不均衡带来的问题。
这个曲线就是以true positive rate 和 false positive rate为轴,取不同的threshold点画的啦。有人问了,threshold是啥子哦。这么说吧,每个分类器作出的预测呢,都是基于一个probability score的。一般默认的threshold呢都是0.5,如果probability>0.5,那么这个sample被模型分成正例了哈,反之则是反例。
真正率(True Positive Rate)就是召回率Recall
ROC曲线和P-R曲线有些类似,ROC曲线越靠近左上角性能越好。左上角坐标为(0, 1),即FPR=0,TPR=1,根据FPR和TPR公可以得知,此时FN=0, FP=0,模型对所有样本分类正确,绘制ROC曲线很简单,首先对所有样本按预测概率排序,以每条样本的预测概率为阈值,计算相应的FPR和TPR,然后线段连接。
当数据量少时,绘制的ROC曲线不平滑;当数据量大时,绘制的ROC曲线会趋于平滑。
ROC curve 可以很好的回答什么问题呢——“不论class的基本概率怎么样,我的模型in general能表现得多好?”
一般来说呢,最优的threshold就是橙色曲线离蓝色虚线(基准线)最远的一点啦,或者橙色曲线上离左上角最近的一点,再或者是根据用户自己定义的cost function来的。
一般来说,如果ROC是光滑的,那么基本可以判断没有太大的overfitting(比如图中0.2到0.4可能就有问题,但是样本太少了),这个时候调模型可以只看AUC,面积越大一般认为模型越好。
1. 主要作用
2. 优点
AUC是一个模型评价指标,只能用于二分类模型的评价,对于二分类模型,还有很多其他评价指标,比如logloss,accuracy,precision。如果你经常关注数据挖掘比赛,比如kaggle,那你会发现AUC和logloss基本是最常见的模型评价指标。为什么AUC和logloss比accuracy更常用呢?因为很多机器学习的模型对分类问题的预测结果都是概率,如果要计算accuracy,需要先把概率转化成类别,这就需要手动设置一个阈值,如果对一个样本的预测概率高于这个预测,就把这个样本放进一个类别里面,低于这个阈值,放进另一个类别里面。所以这个阈值很大程度上影响了accuracy的计算。使用AUC或者logloss可以避免把预测概率转换成类别。
AUC是Area under curve的首字母缩写。AUC就是ROC曲线下的面积,衡量学习器优劣的一种性能指标。从定义可知,AUC可通过对ROC曲线下各部分的面积求和而得。假定ROC曲线是由坐标为 的点按序连接而形成,则AUC可估算为:
通过AUC的定义我们知道了AUC是什么,怎么算,但是它的意义是什么呢。如果从定义来理解AUC的含义,比较困难,实际上AUC和Mann–Whitney U test有密切的联系。
从Mann–Whitney U statistic的角度来解释,AUC就是从所有1样本中随机选取一个样本, 从所有0样本中随机选取一个样本,然后根据你的分类器对两个随机样本进行预测,把1样本预测为1的概率为p1,把0样本预测为1的概率为p0,p1>p0的概率就等于AUC。
即AUC是指随机给定一个正样本和一个负样本,分类器输出该正样本为正的那个概率值比分类器输出该负样本为正的那个概率值要大的可能性。
所以AUC反应的是分类器对样本的排序能力。根据这个解释,如果我们完全随机的对样本分类,那么AUC应该接近0.5。(所以一般训练出的模型,AUC>0.5,如果AUC=0.5,这个分类器等于没有效果,效果与完全随机一样,如果AUC<0.5,则可能是标签标注错误等情况造成);
另外值得注意的是,AUC的计算方法同时考虑了学习器对于正例和负例的分类能力,在样本不平衡的情况下,依然能够对分类器做出合理的评价。AUC对样本类别是否均衡并不敏感,这也是不均衡样本通常用AUC评价学习器性能的一个原因。
这个指标尤其适用在某些场景下(如 CTR 预估),每次要返回的是最有可能点击的若干个广告(根据CTR排序, 选择排在前面的若干个),实际上便是在考验模型的排序能力。除此之外,CTR 中存在着样本不均衡的问题,正负样本比例通常会大于 1:100,如果采用 PR 曲线,则会导致 AUC 发生剧变,无法较好反映模型效果。
然而,ROC 曲线不会随着类别分布的改变而改变的优点在一定程度上也是其缺点。因为 ROC 曲线这种不变性其实影响着的是 AUC 值,或者说是评估分类器的整体性能。但是在某些场景下,我们会更关注正样本,这时候就要用到 PR 曲线了。
比如说信用卡欺诈检测,我们会更关注 precision 和 recall,比如说如果要求预测出为欺诈的人尽可能准确,那么就是要提高 precision;而如果要尽可能多地预测出潜在的欺诈人群,那么就是要提高 recall。一般来说,提高二分类的 threshold 就能提高 precision,降低 threshold 就能提高 recall,这时便可观察 PR 曲线,得到最优的 threshold。
此外,AUC和Wilcoxon Test of Ranks等价;AUC还和基尼(Gini)系数有联系,满足
AUC的计算方法有多种,从物理意义角度理解,AUC计算的是ROC曲线下的面积:
从概率意义角度理解,AUC考虑的是样本的排序质量,它与排序误差有密切关系,可得到计算公式:
其中,rank为样本排序位置从1开始, 为正样本数, 为负样本数。
AUC计算主要与排序有关,所以它对排序敏感,而对预测分数没那么敏感。
最后,我们在讨论一下:在多分类问题下能不能使用ROC曲线来衡量模型性能?
我的理解:ROC曲线用在多分类中是没有意义的。只有在二分类中Positive和Negative同等重要时候,适合用ROC曲线评价。如果确实需要在多分类问题中用ROC曲线的话,可以转化为多个“一对多”的问题。即把其中一个当作正例,其余当作负例来看待,画出多个ROC曲线。
“ROC 曲线具有不随样本比例而改变的良好性质,因此能够在样本比例不平衡的情况下较好地反映出分类器的优劣。”
AUC计算主要与排序有关,所以他对排序敏感,而对预测分数没那么敏感。
对数损失(logistic loss,logloss)是对预测概率的似然估计,其标准形式为:
对数损失最小化本质上是利用样本中的已知分布,求解导致这种分布的最佳模型参数,是这种分布出现概率最大。
对数损失对应的二分类的计算公式为:
其中, , 为第 i 条样本预测为1的概率。
对数损失在多分类问题中也使用广泛,其计算公式为:
其中, 为样本数, 为类别数, 表示第$i$条样本的类别为 , 为第 条样本类别 的概率。
logloss衡量的是预测概率分布和真实概率分布的差异性,取值越小越好。与AUC不同,logloss对预测概率敏感。