在机器学习中,模型评估是非常重要的一环,没有评估就没有优化可言。我们一般熟悉的准确率、召回率、F1值、均方误差等都是评估指标,AUC是其中最常见且好用的指标之一。
AUC 是什么?
在机器学习中,常用AUC来评估二分类模型的性能。AUC全称曲线下面积,曲线指的是ROC曲线。ROC曲线最早用于第二次世界大战的雷达工程中,后用于医学、机器学习等领域。
对于二分类问题,模型会对每个样本预测一个得分s或者概率p。然后选择一个阈值t
,将得分s>t的样本划分为正,将s<t的样本划分为负,因此可以将样本分为如下四类:
- TP(正正例)将正样本预测为正的数目
- FP(假正例)将负样本预测为正的数目
- FN(假负例)将正样本预测为负的数目
- TN(真负例)将负样本预测为负的数目
预测为正 | 预测为负 | |
---|---|---|
正样本 | TP | FN |
负样本 | FP | TN |
我们注意到,当我们选取不同的t时,上面四个值是会发生变化的。因此我们定义真正率TPR和假正率FPR为:
TPR
=
TP
TP
+
FN
FPR
=
FP
FP
+
TN
\text{TPR} = \frac{\text{TP}}{\text{TP} + \text{FN}}\\ \text{FPR} = \frac{\text{FP}}{\text{FP} + \text{TN}}
TPR=TP+FNTPFPR=FP+TNFP
TPR:分母是正样本数;分子是得分>t里面的正样本的数目
FPR:分母是负样本数;分子是得分>t里面的负样本的数目
因此,如果定义 N + ( t ) , N − ( t ) N_+(t), N_-(t) N+(t),N−(t)分别为得分大于t的样本中正负样本数目, N + , N − 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_-}
TPR(t)=N+N+(t)FPR(t)=N−N−(t)
随着阈值t的变化,TPR和FPR在坐标图上形成一条曲线,这条曲线就是ROC曲线。 显然,如果模型是随机的,模型得分对正负样本没有区分性,那么得分大于t的样本中,正负样本比例和总体的正负样本比例应该基本一致。 也就是说
N
+
(
t
)
N
−
(
t
)
=
N
+
N
−
\frac{N_+(t)}{N_-(t)} = \frac{N_+}{N_-}
N−(t)N+(t)=N−N+
结合上面的式子可知TPR和FPR相等,对应的ROC曲线是一条直线!
反之,如果模型的区分性非常理想,也就是说正负样本的得分可以完全分开,所有的正样本都比负样本得分高,此时ROC曲线表现为「 字形。 因为正例得分都比负例搞,所以要么TPR=0要么FPR=0!
实际的模型的ROC曲线则是一条上凸的曲线,介于随机和理想的ROC曲线之间。而ROC曲线下的面积,即为AUC!
AUC = ∫ t = ∞ − ∞ y ( t ) d x ( t ) \text{AUC} = \int_{t=\infty}^{-\infty} y(t) d x(t) AUC=∫t=∞−∞y(t)dx(t)
AUC的概率解释
如何用一句话解释AUC:AUC可以看做是随机从样本中选取一对正负样本,其中正样本的得分大于负样本的概率。因此,AUC常常被用来作为模型排序好坏的指标,AUC越大说明排在前面的正样本概率越大。
这个结论很容易证明,考虑随机取得这对正负样本中,负样本得分在[t, t+\Delta t]之间的概率为
P
(
t
≤
s
−
<
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)
P(t≤s−<t+Δt)=P(s−>t)−P(s−>t+Δt)=N−N−(t)−N−(t+Δt)=x(t)−x(t+Δt)=−Δx(t)
如果Δt很小,那么该正样本得分大于该负样本的概率为
P
(
s
+
>
s
−
∣
t
≤
s
−
<
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−∣t≤s−<t+Δt)≈P(s+>t)=N+N+(t)=y(t)
所以,
P
(
s
+
>
s
−
)
=
∑
P
(
t
≤
s
−
<
t
+
Δ
t
)
P
(
s
+
>
s
−
∣
t
≤
s
−
<
t
+
Δ
t
)
=
−
∑
y
(
t
)
Δ
x
(
t
)
=
−
∫
t
=
−
∞
∞
y
(
t
)
d
x
(
t
)
=
∫
t
=
∞
−
∞
y
(
t
)
d
x
(
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)
P(s+>s−)=∑P(t≤s−<t+Δt)P(s+>s−∣t≤s−<t+Δt)=−∑y(t)Δx(t)=−∫t=−∞∞y(t)dx(t)=∫t=∞−∞y(t)dx(t)
注意积分区间,
t
=
−
∞
t=-\infty
t=−∞对应ROC图像最右上角的点,而t=∞对应ROC图像最左下角的点。所以,计算面积是
∫
t
=
∞
−
∞
\int_{t=\infty}^{-\infty}
∫t=∞−∞。 可以看出,积分项里面实际上是这样一个事件的概率:随机取一对正负样本,负样本得分为t且正样本大于t! 因此,对这个概率微元积分就可以到正样本得分大于负样本的概率!