一、模型评价的意义
在完成模型构建之后,必须对模型的效果进行评估,根据评估结果来继续调整模型的参数、特征或者算法,以达到满意的结果。
评价一个模型最简单也是最常用的指标就是准确率,但是在没有任何前提下使用准确率作为评价指标,准确率往往不能反映一个模型性能的好坏,例如在不平衡的数据集上,正类样本占总数的95%,负类样本占总数的5%;
那么有一个模型把所有样本全部判断为正类,该模型也能达到95%的准确率,但是这个模型没有任何的意义。
因此,对于一个模型,我们需要从不同的方面去判断它的性能。在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评价结果;
这意味着模型的好坏是相对的,什么样的模型是好的,不仅取决于算法和数据,还决定于任务需求。例如医院中检测病人是否有心脏病的模型,那么这个模型的目标是将所有有病的人给检测出来,及时会有许多的误诊(将没病检测为有病);
在警察追捕罪犯的模型上,该模型的目标是将罪犯准确的识别出来,而不希望有过多的误判(将正常人认为是罪犯)。所以不同的任务需求,模型的训练目标不同,因此评价模型性能的指标也会有所差异。
二、分类模型评价指标
下面以二分类为例,对分类模型中的常用指标进行说明与总结
2-1、混淆矩阵(Confusion Matrix)
混淆矩阵是能够比较全面的反映模型的性能,从混淆矩阵能够衍生出很多的指标来。
表2.1 二分类结果混淆矩阵
真实情况 | 预测结果 | |
正例 | 反例 | |
正例 | TP(真正例) | FN(假反例) |
反例 | FP(假正例) | TN(真反例) |
其中:TP:真正例,实际为正预测为正;FP:假正例,实际为负但预测为正;FN:假反例,实际为正但预测为负;TN:真反例,实际为负预测为负
查准率(精准率):Precision = TP / (TP+FP);
查全率(召回率):Recall = TP / (TP+FN);
正确率(准确率):Accuracy = (TP+TN) / (TP+FP+TN+FN)
F值(F1-scores):Precision和Recall加权调和平均数,并假设两者一样重要。
F1-score = (2Recall*Precision) / (Recall + Precision)
查准率和查全率是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。通常只有在一些简单任务中,才可能使二者都很高。
2-2、PR曲线
P-R曲线的P就是查准率(Precision),R就是查全率(Recall)。以P作为横坐标,R作为纵坐标,就可以画出P-R曲线。
对于同一个模型,通过调整分类阈值,可以得到不同的P-R值,从而可以得到一条曲线(纵坐标为P,横坐标为R)。通常随着分类阈值从大到小变化(大于阈值认为P),Precision减小,Recall增加。比较两个分类器好坏时,显然是查得又准又全的比较好,也就是的PR曲线越往坐标(1,1)的位置靠近越好。若一个学习器的P-R曲线被另一个学习器完全”包住”,则后者的性能优于前者。当存在交叉时,可以计算曲线围住面积,不太容易判断,但是可以通过平衡点(查准率=查全率,Break-Even Point,BEP)来判断。
下图中,基于BEP的比较,可以认为模型A优于模型B。
2-3、ROC曲线和AUC
AUC(Area Under the ROC Curve)指标是在二分类问题中,模型评估阶段常被用作最重要的评估指标来衡量模型的稳定性。
根据混淆矩阵,我们可以得到另外两个指标:
真正例率,True Positive Rate:TPR = TP/ (TP+FN)
假正例率, False Postive Rate:FPR = FP/(TN+FP)
另外,真正率是正确预测到的正例数与实际正例数的比值,所以又称为灵敏度(敏感性,sensitive);
对应于灵敏度有一个特异度(特效性,specificity)是正确预测到的负例数与实际负例数的比值(NPV = TN / (TN+FN))。
我们以真正例率(TPR)作为纵轴,以假正例率(FPR)作为横轴作图,便得到了ROC曲线,而AUC则是ROC曲线下的面积。AUC的取值为[0.5-1],0.5对应于对角线的“随机猜测模型”。
AUC值是一个概率值,当你随机挑选一个正样本以及负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值,AUC值越大,当前分类算法越有可能将正样本排在负样本前面,从而能够更好地分类。例如一个模型的AUC是0.7,其含义可以理解为:给定一个正样本和一个负样本,在70%的情况下,模型对正样本的打分(概率)高于对负样本的打分。
那么为什么要用AUC作为二分类模型的评价指标呢?为什么不直接通过计算准确率来对模型进行评价呢?
因为机器学习中的很多模型对于分类问题的预测结果大多是概率,即属于某个类别的概率,如果计算准确率的话,就要把概率转化为类别,这就需要设定一个阈值,概率大于某个阈值的属于一类,概率小于某个阈值的属于另一类,而阈值的设定直接影响了准确率的计算。也就是说AUC越高说明阈值分割所能达到的准确率越高。
2-4、PR曲线与ROC曲线对比
与PR曲线相比,相对来讲ROC曲线会更稳定,在正负样本量都足够的情况下,ROC曲线足够反映模型的判断能力。而在正负样本分布得极不均匀(highly skewed datasets)的情况下(正样本极少),PRC比ROC能更有效地反映分类器对于整体分类情况的好坏。
总之,只画一个曲线时,如果没有data imbalance,倾向于用ROC(更简洁,更好理解)。如果数据样本不均衡,分两种情况:
情况1:如正样本远小于负样本,PRC更敏感,因为用到了precision=(TP/(TP+FP))。
情况2:正样本远大于负样本,PRC和ROC差别不大,都不敏感。
对于同一模型,PRC和ROC曲线都可以说明一定的问题,而且二者有一定的相关性,如果想评测模型效果,也可以把两条曲线都画出来综合评价。
2-5、KS曲线
KS曲线又叫洛伦兹曲线。以TPR和FPR分别作为纵轴,以阈值作为横轴,画出两条曲线。KS曲线则是两条曲线的在每一个阈值下的差值。
KS(Kolmogorov-Smirnov)值,KS=max(TPR-FPR),即为TPR与FPR的差的最大值;
KS值可以反映模型的最优区分效果,此时所取的阈值一般作为定义好坏用户的最优阈值。KS值越大,模型的预测准确性越好。KS值的取值范围是[0,1] ,一般,KS>0.2即可认为模型有比较好的预测准确性。
KS<0.2:模型无鉴别能力;
0.2-0.4之间,模型勉强接受;
0.41-0.5之间,模型具有区别能力;
0.51-0.6之间,模型有很好的区别能力;
0.61-0.75之间,模型有非常好的区别能力;
KS>0.75,模型异常,很有可能有问题。
由于KS值能找出模型中差异最大的一个分段,因此适合用于找阈值(cut_off),像评分卡这种就很适合用KS值来评估。但是KS值只能反映出哪个分段是区分最大的,而不能总体反映出所有分段的效果,因果AUC值更能胜任。 一般如果是如果任务更关注负样本,那么区分度肯定就很重要,此时K-S比AUC更合适用作模型评估,如果没什么特别的影响,那么就用AUC。
参考文献:
[1].评价指标总结
[2].模型评估:K-S值和AUC的区别
[3].机器学习模型相关评价指标最全总结
[4].如何评估一个机器学习模型