“没有测量,就没有科学。”这是科学家门捷列夫的名言。在计算机科学特别是机器学习领域中,对模型的评估同样至关重要。只有选择与问题相匹配的评估方法,才能快速地发现模型选择或训练过程中出现的问题,迭代地对模型进行优化。模型评估主要分为离线评估和在线评估两个阶段。针对分类、排序、回归、序列预测等不同类型的机器学习问题,评估指标的选择也有所不同。知道每种评估指标的精确定义、有针对性地选择合适的评估指标、根据评估指标的反馈进行模型调整,这些都是机器学习在模型评估阶段的关键问题,也是一名合格的算法工程师应当具备的基本功。
在模型评估过程中,分类问题、排序问题、回归问题往往需要使用不同的指标进行评估。在诸多评估指标中,大部分指标只能片面地反映模型的一部分性能。如果不能合理地运用评估指标,不仅不能发现模型本身的问题,而且会得出错误的结论。
1.准确率的局限性
假设公司客户希望把产品定向投放给目标用户。而公司通过第三方渠道拿到一部分目标用户的数据,并以此为训练集和测试集,训练和测试目标用户的分类模型。该模型的分类准确率超过了95%,但在实际广告投放过程中,该模型还是把大部分广告投给了非目标用户。这可能是什么原因造成的?
在解答该问题之前,我们首先回顾一下分类准确率的定义。准确率是指分类正确的样本占总样本个数的比例,即
其中,为被正确分类的样本个数,为总样本个数。
准确率是分类问题中最简单,也是最直观的评价指标,但存在明显的缺陷。比如,当负样本占99%时,分类器把所有样本都预测为负样本也可以获得99%的准确率。所以当不同类别的样本比例非常不均衡时,占比大的类别往往称为影响准确率的最主要因素。
明确了这一点,这个问题也就迎刃而解了。第三方数据给的目标用户只占全体用户的一小部分,虽然模型的分类准确率高,但是不代表对目标用户整体的分类准确率也很高。在线上投放过程中,我们只会对模型判定的“目标用户”进行投放,因此,对目标用户判定的准确率不够高的问题就被放大了。为了解决这个问题,可以使用更为有效地平均准确率(每个类别下的样本准确率的算术平均)作为模型评估的指标。
事实上,这是一道比较开放的问题,可以根据遇到的问题一步步地排查原因。标准答案也不限于指标的选择,即使评估指标选择对了,仍会存在模型过拟合或欠拟合、测试集和训练集划分不合理、线下评估与线上测试的样本分布存在差异等一系列问题,但评估指标的选择是最容易被发现,也是最可能影响评估结果的因素。
2.精确率与召回率的权衡
假设公司提供视频的模糊搜索功能,搜索排序模型返回的Top5的精确率非常高,但在实际使用过程中,用户还是经常找不到想要的视频,特别是一些比较冷门的剧集,这可能是哪个环节出了问题呢?
要回答这个问题,首先明确两个概念,精确率和召回率。
- 精确率(Precision)是指分类正确的正样本个数占分类器判定为正样本的样本个数的比例。
- 召回率(Recall)是指分类正确的正样本个数占真正的正样本个数的比例
在排序问题中,通常没有一个确定的阈值把得到的结果直接判定为正样本或负样本,而是采用Top N返回结果的Precision值和Recall指来衡量排序模型的性能,即认为模型返回的Top N 的结果就是模型判定的正样本,然后计算前N个位置上的准确率Precision@N和前N个位置上的召回率Recall@N。
Precision值和Recall值是既矛盾又统一的两个指标,为了提高Precision值,分类器需要尽量在“更有把握”时才把样本预测为正样本,但此时往往会因为过于保守而漏掉很多“没有把握”的正样本,导致Recall值降低。
回到问题中来,模型返回的Precision@5的结果非常好,也就是说排序模型Top5的返回值的质量是很高的。但在实际应用过程中,用户为了找一些冷门的视频,往往会寻找排在较靠后位置的结果,甚至翻页去查找目标视频。但根据题目描述,用户经常找不到想要的视频,这说明模型没有把相关的视频都找出来呈现给用户。显然,问题出现在召回率上:如果相关结果有100个,即使Precision@5达到了100%,而Recall@5却仅仅只有5%。在模型评估时,我们是否应该同时关注Precision值和Recall值?是否应该选取更高阶的评估指标来更全面地反映模型在Precision值和Recall值两方面的表现?
答案都是肯定的,为了综合评估一个排序模型的好坏,不仅要看模型在不同Top N下的Precision@N和Recall@N,而且最好绘制出模型的P-R(Precision-Recall)曲线。这里简单介绍一下P-R曲线的绘制方法。
P-R曲线的横轴是召回率,纵轴是精确率。对于一个排序模型来说,其P-R曲线上的一个点代表着,在某一阈值下,模型将大于该阈值的结果判定为正样本,小于该阈值的结果判定为负样本,此时返回结果对应的召回率和精确率。整条P-R曲线是通过将阈值从高到低移动而生成的。图2.1是P-R曲线样例图,其中实线代表模型A的P-R曲线,虚线代表模型B的P-R曲线。原点附近代表当阈值最大时模型的精确率和召回率。
由图可见,当召回率接近于0时,模型A的精确率为0.9,模型B的精确率是1,这说明模型B得分前几位的样本全部是真正的正样本,而模型A即使得分最高的几个样本也存在预测错误的情况。并且,随着召回率的增加,精确率整体呈下降趋势。但是,当召回率为1时,模型A的精确率反而超过了模型B。这充分说明,只用某个点对应的精确率和召回率是不能全面地衡量模型的性能,只有通过P-R曲线的整体表现,才能够对模型进行更为全面的评估。
除此之外,F1score和ROC曲线也能综合地反映一个排序模型的性能。F1score是精确率和召回率的调和平均值,它定义为
3.平方根误差的意外
假设一家流媒体公司,拥有众多的美剧资源,预测每部美剧的流量趋势对于广告投放、用户增长都非常重要。我们希望构建一个回归模型来预测某部美剧的流量趋势,但无论采用哪种回归模型,得到的RMSE指标都非常高。然而事实是,模型在95%的时间区间内的预测误差都小于1%,取得了相当不错的预测结果。那么,造成RMSE指标居高不下的最可能原因是什么?
RMSE经常被用来衡量回归模型的好坏,但按照题目的叙述,RMSE这个指标却失效了。先看一下RMSE的计算公式为
其中,yi 是第 i 个样本点的真实值, 是第 i 个样本点的预测值,n是样本点的个数。
一般情况下,RMSE能够很好地反映回归模型预测值与真实值的偏离程度。但在实际问题中,如果存在个别偏离程度非常大的利群点(Outlier)时,即使离群点数量非常少,也会让RMSE指标变得很差。
回到问题中来,模型在95%的时间区间内的预测误差都小于1%,这说明,在大部分时间区间内,模型的预测效果都是非常优秀的。然而,RMSE却一直很差,这很可能是由于在其他的5%时间区间内存在非常严重的离群点。事实上,在流量预估这个问题中,噪声点确实是很容易产生的,比如流量特别小的美剧、刚上映的美剧或者刚获奖的美剧,甚至一些相关社交媒体突发事件带来的流量,都可能会造成离群点。
针对这个问题,有什么解决方案呢?可以从三个角度来思考。
第一,如果我们认定这些离群点是噪声点的话,就需要在数据预处理的阶段把这些噪声点过滤掉。
第二,如果不认为这些离群点是噪声点的话,就需要进一步提高模型的预测能力,将离群点产生的机制建模进去(这又是一个宏大的话题)。
第三,可以找一个更合适的指标来评估该模型。关于评估指标,其实是存在比RMSE的鲁棒性更好的指标,比如平均绝对百分比误差(Mean Absolute Percent Error, MAPE),它定义为
相比RMSE,MAPE相当于把每个点的误差进行了归一化,降低了个别离群点带来的绝对误差的影响。
总结:本文基于三个假想的实际应用场景和遇到的问题,说明了选择合适的评估指标的重要性。每个评估指标都有其价值,但如果只从单一的评估指标出发去评估模型,往往会得出片面甚至错误的结论;只有通过一组互补的指标去评估模型,才能更好地发现并解决模型存在的问题,从而更好地解决实际业务场景中遇到的问题。