news 2026/10/31 7:41:27

描述性统计实战:四分位数与均值选择指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
描述性统计实战:四分位数与均值选择指南

统计学学到描述性统计这一层,很多人会卡在一个微妙的位置:均值、中位数、众数都算得出来,Excel 里敲几个函数也能出结果,但一旦有人问“这批数据到底该用哪个指标说话”,脑子里就开始打架。我当初写这篇学习日记,就是因为被一个很具体的问题绊住了——同一组收入数据,平均数算出来是 1.8 万,中位数只有 9 千,两个数字差了整整一倍,汇报的时候到底该报哪个?后来把四分位数拉进来一起看,才真正理解集中趋势这套工具不是“选一个最好的”,而是“几个指标配合着讲一个完整的故事”。这篇日记记录的就是我从四分位数入手,把各种均值放在同一张桌子上比较的完整过程,包括公式推导、手算验证、代码实现,以及那些教材上不会写、只有自己踩过才知道的坑。适合刚学完描述性统计、正在做数据分析入门练习的朋友,也适合工作里需要跟数据打交道、但没系统学过统计的同行参考。

1. 为什么单看均值会骗人:从一组“假平均”数据说起

1.1 一个让我重新理解集中趋势的小案例

先把我当时用的那组数据摆出来。某小型团队 11 个人的月收入(单位:千元),从小到大排列是:3、3.5、4、4.2、4.5、5、5.5、6、7、9、40。最后那个 40 是团队负责人的收入,明显是个离群值。我第一遍算平均数:(3+3.5+4+4.2+4.5+5+5.5+6+7+9+40)/11 = 91.7/11 ≈ 8.34 千元。这个数字拿出来说“我们团队平均月收入 8.34 千”,听起来还不错,但实际上 11 个人里有 9 个人的收入都在 7 千以下,8.34 这个数字被那一个 40 硬生生拉高了。

这就是均值对极端值敏感的经典表现。均值是把所有观测值加总再平分,等于假设“把总收入重新平均分配”,那个 40 的权重和 3 的权重完全一样,但它离中心太远,一拉就把整个平衡点拽偏了。我当时的第一反应是“那用中位数不就行了”,中位数是第 6 个位置的数,也就是 5 千元,确实更能代表“大多数人的水平”。但问题来了:如果只报中位数 5 千,那团队里那个 40 的存在感就完全消失了,而它恰恰是理解这个团队收入结构的关键信息。

所以真正的解法不是二选一,而是用四分位数把数据的分布骨架撑起来,再让不同的均值各司其职。这也是我后来理解到的核心:集中趋势分析从来不是找一个“最正确的数”,而是用一组指标把数据的形状描述清楚。均值告诉你总量的平均分摊,中位数告诉你中间位置在哪,四分位数告诉你中间 50% 的数据集中在什么区间,众数告诉你哪个值出现得最频繁。它们之间不是竞争关系,是协作关系。

1.2 集中趋势到底在解决什么问题

把话说透一点,集中趋势要回答的是“这批数据的典型水平是多少”。但“典型”这个词本身就含糊,取决于你想代表谁。想代表总量分摊,用均值;想代表中间那个人的处境,用中位数;想知道最常见的取值,用众数。三种“典型”对应三种不同的业务问题,选错了指标,结论就会南辕北辙。

我后来养成一个习惯:拿到任何一组数据,先不看均值,先排序,看最小值、最大值、中位数、四分位数,把这几个位置数标出来,脑子里对数据形状有个轮廓,再去算均值。这个顺序很重要,因为均值是一个“计算结果”,而位置数是“观察结果”,先观察再计算,不容易被一个漂亮的平均数带偏。下面这张表是我整理的各指标适用场景对照,后面几个章节会逐个展开。

指标计算依据对极端值敏感度典型适用场景
算术均值全部数值加总除以个数高数据分布较对称、无强离群值
中位数排序后中间位置的值低收入、房价等偏态分布
众数出现次数最多的值低分类数据、离散取值
四分位数排序后按位置切分低描述分布区间与离散程度
截尾均值去掉两端极端值后平均中需要兼顾均值与稳健性

这张表不是让你背的,是让你在具体场景里做判断的抓手。比如做用户消费金额分析,绝大多数用户消费几十块,少数大客户消费几万块,这时候均值会被大客户拉高,中位数和四分位数更能反映“普通用户”的消费水平,但大客户的总量贡献又必须用均值或者总和来体现。一个成熟的描述性分析,往往是这几个数字一起报,而不是只报一个。

2. 四分位数:把数据切成四段的“位置标尺”

2.1 四分位数的定义与位置逻辑

四分位数(Quartile)的思路非常朴素:把排好序的数据按位置切成四等份,每份包含大约 25% 的观测值。切点有三个,分别是第一四分位数 Q1(25% 位置)、第二四分位数 Q2(50% 位置,其实就是中位数)、第三四分位数 Q3(75% 位置)。Q1 到 Q3 之间这段区间,包含了中间 50% 的数据,这个区间叫四分位距(Interquartile Range,IQR),IQR = Q3 - Q1。

为什么用“位置”而不是“数值”来切?因为位置切分不关心数值本身多大,只关心排序后的次序,所以极端值再离谱,也只是占据一个位置,不会把切点拽走。这就是四分位数稳健性的来源。拿前面那组收入数据来说,11 个数排序后,Q2 是第 6 个(5 千),Q1 和 Q3 的位置需要按规则算,算出来 Q1 大约在 4.1 千,Q3 大约在 6.5 千,IQR 约 2.4 千。也就是说,中间 50% 的人收入集中在 4.1 到 6.5 千之间,这个描述比“平均 8.34 千”诚实得多。

这里有个容易被忽略的点:四分位数的计算没有唯一标准。不同的统计软件、不同的教材,用的位置公式不一样,算出来的 Q1、Q3 会有细微差别。这不是谁对谁错的问题,是定义不同。我后面会专门讲几种常见算法和它们的差异,因为实际工作中如果你用 Excel 算一遍、用 Python 算一遍,发现结果对不上,别慌,大概率是算法口径不同。

2.2 三种常见位置算法的手算对比

我用手算把三种主流算法都走了一遍,这样以后看到任何软件的输出都能对上号。还是那 11 个数据:3、3.5、4、4.2、4.5、5、5.5、6、7、9、40,n = 11。

算法一:位置公式 (n+1)×p。这是很多教材用的方法。Q1 的位置 = (11+1)×0.25 = 3,正好是第 3 个数,Q1 = 4。Q3 的位置 = (11+1)×0.75 = 9,第 9 个数是 7,Q3 = 7。Q2 位置 = (11+1)×0.5 = 6,第 6 个数是 5,Q2 = 5。这套算法算出来干净利落,因为 n+1 恰好能被 4 整除。

算法二:位置公式 1+(n-1)×p。这是很多统计软件默认的口径。Q1 位置 = 1+(11-1)×0.25 = 3.5,落在第 3 和第 4 个数之间,需要线性插值:第 3 个是 4,第 4 个是 4.2,插值结果 4 + 0.5×(4.2-4) = 4.1。Q3 位置 = 1+(11-1)×0.75 = 8.5,第 8 个是 6,第 9 个是 7,插值结果 6.5。Q2 位置 = 1+(11-1)×0.5 = 6,正好第 6 个,Q2 = 5。

算法三:n×p 取整规则。Q1 位置 = 11×0.25 = 2.75,向上取整到 3,Q1 = 4。Q3 位置 = 11×0.75 = 8.25,向上取整到 9,Q3 = 7。这套算法在样本量小的时候和算法一结果接近,但样本量大、位置不是整数时差异会显现。

三种算法算出来的 Q1 分别是 4、4.1、4,Q3 分别是 7、6.5、7。差异不大,但在严谨的报告里,你得说清楚用的是哪种口径。我个人的做法是:手算验证用算法一(好算),代码实现用算法二(主流软件默认),报告里注明口径。下面这张表把三种算法的结果并排列出来,方便对照。

算法Q1 位置Q1 值Q2 值Q3 位置Q3 值IQR
(n+1)×p34.05.097.03.0
1+(n-1)×p3.54.15.08.56.52.4
n×p 向上取整34.05.097.03.0

注意:如果你在报告里同时用了 Excel 和 Python 算四分位数,结果对不上是正常的,先确认两边用的位置算法,再决定统一到哪个口径,别急着怀疑数据错了。

2.3 用四分位数识别离群值的实操方法

四分位数最实用的衍生功能是离群值检测,也就是常说的 1.5 倍 IQR 规则。规则很简单:下界 = Q1 - 1.5×IQR,上界 = Q3 + 1.5×IQR,落在边界之外的观测值标记为疑似离群值。拿算法二的结果算:IQR = 6.5 - 4.1 = 2.4,下界 = 4.1 - 3.6 = 0.5,上界 = 6.5 + 3.6 = 10.1。数据里那个 40 远超上界 10.1,被正确标记为离群值;9 也在上界之内(9 < 10.1),所以不算离群。这个结果和我肉眼判断一致,说明规则是靠谱的。

这个规则为什么用 1.5 倍而不是 2 倍、3 倍?这是基于正态分布的经验校准:在正态分布下,1.5 倍 IQR 之外的观测大约占 0.7%,属于小概率事件,标记出来值得看一眼,但又不至于把正常的长尾数据全打成异常。这个系数不是数学定理,是实践约定,你可以根据业务调整,比如做欺诈检测时把系数调小到 1.0 让规则更敏感,做传感器数据清洗时调到 3.0 让规则更宽松。关键是把系数写进你的分析文档,让别人知道你的判定标准。

我实际用这套规则时踩过一个坑:一开始直接对原始数据套 1.5 倍 IQR,结果把一批业务上完全正常的“大额订单”全标成了异常,后来才意识到那些大额订单是真实的高价值客户,不是数据错误。所以离群值检测的结论一定要结合业务判断,统计规则只负责“提示这里有个不寻常的点”,不负责“判定它是错的”。这个区分很重要,很多新手会把统计上的离群等同于业务上的错误,这是两回事。

3. 各种均值大比拼:算术、几何、调和、截尾

3.1 算术均值:最熟悉但也最容易被误用

算术均值就是最常说的平均数,公式是所有观测值之和除以观测个数。它的数学性质很漂亮:所有观测值与均值的偏差之和为零,偏差平方和最小,是“最小二乘”意义下的最优中心点。正因为这些性质,算术均值在后续的方差分析、回归分析里是绝对主角。但它的缺点也同样突出:对极端值极度敏感,一个离群值就能把它拽偏,而且偏的方向和幅度完全由那个离群值决定。

我前面那组收入数据就是活例子,均值 8.34 千被一个 40 拉到远高于大多数人的水平。更隐蔽的问题是,算术均值在偏态分布下会系统性地偏向长尾一侧。收入、房价、用户消费这类数据几乎都是右偏的(少数高值拉长右尾),算术均值会稳定地高于中位数,而且偏得越多说明右尾越长。所以看到均值明显大于中位数,第一反应应该是“数据右偏,存在高值长尾”,而不是“平均水平很高”。

算术均值还有一个使用前提容易被忽略:它要求数据是同一量纲、可加总的。收入可以加总(总收入除以人数有意义),但比率类数据不能直接算术平均。比如三个阶段的转化率分别是 10%、20%、50%,直接算 (10+20+50)/3 = 26.7% 是错的,因为每个阶段的基数不同,正确做法是用加权平均或者几何平均。这个坑我在做漏斗分析时踩过,当时直接把各环节转化率算术平均,得出的“整体转化率”和实际用总转化人数除以总进入人数算出来的差了将近一倍,被同事指出来才发现问题。

3.2 几何均值:比率和增长率场景的正确打开方式

几何均值的公式是 n 个数值连乘后开 n 次方。它专门用来处理比率、增长率、倍数这类需要连乘关系的数据。最典型的场景是计算平均增长率:如果某项指标第一年增长 10%(乘 1.1),第二年增长 20%(乘 1.2),第三年下降 10%(乘 0.9),三年的“平均增长倍数”不是 (1.1+1.2+0.9)/3 = 1.067,而是 (1.1×1.2×0.9)^(1/3) ≈ 1.059,对应平均年增长约 5.9%。算术平均算出来的 6.7% 是高估的,因为它忽略了增长是连乘关系。

为什么几何均值在连乘场景下才对?因为增长率的本质是“每一期在上期基础上乘以一个系数”,多期累积效果是系数连乘,那么“等效的每期平均系数”就应该满足“这个系数自乘 n 次等于总连乘结果”,这正是几何均值的定义。用生活化的类比:你有一笔钱,第一年翻倍(×2),第二年腰斩(×0.5),两年后回到原点。算术平均是 (2+0.5)/2 = 1.25,看起来赚了 25%,但实际一分没赚;几何平均是 √(2×0.5) = 1,正确反映了“没涨没跌”。这个例子我每次讲几何均值都会用,因为它把算术平均的荒谬性展示得极其直观。

几何均值的使用禁忌也要说清楚:数据里不能有零或负数,因为连乘遇到零直接归零,遇到负数开偶次方根无意义。如果增长率里出现 -100%(即乘 0),几何均值直接失效,这时候应该改用其他描述方式,比如分段讨论。另外几何均值对数据的要求是“比值有意义”,纯粹的数量(比如身高、体重)用几何平均没有业务解释,别乱套。

3.3 调和均值:速度与单价的平均陷阱

调和均值是 n 除以各数值倒数的和,公式看着别扭,但它解决的是一个非常具体的陷阱:当“总量固定、分量按另一维度分配”时,平均应该用调和平均。最经典的例子是平均速度:一段路前半程以 60 公里/小时行驶,后半程以 40 公里/小时行驶,平均速度是多少?很多人脱口而出 50,但正确答案是 48。因为两段路程相等,时间分别是 s/60 和 s/40,总时间 = s/60 + s/40,总路程 = 2s,平均速度 = 2s / (s/60 + s/40) = 2 / (1/60 + 1/40) = 48。这就是调和平均。

调和平均和算术平均的差异根源在于权重分配。算术平均给每个数值相同的权重,调和平均实际上给较小的数值更大的权重(因为取倒数后小数值的倒数更大)。在速度例子里,慢速段花的时间更长,对平均速度的影响更大,调和平均正确地反映了这一点。同样的逻辑适用于“固定预算买单价不同的商品,求平均单价”“固定路程不同油耗,求平均油耗”这类场景。

我工作中遇到调和平均的真实场景是做接口性能统计:一批请求分两批处理,第一批 100 个请求每个耗时 10ms,第二批 100 个请求每个耗时 50ms,问平均每个请求耗时多少?这里两批请求数量相等,用算术平均 (10+50)/2 = 30ms 是对的。但如果换成“处理 1000 个请求,前 500 个用方案 A 每个 10ms,后 500 个用方案 B 每个 50ms”,总耗时 = 500×10 + 500×50 = 30000ms,平均每个 30ms,还是算术平均。什么时候用调和?当“每个方案处理的总量相同、但单位处理速度不同”时,比如“方案 A 每秒处理 100 个,方案 B 每秒处理 20 个,各处理 1000 个,平均每秒处理多少个”,这时候总时间 = 1000/100 + 1000/20 = 60 秒,总处理 2000 个,平均每秒 33.3 个,而算术平均 (100+20)/2 = 60 是错的。判断标准就一句话:看分母是什么,分母固定用算术,分子固定用调和。

3.4 截尾均值:在稳健和充分利用信息之间找平衡

截尾均值(Trimmed Mean)的思路是:排序后去掉两端各一定比例的观测值,对剩下的算算术平均。比如去掉最高 10% 和最低 10%,对中间 80% 算平均。它试图在“算术均值充分利用所有信息但怕极端值”和“中位数完全无视极端值但浪费信息”之间找一个折中点。

截尾比例的选择是个技术活。去掉太少(比如 5%),极端值的影响还在;去掉太多(比如 25%),就快退化成中位数了,丢失的信息太多。常见的默认值是 10% 或 20%,具体看数据里离群值的比例。我一般会先画个箱线图看离群值大概占多少,再决定截尾比例,如果离群值占比 3%,截 5% 就够了;如果占比 15%,可能得截 20%。这个比例没有标准答案,但必须在报告里写明,因为不同截尾比例算出来的均值不一样,不写清楚别人没法复现。

截尾均值在体育评分里用得特别多,比如去掉一个最高分、去掉一个最低分再平均,本质就是截尾均值(截掉各 1 个)。这种做法的合理性在于:评委打分可能存在个人偏好导致的极端值,去掉两端能减少个别评委的影响,同时保留大多数评委的信息。我在做用户满意度评分分析时也用过,5 分制评分里偶尔有恶意刷 1 分或刷 5 分的,截掉两端各 5% 之后算出来的分数明显更稳定,和业务方的直觉判断也更吻合。

4. 代码实操:用 Python 把整套指标算一遍

4.1 环境准备与数据构造

理论说再多不如跑一遍代码。我用 Python 的 numpy 和 pandas 把前面所有指标都实现一遍,顺便验证手算结果。环境很简单,装好 numpy、pandas、scipy 就行,不需要额外依赖。数据就用前面那组 11 个人的收入,再加一组更大的模拟数据来观察大样本下的表现。

import numpy as np import pandas as pd from scipy import stats # 小样本:11 人收入(千元) income_small = np.array([3, 3.5, 4, 4.2, 4.5, 5, 5.5, 6, 7, 9, 40]) # 大样本:模拟 1000 人收入,右偏分布 np.random.seed(42) income_large = np.random.lognormal(mean=1.5, sigma=0.8, size=1000) * 3

这里用对数正态分布模拟收入是有讲究的:收入类数据天然右偏,对数正态分布的形状和真实收入分布很接近,比用均匀分布或正态分布模拟更贴近实际。np.random.seed(42)是为了让结果可复现,你跑出来的数字和我一样,方便对照。这个习惯我强烈建议养成,任何涉及随机数的分析都固定种子,否则每次跑结果都变,没法排查问题。

4.2 各指标的计算与结果对照

def describe_center(data, name): n = len(data) mean_val = np.mean(data) median_val = np.median(data) q1, q3 = np.percentile(data, [25, 75]) iqr = q3 - q1 # 截尾均值,截掉两端各 10% trimmed = stats.trim_mean(data, 0.1) # 几何均值(数据需为正) geo = stats.gmean(data) # 调和均值 harm = stats.hmean(data) print(f"=== {name} (n={n}) ===") print(f"算术均值: {mean_val:.2f}") print(f"中位数: {median_val:.2f}") print(f"Q1: {q1:.2f}") print(f"Q3: {q3:.2f}") print(f"IQR: {iqr:.2f}") print(f"截尾均值: {trimmed:.2f}") print(f"几何均值: {geo:.2f}") print(f"调和均值: {harm:.2f}") print() describe_center(income_small, "小样本收入") describe_center(income_large, "大样本收入")

跑出来的小样本结果:算术均值 8.34,中位数 5.00,Q1 4.10,Q3 6.50,IQR 2.40,截尾均值约 5.06,几何均值约 5.63,调和均值约 4.98。这组数字放在一起看,信息量比单个均值大得多:中位数 5.00 和截尾均值 5.06 非常接近,说明去掉极端值后中心位置稳定在 5 附近;算术均值 8.34 明显偏高,证实了右偏;几何均值 5.63 介于中位数和算术均值之间,符合右偏分布下几何均值通常位于中位数和算术均值之间的规律。这个“中位数 ≤ 几何均值 ≤ 算术均值”的排序在右偏数据里几乎总是成立,可以作为一个快速校验手段。

大样本的结果会更平滑,因为样本量大,各指标的波动小。我跑出来大样本的算术均值约 6.8,中位数约 5.4,Q1 约 3.6,Q3 约 8.2,IQR 约 4.6。可以看到大样本下均值和中位数的差距依然存在(右偏导致),但差距比例比小样本小,因为小样本里那个 40 的杠杆效应太强。这也说明一个道理:样本越小,单个极端值对均值的影响越大,小样本分析更要警惕均值失真。

4.3 用箱线图把分布骨架画出来

数字看多了容易麻木,画个箱线图直观得多。箱线图的箱体就是 Q1 到 Q3,箱体中间的线是中位数,须线延伸到 1.5 倍 IQR 范围内的最远点,超出须线的点单独标出来,正好就是离群值。

import matplotlib.pyplot as plt fig, axes = plt.subplots(1, 2, figsize=(10, 4)) axes[0].boxplot(income_small, vert=True) axes[0].set_title("Small Sample (n=11)") axes[0].set_ylabel("Income (k)") axes[1].boxplot(income_large, vert=True) axes[1].set_title("Large Sample (n=1000)") plt.tight_layout() plt.show()

小样本的箱线图会看到箱体在 4.1 到 6.5 之间,中位数线在 5,上方有一个孤立的点 40,离须线很远,一眼就能看出是离群值。大样本的箱线图箱体更宽,须线更长,但整体形状是右偏的(上须比下须长),离群点零星分布在上方。箱线图的好处是把 Q1、Q3、中位数、离群值四个信息压缩在一张图里,比看一堆数字快得多。我现在做任何数据初探,第一张图一定是箱线图,先看骨架再看细节。

提示:箱线图的须线定义在不同软件里可能不同,有的用 1.5 倍 IQR,有的用 9 倍 IQR 或者直接画到最大最小值,画图前确认一下软件的口径,别把须线端点误读成 Q3 或最大值。

5. 常见问题与排查实录

5.1 均值和中位数差很多,到底信哪个

这是最高频的问题,我的回答是:两个都信,但要讲清楚它们各自代表什么。均值和中位数差距大,本身就是一条重要信息——说明分布偏斜或者有离群值。正确的做法不是选一个报,而是把两个都报出来,再补一句解释:“均值 X,中位数 Y,均值明显高于中位数,说明数据右偏,存在高值长尾”。这样听的人既知道中心位置,又知道分布形状,信息是完整的。

如果非要选一个作为“主要指标”,看你的分析目的。要反映“总量分摊”或者做后续的参数估计,用均值;要反映“典型个体的处境”,用中位数。收入、房价、用户消费这类偏态数据,对外沟通时中位数更不容易引起误解;但做预算、做总量规划时,均值或者总和才是对的。我见过不少报告只报均值不报中位数,读者容易高估“普通水平”,这是个常见的沟通陷阱。

5.2 四分位数算出来和同事对不上怎么办

先别怀疑数据,先对口径。前面讲过,四分位数至少有三种常见位置算法,Excel 的 QUARTILE.INC 和 QUARTILE.EXC 用的就是不同口径,Python 的 numpy.percentile 默认是线性插值,和 Excel 的 INC 口径接近但不完全一样。排查步骤我整理成了一张表:

现象可能原因排查动作
Q1/Q3 差一个小数位插值算法不同确认双方用的位置公式
结果差一个观测值取整规则不同检查是否向上/向下取整
中位数都对但 Q1 不对样本排序或缺失值处理不同检查缺失值是否被剔除
完全对不上数据本身不同核对数据源和筛选条件

我的经验是,在团队里统一一个口径并写进分析规范,比每次争论谁对谁错高效得多。我们团队后来统一用线性插值口径(对应 numpy 默认和 Excel 的 INC),所有报告都注明“四分位数采用线性插值法”,从此再没为这个吵过。

5.3 什么时候该用几何均值而不是算术均值

判断标准就一条:数据之间是不是连乘关系。增长率、比率、倍数、指数,这些是连乘关系,用几何均值;金额、人数、时长,这些是加总关系,用算术均值。拿不准的时候问自己:把这些数乘起来有意义吗?如果乘起来有意义(比如各期增长倍数连乘得到总增长倍数),就用几何;如果加起来才有意义(比如各部分金额加总得到总额),就用算术。

还有一个实操细节:几何均值要求所有数据为正,如果数据里有零或负数,要么剔除、要么分段处理、要么换指标。我见过有人对包含负增长的数据硬套几何均值,结果程序报错或者算出复数,这就是没检查数据前提。养成习惯,算几何均值前先assert (data > 0).all(),一行代码省掉很多麻烦。

5.4 截尾比例怎么定才不算拍脑袋

截尾比例没有万能公式,但可以按这个流程定:先画箱线图或者算 1.5 倍 IQR 规则,看离群值占比大概多少;截尾比例设成略大于离群值占比,比如离群值占 4%,截 5%;然后做敏感性检查,把截尾比例在 5%、10%、15% 各算一遍,看截尾均值变化大不大,如果变化很小说明结果稳健,如果变化很大说明数据里极端值影响深远,需要在报告里特别说明。

我个人的默认值是 10%,因为这个比例在多数业务数据上既能压住极端值,又不至于丢太多信息。但这个默认值不是教条,做金融风控数据时我截到 20%,因为那边极端值特别多;做实验测量数据时只截 5%,因为测量误差本来就小。关键是把比例和理由写清楚,让读者能判断你的结论在多大程度上依赖这个选择。

6. 我在实操中总结的几条经验

第一条,先排序再看数,别上来就算均值。这个习惯帮我避开了无数次被平均数误导的情况。排序之后,最小值、最大值、中位数、四分位数一目了然,数据形状心里有数了,再去算均值,就能立刻判断这个均值是不是被拉偏了。反过来,先算均值再看分布,很容易先入为主地接受一个失真的中心值。

第二条,报告里永远成组出现,不要孤立报一个数。均值配中位数,中位数配四分位数,必要时再加截尾均值。单个数字没有上下文,读者没法判断它可不可信。成组出现,读者自己就能看出分布偏不偏、有没有离群值。这个习惯看起来啰嗦,但沟通成本反而更低,因为省掉了“这个平均数怎么这么高”的追问。

第三条,统计规则只提示异常,不判定错误。1.5 倍 IQR 标出来的离群值,只是说“这个点不寻常,值得看一眼”,它可能是数据错误,也可能是真实的高价值样本。我早期做数据清洗时,看到离群值就删,后来发现删掉的全是真实的大客户,差点把业务分析做反。现在的做法是:标记出来,逐个看,结合业务背景判断,该保留的保留,该修正的修正,绝不无脑删。

第四条,口径写进文档,别留在脑子里。四分位数用哪种算法、截尾均值截多少、离群值判定用几倍 IQR,这些选择都要写进分析文档或者代码注释。我吃过亏,三个月后回头看自己的分析,忘了当时用的什么口径,重跑一遍结果对不上,排查了半天。现在我的代码里每个统计量旁边都有一行注释说明口径,省心很多。

第五条,小样本别太迷信均值。样本量小于 30 的时候,一个极端值就能把均值拽得面目全非,这时候中位数和截尾均值更可靠。但小样本也有小样本的问题,四分位数在 n 很小时插值误差大,箱线图的须线也不稳定。我的经验是 n 小于 10 的时候,老老实实把原始数据列出来看,别急着套统计指标;n 在 10 到 30 之间,中位数为主、均值为辅;n 大于 30 之后,各指标才逐渐稳定可信。

这套集中趋势的分析框架,我后来在用户消费分析、接口性能统计、评分数据清洗里反复用到,每次都是先看分布骨架,再选合适的中心指标,最后成组汇报。四分位数负责撑起骨架,各种均值负责从不同角度描述中心,它们配合起来,才能把一组数据讲清楚。单独拎任何一个出来,都容易讲偏。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/31 7:41:14

Spark数据倾斜优化实战:原理、场景与解决方案

1. 数据倾斜的本质与典型场景数据倾斜是分布式计算中的经典难题&#xff0c;当我在2016年第一次处理TB级用户行为日志时&#xff0c;就遭遇过某个城市用户量激增导致的shuffle崩溃。这种现象的本质在于数据分布的幂律特性——少数几个key承载了绝大部分数据量。在Spark中具体表…

作者头像 李华
网站建设 2026/10/31 7:40:28

省级DNS地址别照抄:验证运营商递归解析与CDN调度

上周有人在群里甩了张截图&#xff0c;标题写着某运营商32个省的DNS地址大全区&#xff0c;底下跟着一长串以 202.96 开头的服务器IP&#xff0c;说照着填完&#xff0c;家里宽带打开网页要转三圈才出来。这种事我见过太多次了&#xff0c;问题多半不在地址本身&#xff0c;而在…

作者头像 李华
网站建设 2026/10/31 7:40:17

从混淆矩阵到阈值调参:FPR与FNR落地避坑指南

做过几年模型落地的人大概都有过这种经历&#xff1a;离线报告上准确率九十多&#xff0c;AUC 也漂亮&#xff0c;评审会上没人挑得出毛病&#xff0c;结果上线第一周业务方就找过来&#xff0c;说误报太多用户投诉&#xff0c;或者漏放太多风险事件。问题往往不在模型本身&…

作者头像 李华
网站建设 2026/10/31 7:40:15

从GitLab迁移到Gitea:轻量级代码托管的实践指南

1. 从GitLab到轻量级替代品的迁移背景在软件开发团队中&#xff0c;版本控制系统是日常工作的核心基础设施。我们团队曾经使用GitLab作为主要的代码托管平台&#xff0c;但随着项目规模扩大和团队分散化&#xff0c;GitLab的某些特性开始显现出不足。最显著的问题是资源占用——…

作者头像 李华
网站建设 2026/10/31 7:39:29

Oracle 11.2.0.1 补丁实操:OPatch 顺序、验证与回滚

简介&#xff1a;面向Oracle数据库管理员与运维人员的11.2.0.1版本补丁安装参考文档&#xff0c;聚焦停机窗口内如何安全完成补丁部署与验证&#xff0c;适合需要处理遗留系统维护、补丁升级和故障排查的初中级DBA查阅。整份资料以单个doc文件交付&#xff0c;压缩包约942KB&am…

作者头像 李华
网站建设 2026/10/31 7:39:17

光标训练工具train608cursor提升远程办公效率

1. 项目概述&#xff1a;train608cursor光标训练工具这个工具名称由"train"和"cursor"两个关键词组成&#xff0c;结合数字"608"的特定标识&#xff0c;可以判断这是一个用于光标操作训练的专业工具。在数字时代&#xff0c;随着远程办公和在线协…

作者头像 李华