3. 缺失机制:MCAR、MAR、MNAR 的定义与区别

聊模态缺失,不能光知道「缺了数据」就完了。你得搞清楚——数据是怎么缺的?

我早年做医疗影像项目时,就踩过这个坑。当时 CT 和 MRI 两个模态,有一批样本的 MRI 全空。我心想「直接删掉算了」,结果模型在测试集上直接崩了。后来复盘才发现——缺失机制没搞明白,处理策略全白搭。

学术界把缺失机制分成三类:MCAR、MAR、MNAR。这三兄弟,决定了你该用哪种补全策略。

3.1 完全随机缺失(MCAR)

定义:数据缺失的概率与观测值、缺失值本身都无关。

说白了,就是「纯运气不好」。比如传感器突然断电、网络丢包、被试者不小心按错了按钮。缺失完全是随机的,跟数据本身没有任何关系。

数学表达:P(缺失 | X, Y) = P(缺失),常数概率。

缺失与否,跟数据值无关。

我个人的经验:MCAR 在实际项目中其实很少见。大部分「看起来随机」的缺失,仔细一查都有隐藏规律。比如某个传感器只在高温下失效——那就不是 MCAR。

特征 说明
缺失原因 设备故障、人为误操作、随机事件
对分布影响 不影响数据分布,可视为子样本
处理难度 最低,直接删除或简单插补即可
典型场景 实验室环境、受控实验

小技巧:判断是否 MCAR,可以用 Little's MCAR 检验。p 值大于 0.05,可以勉强接受 MCAR 假设。但别太信这个检验——样本量大时它太敏感,样本量小时它又没力。

3.2 随机缺失(MAR)

定义:数据缺失的概率依赖于其他已观测变量,但与缺失值本身无关。

举个例子:在问卷调查中,收入高的人更不愿意填收入项。但「是否缺失收入」跟「已填写的教育水平」相关。缺失的概率由已观测变量决定。

数学表达:P(缺失 | X_obs, X_mis) = P(缺失 | X_obs)

缺失概率只依赖已观测部分。

我遇到过的情况:做多模态情感识别时,音频模态经常缺失——但只在视频质量差的时候。也就是说,缺失跟「视频帧清晰度」这个已观测变量相关。这就是典型的 MAR。

MAR 是实际项目中最常见的缺失机制。大概占我遇到过的缺失案例的 60%-70%。

特征 说明
缺失原因 由其他已观测变量驱动
对分布影响 条件分布不变,边缘分布改变
处理难度 中等,需利用观测变量建模
典型场景 问卷调查、传感器部分失效

注意:MAR 假设下,如果缺失模型被正确指定,基于似然的处理方法(如 EM 算法、多重插补)可以得到无偏估计。但如果你忽略了缺失依赖的变量,结果就会偏。

3.3 非随机缺失(MNAR)

定义:数据缺失的概率依赖于缺失值本身。

这是最棘手的情况。比如:

  • 收入极高的人故意不填收入——缺失跟「高收入」这个未观测值相关
  • 病情严重的患者退出临床试验——缺失跟「病情恶化」相关
  • 传感器在测量值超出量程时失效——缺失跟「极端值」相关

数学表达:P(缺失 | X_obs, X_mis) 依赖于 X_mis 本身

缺失概率跟缺失值的大小有关。

我曾经踩过的坑:做金融风控时,用户资产数据大量缺失。我一开始按 MAR 处理,用其他特征插补。结果模型在高端客户群体上完全失效——因为资产越高的用户,越倾向于不填资产信息。这就是 MNAR,插补模型根本学不到真实分布。

特征 说明
缺失原因 由缺失值本身驱动
对分布影响 严重偏倚,无法直接恢复
处理难度 最高,需引入外部信息或敏感性分析
典型场景 敏感信息、极端值、退出偏倚

3.4 三种机制对比

我把它们放在一起对比,你一眼就能看出区别:

维度 MCAR MAR MNAR
缺失概率依赖 无 已观测变量 缺失值本身
可忽略性 可忽略 可忽略(条件) 不可忽略
删除法是否无偏 是 否 否
插补难度 低 中 高
是否需要领域知识 不需要 部分需要 强烈需要
实际出现频率 低(~10%) 高(~65%) 中(~25%)

我的建议:拿到数据后,先别急着补全。花时间分析缺失模式——画缺失热力图、做缺失变量与观测变量的相关性检验。很多时候,缺失机制本身就能告诉你数据质量问题的根源。

3.5 缺失机制与模态缺失的关系

在多模态场景下,缺失机制会变得更复杂。因为不同模态之间可能存在交叉依赖。

举个例子:

  • MCAR:摄像头被遮挡,导致视频帧随机丢失
  • MAR:在嘈杂环境中,音频质量差导致语音识别失败——缺失依赖于「环境噪声」这个已观测变量
  • MNAR:当用户表情极度负面时,他们倾向于转头避开摄像头——缺失跟「负面表情」这个未观测值相关

嗯,这里要注意:模态缺失往往不是单一机制。同一个数据集里,可能同时存在 MCAR、MAR、MNAR 的混合情况。比如某个模态在某些样本上是 MCAR,在其他样本上是 MAR。

下面这张图,帮你理清三种缺失机制的核心逻辑:

三种缺失机制对比 MCAR 缺失概率 = 常数 与数据值完全无关 纯随机事件 MAR 依赖已观测变量 P(缺失 | X_obs) 可建模预测 MNAR 依赖缺失值本身 P(缺失 | X_mis) 最难处理 处理难度:MCAR < MAR < MNAR 实际项目中 MAR 最常见,MNAR 最容易被忽视 MCAR 处理 直接删除 简单均值插补 MAR 处理 多重插补 EM 算法 MNAR 处理 敏感性分析 引入外部信息

3.6 如何判断缺失机制?

说实话,从数据本身严格区分 MCAR、MAR、MNAR 并不容易。因为 MNAR 涉及未观测值,你永远无法完全验证。

但我有一些实用经验:

  1. 先做可视化分析:画缺失热力图,看缺失是否集中在某些特征或样本上
  2. 分组对比:把样本按「是否缺失」分组,比较其他特征的分布差异
  3. 逻辑推理:结合业务场景思考——缺失是否可能跟未观测因素有关?
  4. 敏感性分析:假设不同的缺失机制,看模型结果是否稳健

避坑指南:我曾经在项目里默认所有缺失都是 MAR,结果模型上线后效果远差于预期。后来发现是 MNAR——缺失值本身就有信息量。所以,永远不要默认缺失机制。花时间分析,比花时间调参更重要。