5.6 统计基础(够用版)
上一节:5.5 数据集设计 | 下一节:5.7 噪声底线与回归检测 配套代码:05-experiment-design/06-statistics-basics
一句话结论
只需要三个工具就够用:变异系数(CV,衡量数据稳不稳)、置信区间(衡量估计有多准)、非参数检验(判断两组差异是否真实)。不要用 t 检验——延迟分布不是正态的。
一、用「法庭举证」理解统计
法庭上要证明「被告有罪」,不能只说「看起来像他」。要给出证据强度:
| 法庭 | 统计 |
|---|---|
| 「证据确凿」 | p < 0.01 |
| 「证据充分」 | p < 0.05 |
| 「证据不足」 | p > 0.05 |
| 「无法排除合理怀疑」 | 差异在噪声范围内 |
性能实验也要求「证据强度」。只说「优化后快了」是不够的——要说明这个差异有多大概率不是偶然。
二、工具一:变异系数(CV)——衡量数据稳不稳
CV = 标准差 / 均值
用途:判断测量环境的质量。
| CV | 判断 | 行动 |
|---|---|---|
| < 3% | 环境很干净 | 可以做细微差异的判断 |
| 3% – 5% | 可接受 | 常规结论可信 |
| 5% – 10% | 偏大 | 只能判断较大差异(> 10%) |
| > 10% | 环境有问题 | 先修环境,任何结论都不可信 |
关键理解:CV 是「你的尺子的精度」
如果你的 CV 是 8%,那么:
5% 的「优化」→ 无法确认(在噪声范围内)
30% 的「优化」→ 可以确认
这就是第 7 节「噪声底线」的核心:CV 决定了你能声称的最小差异。
⚠️ CV 不适用于延迟分布?
严格说,CV 假设分布是单峰的。延迟分布是重尾的,所以:
| 用途 | 是否适用 CV |
|---|---|
| 判断多轮之间的波动(每轮一个 P99 值) | ✅ 适用(这是「轮间波动」) |
| 描述单轮内的延迟分布 | ❌ 不适合(用 P50/P99/IQR) |
| 判断均值的稳定性 | ✅ 适用 |
| 判断P99 的稳定性 | ⚠️ 勉强可用(P99 本身是统计量) |
实践做法:用 CV 衡量「多轮重复实验之间的波动」——这是最常用、最有价值的用法。
三、工具二:置信区间——衡量估计有多准
问题:你测了 5 轮,P99 中位数是 95 ms。但真实值可能是 90,也可能是 105。
置信区间回答:「如果我重复这个实验很多次,95% 的情况下结果会落在哪个范围」。
方法一:基于标准误(适用于轮间均值)
95% 置信区间 ≈ 均值 ± 1.96 × (标准差 / √n)
例子:5 轮 P99 = 93, 96, 94, 95, 95
均值 = 94.6
标准差 = 1.14
n = 5
标准误 = 1.14 / √5 = 0.51
置信区间 = 94.6 ± 1.96 × 0.51 = 94.6 ± 1.0 = [93.6, 95.6]
解读:「真实 P99 大概率在 93.6–95.6 之间。」
方法二:Bootstrap 重采样(更稳健,推荐)
不假设分布形态,直接从样本中反复重采样:
① 从 5 个观测值中有放回地抽 5 个(可能有重复)
② 计算这 5 个的中位数
③ 重复 10000 次,得到 10000 个中位数
④ 取这 10000 个的第 2.5% 和第 97.5% 分位,就是 95% 置信区间
优点:不需要假设正态分布——对延迟这种重尾分布特别合适。
置信区间怎么用
| 场景 | 用法 |
|---|---|
| 优化前后对比 | 如果两个置信区间不重叠,差异很可能是真实的 |
| 判断是否达标 | 如果置信区间上限 < SLO 阈值,可以认为达标 |
| 判断样本量是否足够 | 置信区间太宽 → 需要更多轮次 |
注意:「置信区间不重叠」是充分不必要条件——即使重叠,差异也可能是真的(用第 6 节的方法二判断)。反之,不重叠基本可以认为有差异。
四、工具三:非参数检验——判断差异是否真实
为什么不能用 t 检验
t 检验假设数据服从正态分布。但延迟分布是重尾的:
t 检验的假设:数据像钟形曲线一样对称分布
延迟的真实形态:大部分很小,少数极大(长尾)
用 t 检验的后果:p 值不可信,可能得出错误的显著性结论
而且「均值 ± 标准差」在重尾分布下也没有解释力——算出来的「均值 + 3 个标准差」甚至可能是负数。
该用什么:Mann-Whitney U 检验
它的原理:把所有观测值混合排序,看两组的值是否交错在一起。
组 A:93, 94, 95, 96, 95
组 B:70, 72, 71, 73, 71
排序后:
B B B B B | A A A A A ← 完全不交错 → 差异显著
组 A:93, 94, 95, 96, 95
组 C:94, 93, 96, 95, 94
排序后:
93(A/C) 94(A/C) ... ← 完全交错 → 差异不显著
判断标准:
| p 值 | 结论 |
|---|---|
| p < 0.01 | 差异高度显著 |
| p < 0.05 | 差异显著(常用标准) |
| p ≥ 0.05 | 无法确认差异(不是"没有差异",而是"证据不足") |
⚠️ 统计显著 ≠ 值得做
统计显著:差异不是偶然的
值得做:差异大到用户能感知,且收益超过成本
例子:优化后 P99 从 210 ms 降到 205 ms,p = 0.03(统计显著)。
但:用户感知不到 5 ms 的差别,而你为此引入了一层缓存(带来一致性问题)。
所以判断标准有两层:
① 统计显著(p < 0.05)
② 实际有意义(差异 > 用户可感知阈值,且 > 噪声底线)
五、三个工具的组合使用流程
① 先算 CV
├─ CV > 10% → 停下,先修环境(第 4 节)
└─ CV < 10% → 继续
↓
② 算置信区间
└─ 区间太宽 → 增加轮次
↓
③ 做 Mann-Whitney U 检验
├─ p ≥ 0.05 → 「差异不显著」→ 结论:无法确认优化有效
└─ p < 0.05 → 继续
↓
④ 判断实际意义
├─ 差异 < 噪声底线 → 「统计显著但实际无意义」
└─ 差异 > 噪声底线 且 用户可感知 → 「优化有效,建议采纳」
六、样本量:需要多少轮
经验规则:
| 目标 | 最小样本量 |
|---|---|
| 看波动范围 | 3 |
| Mann-Whitney U 检验(勉强) | 4–5 |
| 置信区间较窄 | 8–10 |
| 检测 5% 的差异 | 20+ |
判断方法:用置信区间的宽度来判断。
如果 5 轮后的置信区间是 [70, 120](宽 50)
→ 太宽,无法判断 10% 的差异
→ 需要更多轮次
如果 10 轮后是 [85, 95](宽 10)
→ 可以判断 10% 以上的差异
成本的权衡:每增加一轮都要重启服务、重新预热、重新压测。如果 CV 本身就大,增加轮数的收益不如先改善环境。
七、本节小结
- 三个工具够用:CV(稳定性)、置信区间(估计精度)、Mann-Whitney U(差异显著性)。
- CV 衡量「多轮之间」的波动——它是你的"尺子精度",决定你能声称的最小差异。
- 置信区间用 Bootstrap 更稳健(不假设分布形态),比「均值 ± 1.96×标准误」更适合重尾分布。
- 绝对不要用 t 检验——延迟不是正态分布。用 Mann-Whitney U。
- 统计显著 ≠ 值得做:还要看差异是否大于噪声底线、是否被用户感知。
- 样本量用置信区间宽度来判断是否足够,而不是拍一个数字。
八、自测
- 你测了 5 轮,P99 分别是 93、96、94、95、95 ms。请算出 CV,并判断这个环境的质量。
- 优化前后各测了 5 轮:优化前 93–96 ms,优化后 70–73 ms。请说明你会用什么方法判断差异是否显著,以及为什么不用 t 检验。
- 一个优化让 P99 从 210 ms 降到 205 ms,Mann-Whitney U 检验 p = 0.02。请说明「统计显著」和「值得做」的区别,并给出你的建议。
- 均值 = (93+96+94+95+95)/5 = 94.6;标准差 ≈ 1.14;CV = 1.14/94.6 ≈ 1.2%。判断:CV < 3%,说明这个环境非常干净,可以做细微差异的判断(例如 3%–5% 的变化都能可信地识别)。但要注意:① 这只代表「轮间波动」小,不代表这一轮内部的延迟分布也很集中;② 5 轮的样本量仍然偏少,最好用置信区间确认;③ 要确认这 5 轮之间除了代码没有其他变量变化。
- 用 Mann-Whitney U 检验(或 Bootstrap 置信区间)。为什么不用 t 检验:① t 检验假设数据服从正态分布,而延迟分布是重尾的(大部分很小、少数极大);② 只有 5 个样本时,正态性假设完全无法验证;③ t 检验对异常值敏感,一个偶发尖刺就能让结论翻转。这个例子的预期结果:两组值完全不交错(优化前最小 93 > 优化后最大 73),Mann-Whitney U 检验会给出非常小的 p 值(p < 0.01),差异显著。But:还要补一句——① 需要确认两组实验的其他条件一致(第 1 节);② 差异 24% 是否大于噪声底线(第 7 节);③ 是否是「用户可感知」的改善(200ms → 150ms 级别的差异用户能感知)。
- 统计显著(p = 0.02 < 0.05)意味着「这 5 ms 的差异不太可能是偶然波动」。值得做要考虑三件事:① 用户可感知性——5 ms 在 200 ms 级别上用户完全感知不到;② 噪声底线——如果你的环境 CV 是 2%,那 5 ms/210 ms = 2.4% 可能刚好在噪声边缘;③ 收益 vs 成本——如果这个优化引入了一层缓存(带来一致性风险和维护成本),那就不值得。建议:不采纳这个优化(或者推迟),把工程时间投入到「差异更大的瓶颈」上。但要记录在案:如果将来 P99 逼近 SLO 违约边缘,这 5 ms 可能变得有意义。一句话:统计显著是必要条件,不是充分条件。