均值、中位数、众数插补
一、直观理解:空格里填一个“最有代表性”的数
均值 / 中位数 / 众数插补属于单值插补:某个位置缺了数,就用该变量在训练集上算出来的一个代表性统计量去填。
- 均值:用平均水平填空,适合近似对称的连续变量(如标准化后的温度误差);
- 中位数:用排序后的正中间填空,适合有偏态或极端值的连续变量(如收入、房价);
- 众数:用出现次数最多的类别填空,适合名义变量(如颜色、支付方式)。
可以想象统计同学身高时有人没写:你不会去编一个奇奇怪怪的身高,而是先看全班一般多高——对称时用平均,有个别篮球队员拉高均值时用中位数更稳妥;若问的是“最常选的社团”,则填出现最多的那个选项。
这种方法的最大优点是透明、可复现、常作基线;最大代价是:所有缺失位置都填成同一个数,会在直方图里制造一根人工尖峰,压缩方差,并削弱变量间相关。它假装“我们准确知道缺的是这个中心值”,却完全不反映缺失本身的不确定性。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 缺失比例较低;需要快速建立可运行基线;连续变量近似 MCAR,或仅作后续复杂方法的对照;树模型等对单值填充不极端敏感的场景;类别变量用众数做简单补全。 |
| 核心优点 | 实现极简单;参数少(就是一个统计量);中位数较抗异常;便于在论文中清楚描述规则;不会像错误的回归插补那样引入复杂模型偏差。 |
| 局限与缺点 | 严重低估方差与标准误;扭曲相关 / 协方差;在 MAR 下通常有偏;众数可能不唯一;填补值无“不确定性”刻画;缺失比例高时会让大量样本变成同一个假值。 |
使用前通常需要完成以下检查:
- 各变量缺失率与缺失模式,估计填补会“复制”多少遍同一个值;
- 连续变量分布形态:对称 → 均值;偏态 / 有极端值 → 中位数;
- 类别变量的众数是否稳定、是否存在多个并列众数;
- 统计量是否只在训练集上估计;
- 是否需要同步生成“是否曾缺失”的指示变量,保留缺失信号。
三、核心原理:用边缘统计量替换缺失位
1. 一般形式
对变量 ,在训练集观测到的集合 上估计 ,则
2. 三种
均值
中位数
众数(类别)
若多个类别计数相同,需预先规定平局规则(如按业务优先级、或按字典序)。
3. 为何会压缩方差
设变量真方差为 ,以均值插补后,所有缺失位等于 ,对样本方差的贡献为 0。缺失越多,经验方差越被向下拉,基于该方差的置信区间会过于乐观。相关矩阵同理:填成常数会把该变量与其他变量的相关向 0 拉。
4. 缺失指示变量
定义
把 与填补后的 一并送入模型,有时能部分吸收 MAR 信息(“敢不填的人”本身是一种特征)。这不能创造未观测真值,但往往优于“ silently 填完假装完整”。
5. 分组插补
若存在自然组别(性别、地区、工艺号),可在组 内估计 ,用同组统计量填补。这比全局均值更合理,前提是组内样本量足够、且测试时组别可知。
四、关键决策 / 如何选参数
1. 均值还是中位数?
| 判断 | 更倾向 |
|---|---|
| 近似对称、无显著极端值 | 均值 |
| 右偏 / 左偏、有离群点 | 中位数 |
| 后续强依赖方差估计、推断 | 两者都只是基线,考虑多重插补 |
| 已标准化的残差型变量 | 均值常够用 |
2. 众数的细节
- 先统一类别编码与大小写、去空格;
- 缺失本身不要参与众数计数;
- 高度不平衡类别下,众数几乎总是多数类,可能掩盖稀有类信息——此时更宜把“缺失”单列为一级。
3. 缺失率阈值
经验讨论(非硬性):
- <5%:单值插补作主方案往往可接受(仍要做机制判断);
- 5%–20%:可作基线,主结论需对照更合理方法;
- >20%:大量假值重复,解释风险高,优先删变量、找辅助变量或模型化缺失。
4. 训练 / 测试与交叉验证
只能来自训练折;测试集缺失用训练统计量填。CV 每一折重估。
5. 是否加随机噪声
有人在均值上加 噪声以避免尖峰。这能部分恢复边缘方差,但相关结构仍不真,且单次随机会损害可复现性——若走这条路,更接近简陋版多重插补,应设种子并做多次。
五、MATLAB 示例
rng(2);
% 连续两列 + 类别一列(用数值编码 1/2/3 演示)
X = [
1.0, 10, 1;
2.0, NaN, 2;
NaN, 14, 1;
4.0, 18, 1;
5.0, 20, 3;
3.5, NaN, 2;
NaN, 16, NaN
];
% ----- 划分训练 / 测试(演示防泄漏)-----
trainIdx = 1:5;
testIdx = 6:7;
Xtr = X(trainIdx, :);
Xte = X(testIdx, :);
% 训练集上估计
mu = mean(Xtr(:, 1:2), 1, "omitnan");
med = median(Xtr(:, 1:2), 1, "omitnan");
% 众数:第 3 列
catTr = Xtr(:, 3);
catTr = catTr(~isnan(catTr));
u = unique(catTr);
counts = arrayfun(@(c) sum(catTr == c), u);
[~, ix] = max(counts);
modeCat = u(ix);
fprintf("训练均值 = [%.3f, %.3f]\n", mu(1), mu(2));
fprintf("训练中位数 = [%.3f, %.3f]\n", med(1), med(2));
fprintf("训练众数(列3) = %g\n", modeCat);
% 均值插补
Xtr_mean = Xtr;
Xte_mean = Xte;
for j = 1:2
Xtr_mean(isnan(Xtr_mean(:, j)), j) = mu(j);
Xte_mean(isnan(Xte_mean(:, j)), j) = mu(j);
end
% 中位数插补
Xtr_med = Xtr;
Xte_med = Xte;
for j = 1:2
Xtr_med(isnan(Xtr_med(:, j)), j) = med(j);
Xte_med(isnan(Xte_med(:, j)), j) = med(j);
end
% 众数插补第 3 列
Xtr_mode = Xtr; Xte_mode = Xte;
Xtr_mode(isnan(Xtr_mode(:, 3)), 3) = modeCat;
Xte_mode(isnan(Xte_mode(:, 3)), 3) = modeCat;
disp("测试集均值插补后:");
disp(Xte_mean);
disp("测试集中位数插补后:");
disp(Xte_med);
% 使用 fillmissing(注意:下列写法用当前矩阵统计量,分集时请手动如上面)
Xtr_fillmed = fillmissing(Xtr(:, 1:2), "constant", med);
% 缺失指示
Rtr = isnan(Xtr);
disp("训练集缺失指示 R:");
disp(Rtr);
% 方差被压缩的演示:对第 2 列
v_omit = var(Xtr(:, 2), 0, "omitnan");
v_meanImp = var(Xtr_mean(:, 2), 0);
fprintf("列2 方差: 仅观测=%.3f, 均值插补后=%.3f\n", v_omit, v_meanImp);
% 直方图尖峰
figure;
subplot(1, 2, 1);
histogram(Xtr(~isnan(Xtr(:, 2)), 2));
title("列2 原始观测");
subplot(1, 2, 2);
histogram(Xtr_mean(:, 2));
title("列2 均值插补后(易见尖峰)");
对 table 中的混合类型,可按变量类型分别 fillmissing:
% 示例:数值列用中位数,字符串类别列用众数
% T = fillmissing(T, "movmedian", 5, "DataVariables", @isnumeric); % 滑动中位数另一选择
六、如何解释结果
填进去的值应表述为:
在缺乏更好信息时,用该变量训练期的中心趋势(或优势类别)作为占位,而不是个体真值的精确还原。
报告建议包含:
- 各变量缺失数量与比例;
- 每个变量选用的统计量及选择理由(分布形态、变量类型);
- 统计量的数值及估计样本(训练集约多少个非缺失);
- 是否生成缺失指示变量;
- 插补前后均值 / 方差 / 相关的对比(证明方差被压缩的程度);
- 与直接删除或其他插补在下游指标上的差异;
- 明确局限:推断用标准误可能偏小。
若论文做的是预测竞赛导向,重点看验证集误差是否改善;若做的是参数解释与置信区间,单值插补的“漂亮 值”不可全信。
七、常见误区
1. 用全数据(含测试集)算均值再填
典型泄漏。参数必须来自训练折。
2. 偏态变量强行均值插补
被极端值拉高的均值会把大量缺失填成“偏高的假富人”,中位数通常更稳。
3. 把插补后的数据当成完整调查做天真推断
方差缩小、有效样本量虚高,置信区间过窄。
4. 众数平局未定义
不同运行若预处理顺序不同,可能填出不同类别,损害复现。
5. 缺失率很高仍满足于单值填补
直方图一根柱子顶天,模型学到的是“缺失 → 常数”,而非真实关系。
八、小结
均值、中位数、众数插补用变量自身的中心趋势或优势类别填空,是最清晰的单值插补基线:对称连续用均值,偏态连续用中位数,类别用众数。
它的核心思想可以概括为:
空着的格子先用“这一列最平常的样子”垫上,好让模型跑起来——但要记住,垫上去的是代表值,不是真相,更不是免费的确定性。
它适合低缺失、要透明可复现的场景,并强烈建议配合缺失指示与对照实验。一旦缺失机制复杂或结论依赖不确定度,就应升级到 KNN、模型插补或多重插补,而不是把单值填补包装成完整解决方案。