报错是这么冒出来的。评测集 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 个百分点,两次抽检结果都落在区间内,汇报口径统一。
容易忽略的是,小样本的点估计很容易被单次抽样带偏,报指标时把区间一起给,别人才知道这个数能信到什么程度。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
