跳到主要内容

均值、中位数、众数插补

一、直观理解:空格里填一个“最有代表性”的数​

均值 / 中位数 / 众数插补属于单值插补:某个位置缺了数,就用该变量在训练集上算出来的一个代表性统计量去填。

  • 均值:用平均水平填空,适合近似对称的连续变量(如标准化后的温度误差);
  • 中位数:用排序后的正中间填空,适合有偏态或极端值的连续变量(如收入、房价);
  • 众数:用出现次数最多的类别填空,适合名义变量(如颜色、支付方式)。

可以想象统计同学身高时有人没写:你不会去编一个奇奇怪怪的身高,而是先看全班一般多高——对称时用平均,有个别篮球队员拉高均值时用中位数更稳妥;若问的是“最常选的社团”,则填出现最多的那个选项。

这种方法的最大优点是透明、可复现、常作基线;最大代价是:所有缺失位置都填成同一个数,会在直方图里制造一根人工尖峰,压缩方差,并削弱变量间相关。它假装“我们准确知道缺的是这个中心值”,却完全不反映缺失本身的不确定性。

二、适用场景与优缺点​

类型说明
适用场景缺失比例较低;需要快速建立可运行基线;连续变量近似 MCAR,或仅作后续复杂方法的对照;树模型等对单值填充不极端敏感的场景;类别变量用众数做简单补全。
核心优点实现极简单;参数少(就是一个统计量);中位数较抗异常;便于在论文中清楚描述规则;不会像错误的回归插补那样引入复杂模型偏差。
局限与缺点严重低估方差与标准误;扭曲相关 / 协方差;在 MAR 下通常有偏;众数可能不唯一;填补值无“不确定性”刻画;缺失比例高时会让大量样本变成同一个假值。

使用前通常需要完成以下检查:

  1. 各变量缺失率与缺失模式,估计填补会“复制”多少遍同一个值;
  2. 连续变量分布形态:对称 → 均值;偏态 / 有极端值 → 中位数;
  3. 类别变量的众数是否稳定、是否存在多个并列众数;
  4. 统计量是否只在训练集上估计;
  5. 是否需要同步生成“是否曾缺失”的指示变量,保留缺失信号。

三、核心原理:用边缘统计量替换缺失位​

1. 一般形式​

对变量 jj,在训练集观测到的集合 Oj\mathcal{O}_j 上估计 θ^j\hat\theta_j,则

xij∗={xij,若 xij 已观测θ^j,若 xij 缺失x_{ij}^{*}= \begin{cases} x_{ij}, & \text{若 }x_{ij}\text{ 已观测}\\ \hat\theta_j, & \text{若 }x_{ij}\text{ 缺失} \end{cases}

2. 三种 θ^j\hat\theta_j​

均值

θ^j=xˉj=1∣Oj∣∑i∈Ojxij\hat\theta_j=\bar x_j=\frac{1}{|\mathcal{O}_j|}\sum_{i\in\mathcal{O}_j}x_{ij}

中位数

θ^j=median{xij:i∈Oj}\hat\theta_j=\mathrm{median}\{x_{ij}:i\in\mathcal{O}_j\}

众数(类别)

θ^j=arg⁡max⁡c#{i∈Oj:xij=c}\hat\theta_j=\arg\max_{c}\#\{i\in\mathcal{O}_j:x_{ij}=c\}

若多个类别计数相同,需预先规定平局规则(如按业务优先级、或按字典序)。

3. 为何会压缩方差​

设变量真方差为 σ2\sigma^2,以均值插补后,所有缺失位等于 xˉ\bar x,对样本方差的贡献为 0。缺失越多,经验方差越被向下拉,基于该方差的置信区间会过于乐观。相关矩阵同理:填成常数会把该变量与其他变量的相关向 0 拉。

4. 缺失指示变量​

定义

rij=I(xij 原本缺失)r_{ij}=\mathbb{I}(x_{ij}\text{ 原本缺失})

把 rijr_{ij} 与填补后的 xij∗x_{ij}^{*} 一并送入模型,有时能部分吸收 MAR 信息(“敢不填的人”本身是一种特征)。这不能创造未观测真值,但往往优于“ silently 填完假装完整”。

5. 分组插补​

若存在自然组别(性别、地区、工艺号),可在组 gg 内估计 θ^j,g\hat\theta_{j,g},用同组统计量填补。这比全局均值更合理,前提是组内样本量足够、且测试时组别可知。

四、关键决策 / 如何选参数​

1. 均值还是中位数?​

判断更倾向
近似对称、无显著极端值均值
右偏 / 左偏、有离群点中位数
后续强依赖方差估计、推断两者都只是基线,考虑多重插补
已标准化的残差型变量均值常够用

2. 众数的细节​

  • 先统一类别编码与大小写、去空格;
  • 缺失本身不要参与众数计数;
  • 高度不平衡类别下,众数几乎总是多数类,可能掩盖稀有类信息——此时更宜把“缺失”单列为一级。

3. 缺失率阈值​

经验讨论(非硬性):

  • <5%:单值插补作主方案往往可接受(仍要做机制判断);
  • 5%–20%:可作基线,主结论需对照更合理方法;
  • >20%:大量假值重复,解释风险高,优先删变量、找辅助变量或模型化缺失。

4. 训练 / 测试与交叉验证​

θ^j\hat\theta_j 只能来自训练折;测试集缺失用训练统计量填。CV 每一折重估。

5. 是否加随机噪声​

有人在均值上加 N(0,σ^2)N(0,\hat\sigma^2) 噪声以避免尖峰。这能部分恢复边缘方差,但相关结构仍不真,且单次随机会损害可复现性——若走这条路,更接近简陋版多重插补,应设种子并做多次。

五、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. 插补前后均值 / 方差 / 相关的对比(证明方差被压缩的程度);
  6. 与直接删除或其他插补在下游指标上的差异;
  7. 明确局限:推断用标准误可能偏小。

若论文做的是预测竞赛导向,重点看验证集误差是否改善;若做的是参数解释与置信区间,单值插补的“漂亮 pp 值”不可全信。

七、常见误区​

1. 用全数据(含测试集)算均值再填​

典型泄漏。参数必须来自训练折。

2. 偏态变量强行均值插补​

被极端值拉高的均值会把大量缺失填成“偏高的假富人”,中位数通常更稳。

3. 把插补后的数据当成完整调查做天真推断​

方差缩小、有效样本量虚高,置信区间过窄。

4. 众数平局未定义​

不同运行若预处理顺序不同,可能填出不同类别,损害复现。

5. 缺失率很高仍满足于单值填补​

直方图一根柱子顶天,模型学到的是“缺失 → 常数”,而非真实关系。

八、小结​

均值、中位数、众数插补用变量自身的中心趋势或优势类别填空,是最清晰的单值插补基线:对称连续用均值,偏态连续用中位数,类别用众数。

它的核心思想可以概括为:

空着的格子先用“这一列最平常的样子”垫上,好让模型跑起来——但要记住,垫上去的是代表值,不是真相,更不是免费的确定性。

它适合低缺失、要透明可复现的场景,并强烈建议配合缺失指示与对照实验。一旦缺失机制复杂或结论依赖不确定度,就应升级到 KNN、模型插补或多重插补,而不是把单值填补包装成完整解决方案。