分布与分组比较

本节目标

用原始点、直方图、ECDF 与箱线图回答“数据长什么样”和“组间差异来自哪里”,并避免只画均值或筛掉失败样本。

为什么均值不够

两版 Agent 的平均延迟都可能是 2 秒,但一版集中在 2 秒,另一版大部分 0.5 秒、少数超时 20 秒。用户体验和事故风险完全不同。至少看样本数、中位数、p95/p99、缺失/超时比例和原始分布。

常用图

  • 直方图:展示区间内数量;结论可能随 bin 宽度改变,应报告分箱。
  • ECDF:横轴为值、纵轴为不超过该值的样本比例,不需要分箱,适合比较延迟。
  • 箱线图:紧凑展示中位数、四分位和候选离群点;不展示多峰细节。
  • 小提琴图:展示密度形状,但对小样本和带宽设置敏感。
  • 抖动点图:样本较少时直接展示每个点,透明度可缓解重叠。

选择时先看样本量与论点:

每组样本量推荐起点原因
n < 3列出每个点分位数和密度几乎没有稳定含义
3 ≤ n < 10dot/strip plot让读者直接看到全部证据
10 ≤ n < 30箱线或小提琴 + 原始点摘要与分布同时保留
n ≥ 30ECDF、箱线、小提琴或直方图仍要报告 n、缺失与分箱/带宽

这不是统计定理式的硬阈值,而是防止小样本被平滑密度或摘要图伪装成稳定分布的工程规则。

分组比较

先明确分母:每个版本是否在同一任务集、同一时间窗口、同一硬件上?总体分布改善可能掩盖安全类任务退化。按版本、任务、语言或工具拆分,但避免无限切片后只报告最有利结果。

右偏的 latency/token/cost 可用对数轴,但必须明确标注,且 0 与负值不能直接取对数。不要删除超时后再声称延迟改善;超时应作为独立状态或纳入上界规则。

比较组间分布前还要确认是否配对。同一任务分别运行 v1/v2 时,画每个任务的差值或配对点通常比两组独立箱线更有信息;若任务集不同,则不能用连线伪造配对。分布相似也不等于业务风险相同,长尾、阈值越界和关键子群需要单独检查。

练习

有 100 次运行,其中 90 次为 1 秒、10 次为 30 秒。计算均值与中位数,并选择两种图揭示长尾。说明“只画箱线图”还可能遗漏什么。

答案核对:均值为 3.9 秒,中位数为 1 秒。ECDF 能直接显示 90% 的运行不超过 1 秒,抖动点图或带明确分箱的直方图能暴露 10 个长尾点;只画箱线可能把 30 秒都压成同一类离群点,仍看不出它们的数量与业务状态。

掌握检查

  • 我能解释均值、中位数、p95 与超时率分别回答什么问题。
  • 我会根据样本量选择直接列点、ECDF、箱线或小提琴,并说明限制。
  • 我能区分配对比较与独立分组,不会连接不对应的观察。
  • 我不会删除失败/超时后只画“完成运行”的漂亮分布。
  • 我能报告直方图分箱、对数轴处理、样本数与筛选规则。

下一步:关系、趋势与时间序列。

参考资料

资料核验日期:2026-07-14;Axes.ecdf 用法按 Matplotlib 3.11.0 文档核对。