背景:

已知一个二分类预测模型和一个用于预测的样本集合 \(\mathbb{S}\),将模型预测结果为阳性的子集记为 \(\mathbb{A}\)。为评价该模型的预测能力,至少需要计算出它在这个样本集 \(\mathbb{S}\) 上的召回率 r 精确率 p(具体定义和更多评价指标参见:二分类模型常用评价指标)。

但是,由于仅知道 \(\mathbb{S}\) 中阳性样本的规模为 \(N\),而并不知道具体哪些是阳性样本。所以,在样本集 \(\mathbb{S}\) 中随机抽查小规模样本后,人工检验出了 \(n\) 个阳性样本,而在这 \(n\) 个阳性样本中有 \(k\) 个在预测结果为阳性的子集 \(\mathbb{A}\) 之中。

image-20230521185841330

问题:求召回率和精确率95%的置信区间。

一、精确计算方法

1.1 假设

定义:无特别说明,下面以字母代表集合,为方便书写,在参与计算时,字母也代表集合的规模。

假设:集合 \(\mathbb{C}\) 在集合 \(\mathbb{B}\) 中均匀分布(这由题意中的随机抽取小规模样本从式检验来保证),因此,他们在与集合 \(\mathbb{A}\) 取交集之后的比例不变,也即以下等式成立: \[ \dfrac{|A\cap C|}{|A\cap B|}=\dfrac{|C|}{|B|} \]

即:

\[ {\color{blue}|A\cap B|=\dfrac{|B|}{|C|}\cdot |A\cap C|} \]

1.2 计算公式

在计算召回率和精确率的置信区间时,仅关注以下公式中的蓝色部分即可,而黑色部分可以用于参数估计。

召回率为:

\[ {\color{blue}r=\dfrac{|A\cap B|}{|B|}}\xrightarrow{假设条件}\dfrac{|A\cap C|}{|C|} \]

精确率为:

\[ {\color{blue}p=\dfrac{|A\cap B|}{|A|}} \xrightarrow{假设条件} \underbrace{\dfrac{|A\cap C|}{|A|}}_\text{阳性样本子集上的精确率}\cdot\underbrace{\dfrac{|B|}{|C|}}_\text{放大系数} =\dfrac{|A\cap C|}{|C|}\cdot\dfrac{|B|}{|A|}=r\cdot\dfrac{|B|}{|A|} \]

1.3 \(A\cap B\) 的分布律

从以上两公式,可以看出问题的关键是:在已知 \(|\mathbb{A}\cap \mathbb{C}|=k\) 的条件下计算 \(|\mathbb{A}\cap \mathbb{B}|=x\) 的置信区间,即要计算以下条件概率,参考《超几何分布与相关变体》中的第二章有:

\[ P\{|A\cap B|=x \;|\; |A\cap C|=k\}=\dfrac{\binom{x}{k}\binom{N-x}{n-k}}{\binom{N+1}{n+1}} \]

其中,\(|\mathbb{B}|=N\)\(|\mathbb{C}|=n\)\(|\mathbb{A}|=M\)

从两侧分别截掉 2.5% 的 \(x\) 取值的极端情况后,即得到了 \(\mathbb{A}\cap \mathbb{B}\) 两侧概率相等的 95% 的置信区间(当在某一端分布律的和不足 2.5% 时,由另一侧补足,此时两侧概率不再相等)。

二、近似计算方法

当样本量足够大时,不放回抽样可近似为放回抽样,因此,可用以下两种方法计算总体召回率 \(r:=\mathbb{A}\cap \mathbb{B}\div \mathbb{B}\) 的分布和置信区间,进而计算出 \(\mathbb{A}\cap \mathbb{B}\) 的置信区间,再计算精确率 \(p:=\mathbb{A}\cap \mathbb{B}\div \mathbb{A}\) 的置信区间。

2.1 用正态分布近似计算

参考《概率论与数理统计》盛骤,高等教育出版社,第四版,P168

\(\overline{X}\)\(|\mathbb{A}\cap\mathbb{C}|\)\(|\mathbb{C}|\) 中的占比,由中心极限定理可得:

\[ \dfrac{n\overline{X}-nr}{\sqrt{nr(1-r)}}\sim N(0,1) \]

则召回率 \(r\) 的置信水平为 \(1-\alpha\) 的置信区间为:

\[ (\frac{-b-\sqrt{b^2-4ac}}{2a},\frac{-b+\sqrt{b^2-4ac}}{2a}) \]

其中,\(a=n+Z_{\alpha/2}^2,\;b=-(2n\overline{X}+Z_{\alpha/2}^2),\;c=n\overline{X}^2\)

所以 \(\mathbb{A}\cap \mathbb{B}\)\(1-\alpha\) 的置信区间为:

\[ (\frac{-b-\sqrt{b^2-4ac}}{2a}\times|\mathbb{B}|,\frac{-b+\sqrt{b^2-4ac}}{2a}\times|\mathbb{B}|) \]

所以精确率 \(p:=\mathbb{A}\cap \mathbb{B}\div \mathbb{A}\)\(1-\alpha\) 的置信区间为:

\[ (\frac{-b-\sqrt{b^2-4ac}}{2a}\times\frac{|\mathbb{B}|}{|\mathbb{A}|},\frac{-b+\sqrt{b^2-4ac}}{2a}\times\frac{|\mathbb{B}|}{|\mathbb{A}|}). \]

2.2 用 Beta 分布近似计算

参考《高等数理统计》茆诗松,高等教育出版社,第二版,P346

\(x\) 表示 \(|\mathbb{A}\cap\mathbb{C}|\) 的数量,\(n\) 表示 \(|\mathbb{C}|\) 的数量,由贝叶斯公式,

\[ r\sim Be(x+1,n-x+1). \]

所以召回率 \(r\) 的置信水平为 \(1-\alpha\) 的置信区间为:

\[ (Be_{1-\alpha/2},Be_{\alpha/2}) \]

其中 \(Be_{\alpha/2}\) 是参数为 \(x+1,\;n-x+1\) 的 Beta 分布的上 \(\alpha/2\) 分位点,即 \(P(x>Be_{\alpha/2})=\alpha/2\)\(P(x\leqslant Be_{1-\alpha/2})=\alpha/2\)

精确率 \(p:=|\mathbb{A}\cap \mathbb{B}|\div |\mathbb{A}|\)\(1-\alpha\) 的置信区间为:

\[ (Be_{1-\alpha/2}\times\frac{|\mathbb{B}|}{|\mathbb{A}|},Be_{\alpha/2}\times\frac{|\mathbb{B}|}{|\mathbb{A}|}). \]

三、不同方法的比较

(待补充)

四、Mathematica代码

4.1 用精确方法计算召回率和精确率的置信区间(待修正)

定义

1
2
3
4
5
6
7
8
(*定义*)
cA=10000;(*A:所有模型预测为阳性的样本*)
cN=1000;(*B:所有阳性样本*)
cn=500;(*C:人工确认的阳性样本*)
ck=400;(*A\[Intersection]C:模型预测为阳性的样本与人工确认的阳性样本的交集*)

(*A\[Intersection]B的分布律:模型预测为阳性的样本与所有阳性样本的交集*)
pdf[cN_,cn_,ck_,x_]:=Binomial[x,ck]Binomial[cN-x,cn-ck]/Binomial[cN+1,cn+1]

计算:均值 center,置信区间 left, righ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
(*计算:均值 center,置信区间 left, right*)
(*方法:从中间向两侧累加*)

c=0.95;(*置信水平*)
center=Round[cN*ck/cn];(*均值*)
left=Block[{sum=0,ex=pdf[cN,cn,ck,center]},
Do[
If[sum>=(c-ex)/2,Return[x]];
sum=sum+pdf[cN,cn,ck,x]
,{x,center-1,0,-1}]];
right=Block[{sum=0,ex=pdf[cN,cn,ck,center]},
Do[
If[sum>=(c-ex)/2,Return[x]];
sum=sum+pdf[cN,cn,ck,x]
,{x,center+1,cN,1}]];

Grid[{
{"指标","左置信区间","均值","右置信区间"},

Flatten[{"召回率",PercentForm[#,{4,2},NumberPadding->{" ","0"}]&/@({left,center,right}/cN//N)}],
Flatten[{"精确率",PercentForm[#,{4,2},NumberPadding->{" ","0"}]&/@({left,center,right}/cA//N)}],
Flatten[{"A\[Intersection]B",{left,center,right}}]
},
Alignment->Center,
ItemSize->6,
Frame->All]

绘图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
(*绘图*)
data=Table[{x,pdf[cN,cn,ck,x]},{x,0,cN}];

ListPlot[{
data[[;;left+1]],
data[[left+1;;right+1]],
data[[right+2;;]]
},Epilog->Line[{ {center,0},{center,1}}],
Filling->Bottom,PlotStyle->{Gray,Blue,Gray},
PlotRange->{All,{0,1.05Max[data[[;;,2]]]}},
PlotLabel->Column[{
Style["A \[Intersection] B 的分布律",16],
Style["模型预测为阳性的样本与所有阳性样本的交集",12]
},Alignment->Center]]

4.2 用正态分布近似计算召回率和精确率的置信区间

通常要求抽样数量至少要大于50(即代码中的nn)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(*用正态分布近似计算召回率和精确率的置信区间*)
cc=0.95;(*置信度*)
nn=100;(*抽样数量:C*)
ns=80;(*抽样中目标数量:A∩C*)
nA=2000;(*模型预测为阳性的样本量:C*)
nB=500;(*阳性样本总量*)

(*中间计算*)
z=InverseCDF[NormalDistribution[0,1],1-(1-cc)/2];
a=nn+z^2;
b=-(2 ns+z^2);
c=nn (ns/nn)^2;

(*召回率*)
r={(-b-Sqrt[b^2-4a c])/(2a),N[ns/nn],(-b+Sqrt[b^2-4a c])/(2a)};
(*精确率*)
p=r nB/nA;
(*总阳性样本量置信区间*)
nM=r nB;
(*输出*)
Grid[{ {"指标","左置信区间","均值","右置信区间"},Flatten[{"召回率",PercentForm[#,{8,2},NumberPadding->{" ","0"}]&/@r}],Flatten[{"精确率",PercentForm[#,{8,2},NumberPadding->{" ","0"}]&/@p}],Flatten[{"A\[Intersection]B",NumberForm[#,{8,2},NumberPadding->{" ","0"}]&/@nM}]},Alignment->Center,ItemSize->8,Frame->All]

4.3 用Beta分布近似计算召回率和精确率的置信区间

通常要求抽样数量至少要大于50(即代码中的nn)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(*用Beta分布近似计算召回率和精确率的置信区间*)
cc=0.95;(*置信度*)
nn=100;(*抽样数量:C*)
ns=80;(*抽样中目标数量:A∩C*)
nA=2000;(*模型预测为阳性的样本量:C*)
nB=500;(*阳性样本总量*)

(*召回率*)
r={InverseCDF[BetaDistribution[ns+1,nn-ns+1],0.025],N[ns/nn],InverseCDF[BetaDistribution[ns+1,nn-ns+1],0.975]};
(*精确率*)
p=r nB/nA;
(*总阳性样本量置信区间*)
nM=r nB;
(*输出*)
Grid[{ {"指标","左置信区间","均值","右置信区间"},Flatten[{"召回率",PercentForm[#,{8,2},NumberPadding->{" ","0"}]&/@r}],Flatten[{"精确率",PercentForm[#,{8,2},NumberPadding->{" ","0"}]&/@p}],Flatten[{"A\[Intersection]B",NumberForm[#,{8,2},NumberPadding->{" ","0"}]&/@nM}]},Alignment->Center,ItemSize->8,Frame->All]

本站总访问量