报错是这么冒出来的。评测集 200 条,准确率 78%,老板问能不能上线,我抽 20 条复核,两次结果一次 85% 一次 70%,汇报时被问到底信哪个数。

中间走过弯路,把「只报点估计不报区间」当成主因,改完现象没变。

排查方向其实有限,先把可能性排一排。样本量小,二项分布的方差本身就大。另一种情况是抽检不是分层抽样,难题比例偏离整体。

还有一种情况,两次抽检的随机种子不同但没有记录。

上来先用 bootstrap 给 200 条算一次置信区间

python -c "import numpy as np;x=np.random.binomial(1,0.78,200);print(x.mean().round(3),x.std().round(3))"

随后按难度分层后再抽 20 条

python -c "import pandas as pd;d=pd.read_csv('eval.csv');print(d.groupby('level').size())"

接着把区间和样本量一起写进报告

python -c "import math;p=0.78;n=200;print(round(1.96*math.sqrt(p*(1-p)/n),3))"

末了扩充到 600 条看区间是否收窄

python -c "print(round(1.96*math.sqrt(0.78*0.22/600),3))"

恢复的判定其实很直接。600 条样本下准确率 76.5%,95% 置信区间是正负 3.4 个百分点,两次抽检结果都落在区间内,汇报口径统一。

容易忽略的是,小样本的点估计很容易被单次抽样带偏,报指标时把区间一起给,别人才知道这个数能信到什么程度。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189