百面机器学习 #2 模型评估:精确率与召回率,假阳性与真阳性率,PR曲线和ROC曲线

predict Positive predict Negative
real Positive TP FN num of real positive=npn_p
real Negative FP TN num of real negative=nnn_n
predicted num of postitive predicted num of negative
  • 精确率(查准率) = 分类正确的正样本个数占分类器判定为正样本的样本个数的比例。
    p=TPTP+FP p=\frac{TP}{TP+FP}

  • 召回率(查全率) = 分类正确的正样本个数占真正的正样本个数的比例。
    r=TPTP+FN=TPnp r=\frac{TP}{TP+FN}= \frac{TP}{n_p}

Precision值和Recall值是既矛盾又统一的两个指标,为了提高Precision值,分类器需要尽量在“更有把握”时才把样本预测为正样本,但此时往往会因为过于保守而漏掉很多“没有把握”的正样本,导致Recall值降低。

1. P-R(Precision-Recall)曲线

  • P-R曲线的横轴是召回率R,纵轴是精确率P

  • P-R曲线上的一个点代表着,在某一阈值下,模型将大于该阈值的结果判定为正样本,小于该阈值的结果判定为负样本(即高分为正样本,相当于排序,得分前几名为正样本,或者说是我们想要的搜索结果),此时返回结果对应的召回率和精确率。

    左边曲线起始附近代表当阈值最大时模型的精确率和召回率。越往右表示阈值越小。

    • 即开始阈值很大,判定结果可能几乎没有正样本,即无论正负都判定为负,TP0,FP=0,TNnn,FNnpTP\rightarrow 0, FP=0,TN\rightarrow n_n,FN\rightarrow n_pr=TPTP+FN0,p=TPTP+FP1r=\frac{TP}{TP+FN} \rightarrow 0,p=\frac{TP}{TP+FP}\rightarrow 1,所以召回率趋近于0,而准确率因为判定为正样本的个数为0、正确判断为正样本的个数也为0,或者说对于正样本的确定“锱铢必较”,只有预测数值特别高的才认为是正样本,这样的高要求得到的正样本是真的正样本的概率就会趋近于1,所以准确率趋近于1;

    • 而当曲线往右走,阈值很小,即对于正样本的判定要求变得很松,几乎将所有的判定为正样本,TP=np,FPnn,TN0,FN=0TP= n_p, FP\rightarrow n_n,TN\rightarrow 0,FN=0r=TPTP+FN=1,p=TPTP+FPnPnp+nnr=\frac{TP}{TP+FN} =1,p=\frac{TP}{TP+FP}\rightarrow \frac{n_P}{n_p+n_n}则此时就可能将所有的真正样本都挖掘出来,召回率趋近于1;而由于所有样本都判定为正样本,准确率则相当于是原始样本中真实正样本的比例。

百面机器学习 #2 模型评估:精确率与召回率,假阳性与真阳性率,PR曲线和ROC曲线

只用某个点对应的精确率和召回率是不能全面地衡量模型的性能,只有通过P-R曲线的整体表现,才能够对模型进行更为全面的评估。

F1 score

精准率和召回率的调和平均值
F1=2×precision×recallprecision+recall F1=\frac{2\times precision\times recall}{precision+recall}

2. 平方根误差的局限性

RMSE经常被用来衡量回归模型的好坏
RMSE=i=1n(yiy^i)2n RMSE = \sqrt{\frac{\sum\limits_{i=1}^n(y_i-\hat y_i)^2}{n}}
一般情况下,RMSE能够很好地反映回归模型预测值与真实值的偏离程度。但在实际问题中,如果存在个别偏离程度非常大的离群点(Outlier)时,即使离群点数量非常少,也会让RMSE指标变得很差。

离群点:

  • 认定这些离群点是“噪声点”的话,就需要在数据预处理的阶段把这些噪声点过滤掉

  • 如果不认为这些离群点是“噪声点”的话,就需要进一步提高模型的预测能力,将离群点产生的机制建模进去

  • 找一个更合适的指标来评估该模型。关于评估指标,其实是存在比RMSE的鲁棒性更好的指标,比如平均绝对百分比误差(Mean Absolute Percent Error,MAPE)
    MAPE=i=1nyiy^iyi×100n MAPE=\sum_{i=1}^n\left|\frac{y_i-\hat y_i}{y_i}\right|\times\frac{100}{n}
    MAPE相当于把每个点的误差进行了归一化,降低了个别离群点带来的绝对误差的影响。

3. ROC曲线

Receiver Operating Characteristic Curve/ 受试者工作特征曲线”:相比precision、recall、F1 score、P-R曲线等,ROC曲线则有很多优点,经常作为评估二值分类器最重要的指标之一。

predict Positive predict Negative
real Positive TP FN num of real positive=npn_p
real Negative FP TN num of real negative=nnn_n
predicted num of postitive predicted num of negative
  • 横坐标 = 假阳性率(False Positive Rate,FPR):真的负样本中被分类器预测为正样本的比例。
    FPR=FPTN+FP=FPnn FPR=\frac{FP}{TN+FP}=\frac{FP}{n_n}

    所有敌机来袭的事件中,每个雷达兵准确预报的概率

  • 纵坐标 = 真阳性率(True Positive Rate,TPR):真的正样本中被分类器预测为正样本的比例。(=召回率)
    TPR=TPTP+FN=TPnp=recall TPR=\frac{TP}{TP+FN} =\frac{TP}{n_p}=recall

    所有非敌机来袭信号中,雷达兵预报错误成有敌机的概率

ROC曲线绘制

  • ROC曲线是通过不断移动分类器的“截断点”来生成曲线上的一组关键点的。“截断点”指的就是区分正负预测结果的阈值。

    左边曲线起始附近代表当阈值最大,越往右表示阈值越小。

    • 即开始阈值很大,判定结果可能几乎没有正样本,即无论正负都判定为负,TP0,FP=0,TNnn,FNnpTP\rightarrow 0, FP=0,TN\rightarrow n_n,FN\rightarrow n_pFPR=FPTN+FP=0,TPR=TPTP+FN0FPR=\frac{FP}{TN+FP}=0,TPR=\frac{TP}{TP+FN}\rightarrow 0,即此时真、假阳性率都趋近0.

    • 而当曲线往右走,阈值很小,即对于正样本的判定要求变得很松,几乎将所有的判定为正样本,TP=np,FPnn,TN0,FN=0TP= n_p, FP\rightarrow n_n,TN\rightarrow 0,FN=0FPR=FPTN+FP1,TPR=TPTP+FN=1FPR=\frac{FP}{TN+FP}\rightarrow 1,TPR=\frac{TP}{TP+FN}=1,即此时真实负样本中被分为阳性的比例为1,真实负样本中被分为阳性的比例也为1.

百面机器学习 #2 模型评估:精确率与召回率,假阳性与真阳性率,PR曲线和ROC曲线

  • 还有一种更直观地绘制ROC曲线的方法

    • 首先,根据样本标签统计出正负样本的数量,假设正样本数量为npn_p,负样本数量为nnn_n
    • 接下来,把横轴的刻度间隔设置为1/nn1/n_n,纵轴的刻度间隔设置为1/np1/n_p
    • 再根据模型输出的预测概率对样本进行排序(从高到低,相当于阈值从最高开始往下走,即是对应曲线最左端开始);依次遍历样本,同时从零点开始绘制ROC曲线
      • 每遇到一个正样本就沿纵轴方向绘制一个刻度间隔的曲线
      • 每遇到一个负样本就沿横轴方向绘制一个刻度间隔的曲线
      • 直到遍历完所有样本,曲线最终停在(1,1)这个点,表示遍历了所有npn_p个正样本和所有nnn_n个负样本,整个ROC曲线绘制完成
  • 相比P-R曲线,ROC曲线有一个特点,当正负样本的分布发生变化时,ROC曲线的形状能够基本保持不变,而P-R曲线的形状一般会发生较剧烈的变化。所以ROC曲线能够尽量降低不同测试集带来的干扰,更加客观地衡量模型本身的性能

    ROC曲线的适用场景更多,被广泛用于排序、推荐、广告等正负样本数量往往很不均衡领域。

4. AUC

  • AUC((Area Under ROC Curve)指的是ROC曲线下的面积大小,该值能够量化地反映基于ROC曲线衡量出的模型性能。

  • 由于ROC曲线一般都处于y=xy=x这条直线的上方(如果不是的话,只要把模型预测的概率反转成1−p就可以得到一个更好的分类器),所以AUC的取值一般在0.5~1之间。

    横纵坐标都表示预测为阳性(正例),而我们希望真实正样本被预测为阳性的概率,高于真实负样本被预测为阳性的概率,所以大部分ROC曲线y>xy>x.

  • AUC越大,说明分类器越可能把真正的正样本排在前面,分类性能越好。

  • AUC常常被用来作为模型排序好坏的指标,原因在于AUC可以看做随机从正负样本中选取一对正负样本,其中正样本的得分大于负样本的概率 !

Ref:

链接:AUC的证明

对于真正例率TPR,分子是得分>t里面正样本的数目,分母是总的正样本数目。 而对于假正例率FPR,分子是得分>t里面负样本的数目,分母是总的负样本数目。 因此,如果定义N+(t),N−(t)N+(t),N−(t)分别为得分大于t的样本中正负样本数目,N+,N−N+,N−为总的正负样本数目, 那么TPR和FPR可以表达为阈值t的函数
TPR(t)=N+(t)N+FPR(t)=N(t)N \text{TPR}(t) = \frac{N_+(t)}{N_+} \\ \text{FPR}(t) = \frac{N_-(t)}{N_-}
考虑随机取得这对正负样本中,负样本得分在[t,t+Δt][t,t+Δt]之间的概率为
P(ts<t+Δt)=P(s>t)P(s>t+Δt)=N(t)N(t+Δt)N=x(t)x(t+Δt)=Δx(t) P(t \le s_- < t+\Delta t) \\ = P( s_- \gt t) - P(s_- > t+\Delta t) \\ = \frac{N_-(t) - N_-(t+\Delta t)}{N_-} \\ = x(t) - x(t +\Delta t) = - \Delta x(t)
如果Δt\Delta t很小,那么该正样本得分大于该负样本的概率为
P(s+>sts<t+Δt)P(s+>t)=N+(t)N+=y(t) P(s_+ > s_- | t \le s_- < t+\Delta t) \\ \approx P(s_+ > t) = \frac{N_+(t)}{N_+} = y(t)
所以
P(s+>s)=P(ts<t+Δt)P(s+>sts<t+Δt)=y(t)Δx(t)=t=y(t)dx(t)=t=y(t)dx(t) P(s_+ > s_- ) \\ = \sum P(t \le s_- < t+\Delta t) P(s_+ > s_- | t \le s_- < t+\Delta t) \\ = -\sum y(t) \Delta x(t) \\ = -\int_{t=-\infty}^{\infty} y(t) d x(t) \\ = \int_{t=\infty}^{-\infty} y(t) d x(t)
注意积分区间,t=t=−\infty对应ROC图像最右上角的点,而t=t=\infty对应ROC图像最左下角的点。所以,计算面积是t=\int _{t=\infty}^{-\infty}。 可以看出,积分项里面实际上是这样一个事件的概率:随机取一对正负样本,负样本得分为t且正样本得分大于t! 因此,对这个概率微元积分就可以到正样本得分大于负样本的概率!