• 机器学习基础 | 分类模型评估指标


    在处理机器学习的分类问题中,我们需要评估分类结果的好坏以选择或者优化模型,本文总结二分类任务中常用的评估指标。对于多分类任务的评估指标,可以参考这篇文章

    先从我们最熟知的混淆矩阵(confusion matrix)说起。

    source

    鉴于混淆矩阵看着比较抽象,可以参考下图

    常用的评估指标可以分为3类:

    • 成对指标,包括正确率(精度)&错误率,Precision&Reall,TPR(Sentitivity)&TNR(Specificity)等;
    • 综合指标,包括F-Score,MCC,BCR等;
    • 图形指标,包括ROC以及延伸得到的Gini、AUC、LiftGain曲线、代价曲线等;

    成对指标

    错误率和正确率

    错误率定义为分类错误的样本数占样本总数的比例

    [Err = frac{FP+FN}{N_{sample}} ]

    正确率(精度) 定义为分类正确的样本数占总数的比例

    [Acc = 1-Err = frac{TP+TN}{N_{sample}} ]

    注意:(N_{sample})表示样本总数(即confusion matrix中TP, FP, TN, FN之和)。

    Precision、Recall

    Precision(准确率、查准率) ,即判断为正例的样本中有多大比例是真的正例。

    [P=frac{TP}{TP+FP} ]

    Recall(召回率、查全率) ,即正例样本中有多大比例的正例被发现(判定为正例),该指标也称为True Positive Rate(TPR)、Sensitivity.

    [R = frac{TP}{TP+FN} ]

    考虑到FP和FN的关系是I类错误和II类错误的关系,会此消彼长,故Precision和Recall也有这种关系。对比多个模型的表现时,可以用P-R图(横轴为Recall,纵轴为Precision).

    截图来自《机器学习》周志华,更多信息可以参考本书2.3节1.3

    TPR(Sensitivity)、TNR(Specificity)

    TPR(True Positive Rate) ,正例样本中被正确判定为正例的样本数比例,该指标也称为Sensitivity(敏感度)

    [TPR = sensitivity = frac{TP}{TP+FN} ]

    TNR(True False Rate) ,指负例样本中被正确判定为负例的样本数比例,该指标也称为Specificity(特异度)

    [TNR = specificity = frac{TN}{TN+FP} ]

    综合指标

    F-Score

    假设我们要判断人群中的好人(正例)和坏人(负例),如果我们的关注点是“不能冤枉好人”,那么就要尽可能把好人识别出来(判断为好人的标准趋于宽松,坏人也可能被识别为好人),此时的Precision会趋于更小,Recall会趋于更大;当我们关注的是“不能放过坏人”(比如风控业务中,“坏”客户造成的业务损失很大),此时判断好人的标准更加严格,更多的“真”好人会被纳入“嫌疑对象”(判定为负例),此时的Precision会趋于更大,但是Recall会降低;如果我们“尽可能既不能冤枉好人,又不能放过坏人”,那么就需要在Precision和Recall中取得平衡,此时可以看F1-Score上的表现(不过对于正负例样本不均衡的情况下,F1-Score表现并不好)。

    F1-Score 是Precision和Recall的调和平均值,即

    [frac{1}{F_1}=frac{1}{2}(frac{1}{P}+frac{1}{R}) ]

    由此可推导得到

    [egin{aligned} F_1 & = frac{2 cdot P cdot R}{P+R} \ & = frac{2TP}{2TP+FN+FP} end{aligned} ]

    更一般地,某些场景下关注Precision和Recall的权重不同!

    [frac{1}{F_{eta}}=frac{1}{1+eta^2}(frac{1}{P}+frac{eta^2}{R}) ]

    (eta>1)时,Recall的权重更大,(eta<1)时Precision的权重更大。

    Matthews Correlaton Coefficient

    简称MCC(马修斯相关系数,Brian W. Matthews, 1975),
    更多参考

    [MCC = frac{TP imes TN-FP imes FN}{sqrt{(TP+FP)(TP+FN)(TN+FN)(TN+FP)}} ]

    从公式中可以看出MCC和2*2列联表的卡方检验很相近。MCC的值域为[-1,1].

    MCC的好处是:

    • 正例和负例的不同划分对于最终结果没有影响
      • ① TP = 0, FP = 0; TN = 5, FN = 95.
      • ② TP = 95, FP = 5; TN = 0, FN = 0.
      • 这两种条件下(正例和负例的划分不一样)得到的F1-Score差异非常大(①中为0,②中为0.97),从这里还可以看出F1-Score在正负例样本比例差异不一致的情况下会高估模型的分类效果。
    • 综合考虑了正负例样本比例不一致的情况
      • TP = 90, FP = 4; TN = 1, FN = 5.
      • 这种条件下得到的分类正确率(Acc)为0.91,F1-Score为0.95,MCC得到的值为0.135. 例如风控业务中“坏”用户占整体用户的比例很小,如果看正确率或者F1-Score那就入坑了,此时MCC可能更合适。

    Balanced Classification Rate

    简称BCR,BCR为正例样本和负例样本中各自预测正确率的均值。

    [BCR=frac{1}{2}(TPR+TNR) ]

    与BCR对应的是BER(Balanced Error Rate),也称之为Half Total Error Rate(HTER).

    [BER = 1-BCR ]

    同MCC一样,正负例的标签选择对BCR的计算没有影响,而且一定程度上也能克服正负例样本不均衡导致的评估指标虚高。

    图形指标

    ROC、AUC

    在分类模型中对样本归属类别的判断通常不是直接得到0或者1,而是一个连续的值区间(比如Logistic回归得到的预测值落在概率区间[0,1]),然后通过划定阈值来判断正例或者负例(比如概率(p=0.5)判定为正例)。

    如果要看分类模型在不同决策阈值下的表现如何,则可以借助ROC曲线(Receiver Operating Characteristic Curve,受试者操作特征曲线)

    ROC曲线中:

    • 横轴(x轴)是False Positive Rate(FPR),就是负例样本中被错误判定为正例的样本比例,(FPR=1-TNR=frac{FP}{TN+FP}=frac{FP}{N})
    • 纵轴(y轴)是True Positive Rate(TPR,等价于Sensitivity),即正例样本中被正确判定为正例的样本数比例,(TPR=frac{TP}{TP+FN}=frac{TP}{P}).

    注:上面公式中的N、P是指负例样本和正例样本各自的样本数量

    将样本按预测为正例的概率从高到低进行排序后,依次计算每个概率值作为判定阈值对应的TPR和FPR,再将排序后的每个数据点的TPR和FDR值描点到坐标系中,就得到ROC曲线。如下图示,我们可以看到,将决策阈值往正例方向移动时,对应的TPR和FDR都会下降(FDR和TPR是正相关的关系,所以作ROC曲线图将样本按TPR从小到大排序时,FDR也是从小到大的顺序)。

    注:ROC曲线图中左下角到右上角的虚线表示“随机操作”下的值(作为参考线)

    ROC中决策阈值变化的动态展示如下:

    source

    ROC曲线中曲线相对于随机线的最高点,表示正例和负例分布的分离程度(一般来说分离程度越大,ROC曲线的“小山包”隆起越明显),“小山包”的面积(ROC曲线和随机线围住的面积)就是Gini指数,如下图所示:

    source

    如果模型A的ROC曲线完全包裹模型B的ROC曲线,则表明模型A是优于模型B的;两个模型的ROC曲线发生交叉时,则可以通过ROC曲线下的面积(Area under the ROC curve,简称AUC)来进行比较,AUC取值范围为[0,1].

    更多关于ROC曲线的资料:

    代价曲线(Cost Curve)


    来源:Cost curves: An improved method for visualizing classifier performance

    前面提到的指标都有一个前提,那就是正例或者负例预测错误的代价是一样的(FP,FN)。定义实际为正例预测为负例的损失为(C(-|+)),实际为负例预测为正例的损失为(C(+|-)).

    代价曲线(Cost Curve)中:

    • 横轴是正例概率代价(Probability Cost(+),简记为(PC(+)),其值域为[0,1]),与之对应的是是负例概率代价(PC(-)=1-PC(+)),设(p(+))为样本为正例的概率,样本为负例的概率为(p(-)=1-p(+)),

    [PC(+) = frac{p(+)*C(-|+)}{p(+)*C(-|+)+p(-)*C(+|-)} ]

    • 纵轴是归一化代价(Normalized Expected Cost)

    [egin{aligned} C_{norm} & = frac{FNR*p(+)*C(-|+)+FPR*p(-)*C(+|-)}{p(+)*C(-|+)+p(-)*C(+|-)} \ & = FNR*PC(+)+FPR*PC(-)\ & = PC(+)*(FNR-FPR)+FPR end{aligned} ]

    绘制代价曲线时,ROC曲线上每个点的坐标(TPR,FPR)映射到代价曲线上就是一条左起于(0,FPR)到右侧(1,1-TPR)的线段,所有线段绘制好后包裹而成的“小山丘”的面积就是期望的总体代价。

    来源:《机器学习》周志华
    更多参考:Cost curves: An improved method for visualizing classifier performance, Chris Drummond & Robert C. Holte, 20063.

    Gain/Lift Chart

    提升图(Lift Chart,也称为Lift Curve)和收益图(Gain Chart)是从ROC曲线衍生出来的。

    截图来自Data Mining and Statistics for Decision Making , Stéphane Tufféry

    Lift公式通过贝叶斯推导可以得到

    [egin{aligned} Lift & = frac{P(A igcap B)}{P(A)*P(B)}\ & = frac{P(A|B)*P(B)}{P(A)*P(B)}=frac{P(A|B)}{P(A)}\ & = frac{P(B|A)*P(A)}{P(A)*P(B)}=frac{P(B|A)}{P(B)}\ end{aligned} ]

    公式中的(P(B))可以看做上图中的横轴,也就是每个划分下对应的样本数量占比(P(p>p_ heta))((p)是样本为正例的概率,(p_ heta)是正例概率划分点),(P(A|B))就是每个分组中正例的比例(P(+|p>p_ heta)).

    作Lift曲线时,将样本按预测为正例的概率(P(+))从大到小排序后,按照(P(+))等距划分为N段(取百分位数,一般划分10段),将每1小段当做一个小组,然后计算每个分组中正例的比例,类似如下的表格

    来源

    注:表格数据得到的提升图和收益图

    更多关于LiftGain Curve参考:

    更多参考指标可以参考如下cheat sheet

    source

    参考资料:

    本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。

    转载请注明作者及出处

  • 相关阅读:
    201671010105 2016-2017-2《Java程序设计》第十四周学习心得
    201671010105 2016-2017-2《Java程序设计》第十三周学习心得
    201671010105 2016-2017-2《Java程序设计》第十二周学习心得
    201671010105 2016-2017-2《Java程序设计》第十一周学习心得
    201671010105 2016-2017-2《Java程序设计》第10周学习心得
    201671010105 2016-2017-2《Java程序设计》第九周学习心得
    201671010105 2016-2017-2《Java程序设计》第7周学习心得
    201671010105 2016-2017-2《Java程序设计》第六周学习心得
    201671010105 2016-2017-2《Java程序设计》第五周学习心得
    201671010103 2016-2017-2 《Java程序设计》学习心得
  • 原文地址:https://www.cnblogs.com/dataxon/p/12538524.html
Copyright © 2020-2023  润新知