数据有极端值怎么办?IQR 判离群与指标怎么选
做数据汇总时最怕的不是算错,而是一个数字悄悄把整张表带偏。离群点指明显偏离其余数据的观测值,判断它最常用的工具是四分位距 IQR,也就是上四分位数 Q3 与下四分位数 Q1 之差。 用 Q1、Q3 划出 1.5 倍 IQR 的上下栅栏,就能把可疑点先圈出来,再决定它该留、该改,还是该单独说明。
一个极端值到底改变了什么
一个极端值能把平均数和标准差同时带偏,却几乎动不了中位数和四分位距。 下面用一组真实感的数据说明:社区便利店记了 15 天日营业额,其中有一天赶上周年庆做活动,当天卖了 12800 元。
15 天流水(元):3200、3450、3100、3600、3380、3520、3250、12800、3410、3300、3680、3150、3550、3420、3290。
老板想知道的是「平时一天大概卖多少、波动大不大」。把周年庆那天算进去和拿出来,两套答案差得很远。
| 指标 | 含周年庆那天(15 天) | 剔除后(14 天) | 变化 |
|---|---|---|---|
| 平均数 | 约 4006.67 元 | 约 3378.57 元 | 被抬高约 628 元 |
| 中位数 | 3410 元 | 3395 元 | 只动了 15 元 |
| 样本标准差 | 约 2438 元 | 约 173 元 | 被放大约 14 倍 |
| 样本方差 | 约 594.5 万 | 约 3.0 万 | 被放大约 198 倍 |
| 四分位距 IQR | 300 元 | 270 元 | 只动了 30 元 |
| 极差 | 9700 元 | 580 元 | 被放大约 17 倍 |
同一组数据,按样本口径计算,结果为估算。
关键差别在于指标的构造方式。平均数、标准差、方差、极差都要用到每一个观测值, 极端值参与运算后会按比例甚至按平方被放大;中位数和 IQR 只取决于排序后的位置, 最大的那个数再往上翻一倍,中间那一半数据的位置也不会挪。 统计上把后者称为稳健指标。
第一步:排序后做五数概括
判断离群点的第一步不是算平均数,而是排序后取出五个位置数:最小值、Q1、中位数、Q3、最大值。 这五个数就是箱线图的全部信息,能一眼看出数据是往哪边偏的。
把 15 天流水从小到大排好:
3100、3150、3200、3250、3290、3300、3380、3410、3420、3450、3520、3550、3600、3680、12800
数据共 15 个,中位数是正中间的第 8 个,即 3410 元。用它把序列切成前后两半,中位数本身不进入任何一半:前 7 个数的中位数 3250 元是 Q1,后 7 个数的中位数 3550 元是 Q3。
- 最小值
- 3100 元
- 下四分位数 Q1
- 3250 元(25% 的天数低于它)
- 中位数 Q2
- 3410 元(一半的天数低于它)
- 上四分位数 Q3
- 3550 元(75% 的天数低于它)
- 最大值
- 12800 元
- 四分位距 IQR
- 3550 − 3250 = 300 元
五个数一摆出来,问题已经很明显:中间一半数据挤在 3250 到 3550 元这 300 元的带子里,最大值却是 12800 元,比 Q3 高出 9250 元,相当于 30 多个 IQR。这种「中间很密、尾巴很长」的形状,就是要做离群判断的信号。
打开「四分位数计算器」Q1/Q2/Q3·四分位距IQR·箱线图五数第二步:用 1.5 倍 IQR 划栅栏
有了 Q1、Q3 和 IQR,就能把「多远算远」量化成两个具体数字。 常用规则是在箱体两侧各留出 1.5 倍 IQR 的余量,超出这个范围的点列为待查离群点。
- 排序后做五数概括:取最小值、Q1、中位数、Q3、最大值,先看最大值离 Q3 有多远。本例 Q1 = 3250 元,Q3 = 3550 元。
- 算四分位距 IQR:IQR = Q3 − Q1 = 3550 − 3250 = 300 元,代表中间一半数据的跨度。
- 划上下栅栏:下栅栏 = 3250 − 450 = 2800 元;上栅栏 = 3550 + 450 = 4000 元。落在这个区间外的就是待查点。
- 逐个核对来源:本例只有 12800 元这天超出上栅栏。核对后确认是周年庆活动当天,属于真实发生的非常态事件。
- 决定报告哪套指标:保留这天,但常态水平改用中位数 3410 元和 IQR 300 元描述,大促单独成行说明。
为什么不建议只用 3σ 法筛
很多人习惯用「均值 ± 3 倍标准差」筛离群点,但这个门槛会被离群点自己撑大。 标准差是由包括离群点在内的全部数据算出来的,异常越极端、σ 越大、门槛越松, 极端情况下反而把自己藏了进去,统计上称为掩盖效应。
用同一家便利店做个对照。假设这 15 天里有两天都在搞活动,分别卖了 12800 元和 11500 元,一共 16 天数据:
| 筛查方法 | 算出的上限 | 12800 元那天 | 11500 元那天 |
|---|---|---|---|
| 均值 + 3 倍标准差 | 约 13504 元 | 未判为离群 | 未判为离群 |
| Q3 + 1.5 倍 IQR | 4032.5 元 | 判为离群 | 判为离群 |
16 天数据:均值约 4475 元、样本标准差约 3010 元;Q1 = 3270 元、Q3 = 3575 元。
两天大促把标准差从 173 元一路推到约 3010 元,3σ 门槛随之涨到 13504 元,比两天的实际营业额都高,于是一个都没抓到。而 Q1 和 Q3 取的是排序位置,两个极端值挤在最右端并不能把它们往上拉,栅栏仍旧稳稳停在 4032.5 元。
第三步:离群点该删还是该留
找到离群点不等于要删掉它,删不删取决于这个数字是怎么产生的。 把来源分成三类,对应的处置方式完全不同,套用任何一种「统一剔除」的做法都会出问题。
| 来源 | 怎么认出来 | 该怎么处理 |
|---|---|---|
| 录入或单位错误 | 回查原始凭证对不上;数量级差 10 倍、100 倍;把元写成了分或把公斤写成了克 | 改正原值;确实查不回来就作为缺失值删除,并注明删了几条 |
| 口径混在一起 | 数据本身没错,但不属于同一类,例如大促日与平销日、线上单与线下单混在一列 | 拆成两组分别统计,不要合成一个平均数 |
| 真实的非常态事件 | 数据经核实无误,业务上确有原因,例如周年庆、极端天气、一次团购大单 | 保留,但在报告中单独成行说明;常态水平另用稳健指标描述 |
便利店这天属于第三类:数字是真的,事件也是真的。
回到便利店这个例子。12800 元那天是真实的经营结果,删掉它会低估全年营收;但把它混进日常平均里,又会高估平销日的水平。 正确做法是两个数字都给:全期 15 天日均约 4007 元,剔除大促日后的平销日中位数为 3410 元,大促当天 12800 元单独列出。
第四步:最终报告哪套指标
数据里还留着极端值时,用中位数搭配 IQR;数据已确认干净、分布大致对称时,用平均数搭配标准差。 这两套指标要成对使用,不能一个取中位数、另一个取标准差,否则中心和波动说的不是同一件事。
| 场景 | 描述中心水平 | 描述波动 | 理由 |
|---|---|---|---|
| 数据干净、大致对称 | 平均数 | 标准差 / 方差 | 用上了全部观测值,信息量最足,也便于后续做区间估计 |
| 存在保留的离群点 | 中位数 | 四分位距 IQR | 两者都只看排序位置,不被极端值带偏 |
| 分布明显偏斜(如收入、工时) | 中位数 | IQR 或分位数区间 | 长尾会把平均数推向少数高值,中位数更贴近多数人的实际感受 |
| 样本量很小(少于约 10 个) | 中位数 + 列出原始值 | 极差 + IQR(仅作参考) | 分位数本身不稳定,直接把原始数据摆出来比任何汇总都可靠 |
判断分布偏不偏斜有个省事的办法:把平均数和中位数放在一起看。 本例含大促日时平均数 4006.67 元比中位数 3410 元高出近 600 元,就是典型的右偏信号;剔除后平均数 3378.57 元与中位数 3395 元几乎重合,说明剩下的 14 天分布相当对称,这时再用标准差描述波动才站得住。
打开「中位数众数计算器」中位数·众数·频数表四个容易翻车的细节
上面的流程本身不难,实际操作中出错多半出在下面这几个地方。
常见问题
- 四分位数 Q1、Q3 到底怎么算?
- 先把数据从小到大排序,用中位数把序列切成前后两半,前半部分的中位数是 Q1,后半部分的中位数是 Q3。数据个数为奇数时,中位数本身不进入任何一半。例如 15 天流水排序后中位数是第 8 个数 3410 元,前 7 个数的中位数 3250 元就是 Q1,后 7 个数的中位数 3550 元就是 Q3。这套做法叫分半法,是国内教材的常见口径。
- 1.5 倍 IQR 的这个 1.5 是怎么来的?
- 它是箱线图的经验系数,不是从某条公式推出来的硬标准。如果数据近似正态分布,IQR 约等于 1.35 个标准差,上栅栏 Q3 + 1.5×IQR 大致落在均值加 2.7 个标准差的位置,理论上约 0.7% 的点会被划到栅栏外。这个比例既不会把正常波动大量误判成离群,又能把明显偏离的点筛出来,所以被沿用为默认值。要求更严格时可以改用 3 倍 IQR,筛出的点通常被视为极端离群。
- 箱线图的五数概括怎么看?箱体和须线分别代表什么?
- 五数概括指最小值、下四分位数 Q1、中位数 Q2、上四分位数 Q3、最大值。箱体的上下边就是 Q3 和 Q1,箱体中间那条线是中位数,箱体高度即 IQR。须线画到栅栏内最远的实际数据点,被画成单独圆点的才是离群点。注意须线端点不等于栅栏值,而是栅栏范围内真实存在的最大、最小观测值。
- 发现离群点必须删掉吗?
- 不一定,要先弄清它从哪来。确认是录入错误或单位写错,改正或删除;属于口径不同混进来的数据,比如把大促日和平销日放在同一列,应当拆成两组分别统计;属于真实发生的非常态事件,默认保留,只是在报告里单独说明。直接删掉真实数据会让结论偏乐观,也失去了业务信息。
- 数据里有极端值,该看标准差还是四分位距?
- 有未处理的极端值时看四分位距。IQR 只由 Q1 和 Q3 决定,极端值再大也影响不到中间那一半数据;标准差用到每个数据点与均值的平方差,一个极端值会被平方放大。便利店例子里加入 12800 元那天后,样本标准差从 173 元涨到 2438 元,约 14 倍,而 IQR 只从 270 元变到 300 元。数据已确认干净、近似对称时,标准差信息量更足,仍是首选。
- 为什么 Excel 算出的四分位数和课本不一样?
- 因为两者取位置的方法不同。课本常用分半法,Excel 的 QUARTILE.INC 用的是线性插值,落在两个数之间时按比例取中间值。同一组 15 天流水,分半法得到 Q1 为 3250 元、Q3 为 3550 元,QUARTILE.INC 得到 3270 元和 3535 元,IQR 也从 300 元变成 265 元。口径差异只影响栅栏位置几十元,通常不改变谁是离群点的结论;写报告时注明用了哪套口径即可。
- 只有 8 个数据,能用 IQR 判离群吗?
- 可以算,但结论要保守。样本量小的时候 Q1 和 Q3 本身就不稳定,多一个少一个数据都可能让栅栏移动很多,容易把正常波动误判成离群。数据少于约 10 个时,建议把 IQR 栅栏当成提示而不是判定,回到原始记录逐条核对来源。需要正式判定时,可参照国家标准中针对正态样本的格拉布斯检验等方法。
- 剔除离群点后标准差和方差会变多少?
- 变化幅度往往比想象中大。便利店 15 天数据含 12800 元那天时,样本方差约 594.5 万、样本标准差约 2438 元;把这天剔除后,样本方差降到约 3.0 万、标准差降到约 173 元,方差差了约 198 倍。原因是方差对偏差取平方,这天偏离均值约 8793 元,平方后贡献了绝大部分离差平方和。所以看到标准差大得离谱时,先排查有没有极端值,再讨论波动本身。