# 删掉空值为什么会让结论变样：缺失的行不是随机消失的

删空值等于换掉了分母：缺失分成完全随机、随机、非随机三类，删或填之前先看被删的人在你要测的那件事上跟留下的人是否不同

> 数据清洗 · 抽样误差 · 结论表达 · 约 7 分钟 · 10 月 10 日

## 本篇要点

1. 删掉空值会同时做两件事：拿走记录，以及把“被调研的全体”悄悄换成“愿意回答的那部分人”；后一件事才决定结论对不对。
2. 同样是 40% 缺失，随机丢和“不满的人不回答”给出完全不同的可信度：前者只是精度下降，后者让中心整体偏移。
3. 判断标准只有一句话：被删掉的人，在你要测的那个数上，跟留下的人是否不同。
4. 缺失分三类：完全随机缺失（谁缺都无关）、随机缺失（与已记录变量有关）、非随机缺失（与那个缺失值本身有关）；删掉在完全随机下无偏，在非随机下必然有偏且无法从数据内部修复。
5. 缺失机制无法只靠数据判定：检验能拒绝“完全随机”，但不能确认它；“是否与被测值有关”原则上无法检验，只能靠对数据生成过程的理解。
6. 均值插补保持均值不变，但会把标准差、标准误和误差范围一起压小——软件把填进去的数当真实观测，样本量虚假变大，而缺失本应让不确定性变大。
7. 非随机缺失下唯一诚实的做法是敏感度分析：把缺失按最有利和最不利情况各填一遍，给出结论的上下界；若结论在两端之间翻转，就不能当作结论。
8. 动手前要看四样：缺失率与分布、有缺失行与无缺失行在已观测列上的差异、这个空到底属于真零还是没记录、缺失原因是否被记录。

---

“满意度”这一列有 40 个空。把空行筛掉，剩下 60 个人平均打 4.0 分，报告上写“满意度 4.0，达标”。

这个动作在代码里往往只是加一句 `WHERE 评分 IS NOT NULL`。它做了两件事：拿走 40 条记录；把“被调研的 100 位客户”换成“愿意打分的 60 位客户”。第二件事才决定结论对不对。

## 同一个 4.0，可能对应两种真相

**故事一：**问卷系统故障，40 份回复被随机丢掉。剩下的 60 个人大致是全体客户的缩影，4.0 可以作为全体的估计，代价只是样本少了、误差范围宽了。

**故事二：**问卷放在页面最底下，只有耐心滑到底、体验还不错的人才会打分。假设那 40 个人其实平均只打 2.0 分，全体真值就是：

$$\frac{60\times 4.0 + 40\times 2.0}{100} = 3.2$$

你当然不知道那 40 个人打了几分。但你能算出范围：评分最低 1 分、最高 5 分，真值就落在

$$\frac{240+40\times 1}{100}=2.8 \quad\text{到}\quad \frac{240+40\times 5}{100}=4.4$$

之间。如果判断线是“4.0 达标”，这个区间跨过了判断线：按最乐观的填法刚好达标，按最悲观的填法明显不达标。删掉空值后报出的 4.0，等于把区间的乐观端点当成了唯一答案。

两次缺失比例一模一样，结论却一个稳、一个悬。区别不在缺了多少，而在**谁缺了**。

## 删掉行，等于偷偷换掉了你在描述的那群人

你报出的每一个数，背后都藏着一个分母。筛选动作改的就是这个分母。

改分母本身不必然错。只有当被删掉的那批人，在**你要测的那件事上**跟留下的人不一样时，才会错。故事一里他们没差别，故事二里差别巨大。

这和上一篇讲的偏差是同一回事。波动方向随机，多抽几批会互相抵消，加样本能压住；偏差方向固定，加样本只是让你更自信。缺失一旦与被测的值有关，就属于后者——那 40 个人不是随机消失的，是**因为不想给高分而不出现的**。

## 判断能不能删，先分清三种“为什么空”

**完全随机缺失（MCAR）：**谁缺、谁不缺跟任何变量都无关。系统随机故障丢了一批问卷属于这种。

**随机缺失（MAR）：**缺失跟**已经记录在案的变量**有关，但跟那个没记下来的值本身无关。比如男性更不愿意填抑郁量表——性别这一列你有，所以这种缺失讲得通、补得回。

**非随机缺失（MNAR）：**缺失跟**那个缺失值本身**有关。收入高的人更不想报收入；对服务不满的人直接关掉问卷。故事二就是这种。

一句话概括判断标准：**被删掉的人，在你要测的那个数上，跟留下的人是否不同？**

- 看不出不同 → 删掉只是浪费信息，样本量一减，波动范围变宽。
- 不同，但这种不同完全体现在你已有的列里 → 删掉有偏，但有救：按那些列分层各自比较，或者用能利用这些列的方法去补。
- 不同，而且跟那个值本身有关 → 删掉必然有偏，而且从这份数据内部修不好。

要提醒一句：**缺失机制没法只靠数据判定。**有一类检验能拒绝“完全随机”这个假设，但检验不显著不等于缺失就是随机的；至于“缺失是否与被测的值有关”，你手里根本没有那些缺失的值，原则上无法检验。这一步靠的是你对数据怎么产生的理解，而不是跑一个程序。

## 不删，改成填呢：均值插补保住了中心，改掉了别的

最省事的填法是把空值都填成这一列的均值。听起来很温和：均值不动，那结论不就稳了吗？

均值确实没动，别的东西全动了。还是上面的例子，60 个已观测评分均值 4.0、标准差约 0.8。把 40 个空全填成 4.0 之后，这些数相对均值的偏离都是 0，平方和一点没增加，分母却从 60 变成了 100：标准差降到约 0.62，均值的标准误从 $0.80/\sqrt{60}\approx 0.103$ 降到 $0.62/\sqrt{100}\approx 0.062$，误差范围窄了近四成。

问题就在这四成里。软件把填进去的数当成真实观测，你的样本量凭空涨了 40，误差范围跟着缩水——可缺失恰恰是“这个数有多确定”出问题的地方，你却在这里把不确定性抹掉了。填均值做的事，是把“不知道”改写成“知道了，而且正好在中间”，再把这份伪造的确定性写进结论。它还会把分布压平：原本右偏或双峰的形状，被填成中间一柱。

想正经补，方法是**多重插补**：填出几份略有差异的完整数据，分别分析再合并，让缺失带来的不确定性重新进入误差范围。它只在 MAR 假设下可靠；到了非随机缺失那一类，没有方法能担保结果无偏。

## 动手之前，先看四样东西

1. **缺失率和缺失分布。**哪几列缺、缺多少、是不是集中在同一批行。整批集中缺失通常指向流程事件（某天系统故障、某段时间没采这个字段），零散缺失更可能来自个人选择。
2. **有缺失的行和没缺失的行，在你已经观测到的列上比一比。**这是不用任何统计工具就能做的动作：如果缺评分的人里投诉率是其他人的 3 倍，你就已经知道他们不一样了。
3. **这个“空”是哪一种空。**是真的为零（没成交订单的金额确实是 0），还是“没有值”，还是“没记录”？三者性质完全不同，填 0 有时完全正确，有时错得离谱。还要认出伪装成数字的空：`-1`、`9999`。
4. **缺失的原因有没有被记下来。**问卷系统里的“跳过/拒答/超时”、埋点里的空事件，往往直接告诉你属于哪一类。

## 一条可以照着走的顺序

```mermaid
flowchart LR
  A["有缺失的列"] --> B{"缺失比例大吗？"}
  B -->|"很小，且看不出规律"| C["可以删，但要写清删了多少"]
  B -->|"不可忽略"| D{"被删的人，在测的那件事上跟留下的人一样吗？"}
  D -->|"看不出不同"| E["删除无偏，只损失精度"]
  D -->|"不同，且差异都在已有列里"| F["分层比较，或用多重插补"]
  D -->|"不同，且跟那个值本身有关"| G["删和填都修不好，给最好／最坏区间"]
```

最后那条路对应的具体做法是**敏感度分析**：把缺失值分别按最有利和最不利的情况填一遍，看结论会不会翻转。上面的例子里，就是把 40 个空先全填 1 分、再全填 5 分，得到 2.8 和 4.4。如果结论在这两端之间来回翻，那它就不算一个结论，只算一个猜法。

## 边界

**“删除一定错”是过头话。**在完全随机缺失下，删除是无偏的，只是浪费了信息；缺失比例很小时这点影响可以忽略——有人给出的经验法则是超过 5% 就别默认删除，但这只是经验，不是定律。更细一层：即使在随机缺失下，如果缺失只跟解释变量有关、跟你要预测的结果无关，删除往往也没偏。

**“插补一定对”同样是过头话。**每一种插补都在替缺失值假设一个分布，而这个假设用数据检验不了。

最省事的办法始终是别让它缺：关键字段设成必填，问卷放在流程里而不是流程末尾，在数据生成的那一刻就记下“他为什么没答”。等数据躺在表格里再想，你能做的只剩判断和坦白。

空值本身不改结论。改结论的是：你在删掉它的同一刻，也删掉了一部分人。

## 术语表

- 完全案例分析（列表删除）：只要某一行有任一列是空的就整行不用，是最常见的默认做法；它在完全随机缺失下无偏，在另两种机制下可能产生偏差。
- 完全随机缺失（MCAR）：谁缺谁不缺跟任何变量都无关，比如系统随机故障丢了一批问卷；这种情况下删掉只是浪费信息。
- 随机缺失（MAR）：缺失跟已经记录在案的变量有关，但跟那个没记录下来的值无关；这种缺失可以靠已有的列去修正。
- 非随机缺失（MNAR）：缺失跟那个缺失值本身有关，比如不满的人干脆不填；这类缺失从数据内部修不好。
- 均值插补：把空值统统填成这一列的均值；均值不变，但标准差、标准误和误差范围被一起压小，制造出虚假的确定性。
- 多重插补：填出多份略有差异的完整数据、分别分析再合并，让缺失带来的不确定性重新进入误差范围；只在 MAR 假设下可靠。
- 敏感度分析：把缺失值按最好和最坏情况各填一遍，给出结论的上下界，用来检验结论是否依赖“缺失无偏”这个假设。

## 来源

1. [Missing Data and Imputation Methods (PMC) — 三类缺失机制的定义、完全案例分析在 MCAR 下无偏而在 MAR/MNAR 下可能有偏、缺失比例超过约 5% 不宜默认删除、均值插补低估方差、多重插补的适用假设](https://pmc.ncbi.nlm.nih.gov/articles/PMC7553195/)
2. [Types of Missing Data (NCBI Bookshelf) — MCAR/MAR/MNAR 的界定，以及“完全案例分析是否有偏取决于缺失是否与结果独立”这一更细的条件](https://www.ncbi.nlm.nih.gov/books/NBK493614/)
3. [3 problems with mean imputation (SAS Blogs) — 均值插补的三个后果：方差变小、标准误与置信区间被压缩、变量间关系被破坏](https://blogs.sas.com/content/iml/2017/12/06/problems-mean-imputation.html)
4. [Missing data (University of Melbourne Statistical Consulting Centre) — 单靠数据无法判定缺失机制，需要理解数据生成过程；完全案例分析在 MCAR 下无偏，多重插补等方法在 MCAR/MAR 下无偏](https://scc.ms.unimelb.edu.au/resources/preparing-your-data/missing-data)
5. [Single-Valued Imputation (Data Science in Practice) — 单一取值插补会人为降低方差，从而高估结果的确定程度](https://afraenkel.github.io/ds-in-practice/content/06/single-valued-imputation.html)

---

原文：https://pangzhengboyin.com/articles/why-deleting-missing-values-biases-conclusions-49128789

> **庞征博引** · 想学的，慢慢都会
>
> 庞征博引是把想学的东西写成连载的 AI 学习工具。说出想学什么，它会先了解你的基础，再把主题写成一篇篇 5–10 分钟能读完的文章；边读边问，接下来学什么跟着你走。这篇就是这样写出来的。
>
> 开始你自己的连载 → https://pangzhengboyin.com
