上一篇讲的是“平均单价”的两种算法:把单价按行平均得 2537.5 元,用总收入除以总件数得 1478.6 元。那个坑出在“平均”里藏着一次没说出口的除法,按谁除没讲清楚。

这一篇要说的坑更隐蔽:即使分母明确、算法毫无争议,一个平均数照样可能把你带偏。因为平均数有一个天生的弱点——它可能站在一个没有任何人站的位置上。

五个客户,一个平均数

假设这个月只有五个客户下单,消费金额是:

20 元、30 元、40 元、50 元、3000 元。

平均数是 20+30+40+50+30005=31405=628\frac{20+30+40+50+3000}{5}=\frac{3140}{5}=628 元。

现在换一个同样有用的数:中位数。做法是把数据从小到大排好,取站在正中间的那个值;如果个数是偶数,就取中间两个数的平均值。

五个数排成一行,正中间是第三个,也就是 40 元。

628 元和 40 元,差了 15 倍。哪一个更能描述“典型的一个客户花了多少钱”?平均数 628 元这个数,五个客户里没有任何一个人是它。而中位数 40 元的意思是:有 2 个客户花得比它少,2 个比它多——这句话按定义一定成立。

平均数为什么这么容易被拉走

平均数等于总量除以个数。它的位置像一个杠杆的支点:每个数都按“自己离中心有多远”对支点施加拉力,离得越远,拉力越大

所以只要有一个数跑得足够远,它一个人就能把平均数拽到别处,跟其他数有多少个无关。把上面那个 3000 元改成 30000 元:

20+30+40+50+300005=301405=6028 元\frac{20+30+40+50+30000}{5}=\frac{30140}{5}=6028 \text{ 元}

平均数涨了将近十倍。而中位数呢?还是 40 元,一动不动——因为 30000 元本来就排在最右边,把它的数值改大,并不会改变它的位次。

这就是两者的根本区别:平均数对数值的大小敏感,中位数只对数值的位置敏感。 一个极端值无论往上跑多远,只要它还是排在最后一个,对中位数的影响就是零;但对平均数的影响可以无限增长。

反过来说,“平均数变了”这句话能推出的信息很少——它可能意味着每个人都在变,也可能只意味着某一个人的变化。

现实里,这种分布非常常见

收入、房价、客单价、订单金额、用户停留时长、客服响应时间、故障恢复时间,它们有一个共同点:下面有硬边界,上面没有。

一次响应不可能小于 0 毫秒,但一次故障可以卡住 10 秒,也可能卡住 10 分钟;一个客户可以花 50 元,也可能花 50 万。凡是这样的变量,分布都会堆在偏小的一侧、向右拖出一条长尾——这叫 右偏

右偏有一个好用的诊断线索:平均数会大于中位数,偏得越厉害差得越远。 所以看到这两个数差很多时,先别急着挑一个用,而要意识到“这个变量的分布是不对称的”,这本身就是结论的一部分。

一个公开的真实例子:美国人口普查局 2023 年的住户收入报告里,住户收入中位数是 80,610 美元 2,平均收入约 114,500 美元 4,平均数比中位数高约四成(这两个数同出自该报告的表 A-1 3)。原因不难理解:少数极高收入把平均数抬了上去,而中位数只关心“排中间的那个人”。

同一份薪资数据上平均数与中位数的差别:平均数被少数高薪拉向右侧

用平均数做阈值,比用它描述人更危险

描述“典型值”时用错平均数,只是说得不准。把它当作告警线、考核线、达标线,问题会更大,因为平均数会同时掩盖两件事:尾部有多长,以及尾部里有多少个单位。

把上面的收入换成服务响应时间。1000 次请求里,988 次用了 52 毫秒,12 次用了 2400 毫秒:

平均数=988×52+12×24001000=80176100080 毫秒\text{平均数}=\frac{988\times52+12\times2400}{1000}=\frac{80176}{1000}\approx 80 \text{ 毫秒}

80 毫秒这个数,没有任何一次请求是这样:快的用 52 毫秒,慢的用 2400 毫秒。它离 100 毫秒的告警线还差得远,看着一切正常。但这 1000 次里,有 12 次让用户等了 2.4 秒。

要看清这件事,得用 分位数。把数据从小到大排好,第 pp 百分位(记作 ppp)就是站在 p%p\% 位置上的那个值,意思是“有 p%p\% 的数据比它小”。这里的 p50,也就是中位数,是 52 毫秒;p99 是 2400 毫秒。p99 说的是“最慢的那 1% 的人,等了多久”——一天 100 万次请求,1% 就是约一万次 6

什么时候该换成中位数,什么时候平均数才是对的

不要从上面几段得出“平均数骗人,以后只用中位数”。它们在回答两个不同的问题。

平均数回答的是:总量摊到每个单位是多少。 它同时保留了总量和个数两个信息,所以只要你的结论需要跟总量对上账——成本、产能、库存、总工时的分摊——用的必须是平均数。平均数还有一个好性质:分组算出的平均数,可以按每组的个数加权合并成整体平均数。

中位数回答的是:典型的一个是多少。 当分布右偏、有个别单位大得离谱,而你要说的是“大多数人处于什么水平”时,用中位数。要注意中位数不能这样合并:两个组的中位数放在一起,合不出整体的中位数。

判断可以顺着三个问题走:

  1. 你要的数需要跟总量对上账吗?需要,用平均数。
  2. 这个变量的分布两边大致对称吗?最省事的检查是排序后看最小值、最大值和几个分位数(比如 p10、p50、p90),不画图也能看出形状。
  3. 有没有一个单位可以比典型值大好几倍甚至几个数量级?有,就报中位数。

而且,报数时最好两个一起报:平均数加中位数,或者中位数加 p90 和 p10。两个数差多远,本身就是一条重要信息;只报一个数,等于替读者做了他没被告知的选择。

中位数的三个边界

中位数不是万能药,用它之前要知道它在哪里失效。

第一,分布有两个峰的时候,两个数都不能单独用。 假设客户分成两群:只用基础版的一群,客单价约 50 元;买全家桶的一群,客单价约 3000 元,中间几乎没人。这时平均数落在两群之间,中位数也落在两群之间——落在没人的空谷里。这种情况叫 双峰分布,诚实的做法是把两群分开看,或者直接把分布画出来。

第二,中位数对“变得更极端”完全无感。 极端值再往上跑,中位数不会动。所以“中位数没变”不等于“没变化”:如果最顶上 10% 的人收入翻倍,而中间位置没被跨过,中位数看不出来——这时需要看多个分位数的变化。

第三,取值范围很窄时,中位数会太粗。 一份五分制的满意度问卷,平均分 2.8、3.0、3.3 三组人的中位数可能都是 3,组与组之间的差别就被抹平了 5

一条可以直接用的规矩

拿到一批数,先写下你要回答的问题——是“典型的一个是多少”,还是“总量摊到每个单位是多少”。前者指向中位数,后者指向平均数。

然后别急着算,先看一眼分布的形状:排序看最小、最大和几个分位数,或者干脆看平均数离中位数有多远。差得远,说明分布是偏的,平均数不能单独用;差得近,两者都可以。

上一篇的陷阱是“平均”里藏着一次没说出口的除法;这一篇的陷阱是,即使除法说得明明白白,一个数仍然可能落在没人站的位置上。分母决定它回答的是谁的问题,分布形状决定它代表不代表大多数人,两件事都答完,一个平均数才算站得住。