深夜的档案室里,侦探老范翻着一沓被水泡过的证人证词:有些页被撕掉了,有些字迹被咖啡晕开,还有几页被凶手刻意涂黑。他要在残缺的记录中还原案件背后的人物关系网——谁影响了谁、谁操纵了谁。这正是「数据缺失下的因果发现」困境:手里的观测数据就像这份残缺证词,却仍要勾勒出变量之间最可能的因果结构。统计学家为此发明了一套「打分系统」——基于分数的方法。它像一位公正的评审,对每份候选关系网打分:既能解释看到的证词,又不把关系网画得过于复杂。面对缺失,策略还要升级:先判断证词是怎么丢的(缺失机制),再决定是删掉残页(完整样本)、凭经验补写(插补),还是用已知信息反复推敲(EM 算法)。本文就用老范的破案笔记,带你完整理解这条技术链路。

岗位关联

对 AI 从业者而言,掌握缺失数据下的基于分数方法,意味着在真实脏乱数据中依然能学到可信的因果结构,这是做可解释模型、反事实推理和稳健决策的硬基本功。

目录
  1. 可视化演示
  2. 缺失数据类型
  3. 评分函数基础
  4. 缺失影响分析
  5. 插补与EM策略
  6. 结构EM融合
  7. 性能优化工程
  8. 案例与陷阱
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示因果发现中数据缺失处理:MCAR/MAR/MNAR三种缺失机制矩阵对比、EM算法E步M步迭代收敛、多重插补Rubin规则合并,交互切换核心维度。

本节配有交互动效(进入视口后自动加载,约 3KB)。

三种缺失机制对比 MCAR: 缺失与所有变量无关,列删除无偏但样本利用率低 MAR: 缺失依赖已观测变量,条件独立可忽略 MCAR: P(M|X)=P(M) | MAR: P(M|X_obs,X_mis)=P(M|X_obs) 缺失机制决定处理方法的适用性

缺失数据类型

老范把残缺的证词摊在桌上,按丢失原因分成三堆:第一堆是被窗缝吹进的风雨打湿的,哪页湿完全碰运气;第二堆是某个证人的证词总是丢,而这位证人恰好是案发现场附近咖啡店的常客;第三堆则奇怪——凡是提到「那笔钱去向」的证词,全都不见了。侦探的经验告诉他,丢法不同,后续的推理策略就完全不同。

统计上,这三堆对应三种缺失机制:MCAR(完全随机缺失)、MAR(条件随机缺失) 和 MNAR(非随机缺失)。形式化地说,我们引入一个缺失指示矩阵 $M$,$M_{ij}=1$ 表示第 $i$ 条样本的第 $j$ 个变量缺失。$D_{\text{obs}}$ 是观测到的数据,$D_{\text{miss}}$ 是缺失的数据,$\phi$ 是控制缺失过程的参数。三者区别可以写成一个条件概率关系:

老范把这些标签贴到案卷上,心里清楚:如果缺失像风雨打湿一样完全随机,那大可以省很多力气;如果缺失和已知线索有关,就要用已知信息补全;如果缺失本身就是秘密的一部分,那任何补全都必须格外小心。

P(M∣Dobs,Dmiss,ϕ)=P(M∣Dobs,ϕ)P(M \mid D_{\text{obs}}, D_{\text{miss}}, \phi) = P(M \mid D_{\text{obs}}, \phi)
  1. 缺失指示 $M$记录每个数据格是否缺失的 0/1 矩阵,像侦探在案卷上标记「此页缺失」的红章。
    Mij∈{0,1}M_{ij} \in \{0, 1\}
  2. 观测与缺失数据 $D_{\text{obs}}, D_{\text{miss}}$$D_{\text{obs}}$ 是读得清的证词,$D_{\text{miss}}$ 是撕掉或涂黑的部分。
    D=(Dobs,Dmiss)D = (D_{\text{obs}}, D_{\text{miss}})
  3. 条件独立关系的含义等式说明在知道 $D_{\text{obs}}$ 后,缺失与否不再依赖 $D_{\text{miss}}$ 本身。这就是 MAR 的定义;若进一步 $P(M \mid \phi)$ 连 $D_{\text{obs}}$ 也不依赖,则退化为 MCAR;若等式不成立,缺失落入 MNAR。
    M⊥ ⁣ ⁣ ⁣⊥Dmiss∣Dobs,ϕM \perp\!\!\!\perp D_{\text{miss}} \mid D_{\text{obs}}, \phi

评分函数基础

老范要给每份「人物关系网假设」打分。打分表上有两栏:一栏是「证据覆盖率」——这份关系网能解释多少份看得清的证词;另一栏是「复杂度扣分」——关系网里是不是塞了太多不必要的箭头。合理的假设应该像奥卡姆剃刀:用最简洁的网络解释最多的证据。

这个思路落到因果发现里就是基于分数方法:对每个候选因果图 $G$,用观测数据 $D$ 计算一个分数,然后选分数最高的图。最常用的分数之一是 BIC(贝叶斯信息准则)。它的形式很优雅:

除了 BIC,还有贝叶斯评分如 BDeu,但 BIC 因为计算简单而成为工程主流。BIC 还有一个关键性质:它可以在每个变量上分解——整张图的分数等于各变量「局部分数」之和。老范的打分表因此可以拆成一张张分表,哪个环节乱了就重算哪张,不必推翻整个推理。

BIC(G∣D)=log⁡P(D∣θ^,G)−d2log⁡N\text{BIC}(G \mid D) = \log P(D \mid \hat{\theta}, G) - \frac{d}{2} \log N
  1. 候选图 $G$ 与数据 $D$$G$ 是一张有向无环图,描述变量间的因果骨架;$D$ 是全部观测样本。
    G=(V,E),D={D1,…,DN}G = (V, E),\quad D = \{D_1, \dots, D_N\}
  2. 参数估计 $\hat{\theta}$在给定图 $G$ 后,用极大似然估计出的最优参数,相当于让这张图「最努力」解释数据。
    θ^=arg⁡max⁡θP(D∣θ,G)\hat{\theta} = \arg\max_{\theta} P(D \mid \theta, G)
  3. 拟合项 $\log P(D \mid \hat{\theta}, G)$对数似然,衡量模型对数据的解释能力,证词覆盖越全,数值越大。
    log⁡P(D∣θ^,G)\log P(D \mid \hat{\theta}, G)
  4. 惩罚项 $\frac{d}{2} \log N$$d$ 是图中参数个数,$N$ 是样本量。参数越多、样本越大,扣分越狠,防止画过度复杂的关系网。
    d2log⁡N\frac{d}{2} \log N

缺失影响分析

老范发现,一旦证词残缺,他的推理就容易出岔子。最典型的一次:关键证人的证词全被撕了,他只能从留下的旁证推断,结果把「受害者在场」误判成「嫌疑人在场」,方向完全颠倒了。数据缺失对因果学习的影响,正是这种「看不见的证据在偷偷带偏结论」。

首先,参数估计会出现偏差。只用完整样本计算均值、回归系数时,如果缺失不是完全随机,剩下的样本就不再代表总体,估计量自然偏移。其次,结构学习会误判:BIC 分数依赖似然,而缺失让似然函数变得复杂且可能多峰,贪心搜索更容易停在错误的图上;尤其当缺失与某变量取值相关时,该变量的因果边会被系统性低估或高估。最后,搜索空间被膨胀——为了正确计算一个图的分数,原则上要考虑所有缺失模式下的联合分布,等价于侦探要把每一种「证词丢失组合」都纳入推演。

这几个效应叠加,会让老范得出看似「分数不错」但因果方向错误的关系网。因此「分数高」和「关系网对」之间,隔着缺失机制这一道坎,盲目打分前必须先想清楚缺失是怎么发生的。

插补与EM策略

面对缺页,老范有三种补救手段:第一种是「只读完整的页」——把有缺口的证词直接扔到一边;第二种是「凭经验补写」——按已有证词的均值或最可能内容,把空白处填上;第三种是「反复交叉回忆」——让不同证人的记忆互相印证,迭代式地还原被涂掉的部分。

统计上,第一种叫完整样本法(listwise deletion):删掉任何含缺失的行。简单,但样本量骤减,且缺失非随机时产生严重偏差。第二种叫插补,均值插补、回归插补属单值插补;多重插补则生成多份不同的补全数据,综合多次分析的不确定性。第三种是 EM(期望最大化)算法,它不直接填数,而是在「猜测缺失值」和「更新参数」之间来回迭代。EM 的核心是最大化一个期望对数似然:

EM 在处理 MAR 数据时表现稳健,因为它不武断地填一个固定值,而是用「概率期望」去量化不确定性。老范把三种手段都放进工具箱:时间紧就用完整样本,缺得少就插补,想严谨就上 EM。

Q(θ∣θ(t))=EZ∣D,θ(t)[log⁡P(D,Z∣θ)]Q(\theta \mid \theta^{(t)}) = \mathbb{E}_{Z \mid D, \theta^{(t)}}[\log P(D, Z \mid \theta)]
  1. 缺失变量 $Z$把每条样本里缺失的部分看作潜在变量 $Z$,侦探暂时不知道它是什么。
    Z=DmissZ = D_{\text{miss}}
  2. 当前参数 $\theta^{(t)}$第 $t$ 轮迭代时侦探对世界的当前认知。
    θ(t)\theta^{(t)}
  3. 条件期望 $\mathbb{E}_{Z \mid D, \theta^{(t)}}$在已知观测数据和当前认知下,对缺失变量的所有可能取值求平均——相当于综合所有证人的「交叉回忆」。
    EZ∣D,θ(t)[⋅]\mathbb{E}_{Z \mid D, \theta^{(t)}}[\cdot]
  4. 对数似然 $\log P(D, Z \mid \theta)$补全后的完整案件对数似然,E 步求期望、M 步极大化,反复直到收敛。
    θ(t+1)=arg⁡max⁡θQ(θ∣θ(t))\theta^{(t+1)} = \arg\max_{\theta} Q(\theta \mid \theta^{(t)})

结构EM融合

老范慢慢意识到,等证据收集齐了再画关系网已经来不及——凶手可能继续行动。于是他改成边调查边更新:先画一版粗略关系网,根据残缺证词猜一下缺失内容,再基于补全后的猜测调整关系网,再重新猜测……直到关系网和补全内容都不再变化。

这正是结构 EM(Structural EM) 的核心思想:普通 EM 只更新参数(关系网固定),结构 EM 则把「结构搜索」和「缺失补全」绑在一起。每轮迭代中,贪心搜索会尝试增边、删边、转边(add / delete / revoke),对每个候选图用当前参数下的期望充分统计量算出分数:

贪心搜索每走一步,只影响少数变量的局部分数,因此结构 EM 可以高效地反复评分、反复选边。收敛控制方面,通常会设置「连续若干轮分数提升小于阈值」就停止,避免白白消耗算力。这正是老范的「边查边改」策略:每轮调查都瞄准最有价值的线索,直到关系网稳定成型。

Score(G)=∑j=1p(Eq[log⁡P(Xj∣Paj,θ^j)]−dj2log⁡N)\text{Score}(G) = \sum_{j=1}^{p} \left( \mathbb{E}_{q}[\log P(X_j \mid \text{Pa}_j, \hat{\theta}_j)] - \frac{d_j}{2} \log N \right)
  1. 全局求和 $\sum_{j=1}^{p}$对 $p$ 个变量逐一累加局部分数,得益于 BIC 的可分解性。
    ∑j=1p[⋅]\sum_{j=1}^{p}[\cdot]
  2. 期望局部对数似然 $\mathbb{E}_{q}[\log P(X_j \mid \text{Pa}_j, \hat{\theta}_j)]$$q$ 是当前参数下缺失变量的分布,$\text{Pa}_j$ 是变量 $X_j$ 在当前图中的父节点集合;对缺失求期望后再评估该变量的拟合度。
    Eq[log⁡P(Xj∣Paj,θ^j)]\mathbb{E}_{q}[\log P(X_j \mid \text{Pa}_j, \hat{\theta}_j)]
  3. 局部惩罚 $-\frac{d_j}{2} \log N$$d_j$ 是变量 $j$ 的参数数量,每个局部分数都自带复杂度惩罚,防止贪心搜索狂加边。
    −dj2log⁡N-\frac{d_j}{2} \log N

性能优化工程

老范的档案室里有二十个实习生帮忙整理证词。他发现,只要分工明确,案子就能快很多:有人专门比对咖啡店证人的证词,有人专门追踪那笔钱的流向,互不干扰,最后汇总。工程上的性能优化,思路完全一致。

基于分数方法的计算瓶颈在于:结构搜索要评估大量候选图,每张图都要算 BIC。好在 BIC 可分解,于是工程上有三把利器:

第一,局部分数缓存。只重新计算发生改变的变量局部分数,其余直接查缓存。老范只重读新增的那份证词,不必把整本案卷从头翻一遍。第二,剪枝与并行。搜索过程中,明显低分的候选父节点集合可以直接剪掉;不同变量的局部分数互相独立,可以扔到多个 CPU 核上并行算。第三,收敛诊断。设定分数提升阈值,连续几轮提升不到阈值就提前终止;也可以用 bootstrap 重复结构学习,看结构是否稳定。

这些优化让原本需要数天的因果发现压缩到几小时。老范的经验是:真正耗时的往往不是「打分」,而是「反复打同一张图的分数」——缓存与并行,本质上是把重复劳动交给机器,让侦探把精力留给判断。

案例与陷阱

老范合上档案,给实习生讲了两个真实案例。第一个是医学随访研究:医生想弄清「服药依从性 → 血压变化 → 心血管事件」的因果链,但随访中不少病人中途退出,留下大量缺失。好在退出与否通常和已记录的基线指标相关,属于 MAR,团队用多重插补 + BIC 结构搜索,稳健还原了因果路径。第二个是推荐系统的反事实评估:用户没点击某个商品,不代表「不喜欢」,这种缺失与未观察到的偏好本身有关,属于 MNAR。若直接把未交互当负样本,学出的因果图会严重偏差,需要显式对缺失机制建模。

这两个案例也照出三个常见陷阱。陷阱一:把 MNAR 当 MAR。 就像把凶手故意涂掉的供词当成被风吹湿的,结果自然南辕北辙。陷阱二:插补引入伪相关。 均值插补会压缩方差,让本不相关的变量显得相关,甚至画出虚假的因果箭头。陷阱三:动不动就用完整样本。 删除含缺失的行虽然省事,但在缺失比例高时样本量骤减,估计方差巨大,结构搜索也失去稳定性。

老范把这三条贴在案卷封面上:先判缺失机制,再选处理策略,最后用分数和领域知识双重校验。数据缺失不可怕,怕的是用想当然的方式去补。

AI 应用场景

医疗随访数据因果溯源

阶段:数据预处理 + 因果结构学习

解决的问题:电子病历中患者随访记录常有缺失(患者中途转院、拒绝复查),传统方法直接删行会损失大量样本且产生选择偏差。利用 MAR 假设下的多重插补与 BIC 结构搜索,可以稳定挖掘「治疗方案 → 中间指标 → 预后结局」的因果路径。

具体案例:某三甲医院分析 5000 例高血压患者随访数据,服药依从性记录缺失率 28%。用完整样本法搜索出的结构把「治疗」误判为「与预后无关」;改用多重插补 + 结构 EM 后,正确还原出「依从性 → 血压控制 → 心血管事件」的因果链,为临床路径优化提供依据。

电商推荐系统反事实推断

阶段:因果效应估计与决策

解决的问题:用户「未点击/未购买」既可能因为不喜欢,也可能因为没看到——这是典型的 MNAR 缺失。直接当负样本会严重低估推荐策略的真实效果。需要显式对缺失机制建模,并用考虑缺失的评分方法评估因果效应。

具体案例:某电商平台想评估「推送折扣券」是否真的提升复购。历史数据中 60% 用户从未打开推送(缺失与偏好相关)。团队引入缺失指示变量并基于分数方法对比不同因果图,识别出「打开推送」与「复购」的真实因果关系,避免把沉默用户误判为无兴趣用户。

工业传感器缺失根因分析

阶段:异常归因与根因诊断

解决的问题:生产线上温湿度、振动、压力传感器偶发断连,数据缺失常与设备工况有关(高温导致传感器漂移)。缺失处理不当会将故障根因学错。用 EM 补全 + 贪心结构搜索,可在缺失率 15%-30% 时仍定位缺陷源头。

具体案例:某汽车零部件厂商发现涂装车间次品率上升,但关键工艺参数记录有 20% 缺口。工程师用结构 EM 在缺失数据上学出「环境温度 → 喷涂厚度 → 次品率」的因果结构,锁定温控环节,次品率下降 22%。

Python 演示

python64 行
# -*- coding: utf-8 -*-"""数据缺失处理下的基于分数方法(BIC)演示。生成 X->Y->Z 的高斯数据,制造 30% 的 MCAR 缺失, 比较完整样本法与均值插补对 BIC 评分的影响。"""import numpy as np  def bic_gaussian(X, parents):    """计算高斯 BIC 分数, parents[j] 是变量 j 的父节点列表。"""    n, p = X.shape    ll, npar = 0.0, 0    for j in range(p):        pa = parents[j]        if pa:            A = np.column_stack([X[:, k] for k in pa] + [np.ones(n)])            beta = np.linalg.lstsq(A, X[:, j], rcond=None)[0]            resid = X[:, j] - A @ beta            npar += len(pa) + 1        else:            mu = X[:, j].mean()            resid = X[:, j] - mu            npar += 1        rss = float(resid @ resid) + 1e-12        ll += -0.5 * n * (np.log(2 * np.pi) + 1.0 + np.log(rss / n))    return ll - 0.5 * npar * np.log(n)  def mcar_mask(X, rate, seed=0):    rng = np.random.default_rng(seed)    mask = rng.random(X.shape) < rate    Xm = X.copy()    Xm[mask] = np.nan    return Xm  def complete_case(Xm):    return Xm[~np.isnan(Xm).any(axis=1)]  def mean_impute(Xm):    Xf = Xm.copy()    for j in range(Xf.shape[1]):        col = Xf[:, j]        col[np.isnan(col)] = np.nanmean(col)    return Xf  np.random.seed(42)n = 400x = np.random.normal(size=n)y = 1.6 * x + np.random.normal(size=n)z = -0.9 * y + np.random.normal(size=n)X = np.column_stack([x, y, z])Xm = mcar_mask(X, 0.3)truth = [[], [0], [1]]       # X -> Y -> Zwrong = [[], [], [0, 1]]     # 错误的 Y<-X->Z 三角 Xcc = complete_case(Xm)Xmi = mean_impute(Xm)print("完整样本法  样本量 =", len(Xcc))print("  正确图 BIC =", round(bic_gaussian(Xcc, truth), 2))print("  错误图 BIC =", round(bic_gaussian(Xcc, wrong), 2))print("均值插补    样本量 =", len(Xmi))print("  正确图 BIC =", round(bic_gaussian(Xmi, truth), 2))print("  错误图 BIC =", round(bic_gaussian(Xmi, wrong), 2))
目的:用合成数据直观展示「缺失处理方式不同,BIC 对候选因果图的排序可能发生变化」,帮助理解为何缺失处理是因果发现的前置关键步骤。
  1. def bic_gaussian(X, parents):定义高斯 BIC 计算函数,parents 用列表刻画候选因果图的父节点关系。
  2. beta = np.linalg.lstsq(A, X[:, j], rcond=None)[0]对变量 $X_j$ 关于其父节点做线性回归,得到条件分布参数。
  3. ll += -0.5 * n * (np.log(2 * np.pi) + 1.0 + np.log(rss / n))累加每个变量的高斯对数似然;rss 越小似然越高。
  4. return ll - 0.5 * npar * np.log(n)BIC = 拟合度 − 参数惩罚,体现奥卡姆剃刀。
  5. mask = rng.random(X.shape) < rate随机生成缺失位置,模拟 MCAR 缺失机制。
  6. def complete_case(Xm): return Xm[~np.isnan(Xm).any(axis=1)]完整样本法:删掉任何含缺失的行。
  7. col[np.isnan(col)] = np.nanmean(col)均值插补:用该列非缺失均值填补空洞。
  8. truth = [[], [0], [1]]真实结构:Y 的父节点是 X,Z 的父节点是 Y。
  9. wrong = [[], [], [0, 1]]错误候选:假设 Z 同时被 X 和 Y 直接影响。
  10. print("正确图 BIC =", round(bic_gaussian(Xmi, truth), 2))输出插补后两图分数,观察排序是否恢复。

常见误区

误区数据缺失比例很小,比如不到 5%,那我直接把含缺失的行删掉不就好了?反正影响不大。

正解缺失率低不等于影响小。如果缺失集中在关键变量上,或者缺失机制是 MNAR,哪怕 2% 的缺失也能把因果方向带偏。就像侦探把案卷里最关键的一页撕掉了,页数虽少,线索却断得致命。正确做法是先看缺失发生在哪些变量、什么机制,再决定删除还是插补。

为何常见:很多人习惯用「缺失占比」作为唯一衡量标准,忽略了缺失位置和缺失机制对因果推断的杠杆效应。

误区缺失值就用这一列的均值填上,简单又快,别人不都这么干吗?

正解均值插补会压缩变量方差,削弱变量间真实相关性,甚至制造虚假的强相关,导致 BIC 给错误因果图打出虚高分数。它把「不确定的空白」伪装成「确定的平均值」,侦探把模糊证词全写成「跟别人一样」,反而失去鉴别力。更稳妥的是多重插补或 EM,它们保留不确定性。

为何常见:均值插补的代码只有一行,结果也「能跑」,容易让人误以为统计上可靠。

误区MAR 和 MCAR 都是「随机缺失」,处理方式应该一样吧?

正解MCAR 是缺失与所有数据都无关,MAR 是缺失与观测到的数据有关、与缺失值本身无关。两者处理难度不同:MCAR 下直接删行几乎无偏;MAR 下删行会有偏差,但插补和 EM 能救回来,因为观测数据里有预测缺失的线索。把 MAR 当 MCAR,就是忽略证词丢失与已知线索的关联,白白浪费可用信息。

为何常见:两者名字里都带「随机」,加之教科书常把 MAR 放在 MCAR 之后讲,读者容易只记区别不记后果。

误区有了 EM 算法,缺失数据处理就一劳永逸了,什么缺失都不怕。

正解EM 在 MCAR 和 MAR 下表现良好,因为它假设缺失机制可忽略(即给定观测数据后,缺失与缺失值条件独立)。一旦遇到 MNAR,缺失本身就携带「真相」的信息,标准 EM 的期望补全会产生系统性偏差。这时必须显式对缺失机制建模,做敏感性分析。好比让相关证人回忆,可要是证词丢失正是因为回忆内容见不得光,那回忆本身就不可信。

为何常见:EM 数学优美、迭代可视化,容易让人高估它的适用范围,忽略公式推导中隐含的可忽略性假设。

误区网上代码里 BIC 经常取负数,我是不是该选 BIC 最小的那个图?

正解BIC 有两种等价形式:本文用的是「对数似然 − 惩罚项」,分数越大越好;另一种写法是「−2 对数似然 + 惩罚项」,数值越小越好。两种形式只差一个负号,但结论完全一致。混淆符号会导致把最优图当成最差图,就像侦探把满分卷当成零分卷。使用时先确认代码里 BIC 是「得分」还是「信息量」。

为何常见:不同教材和库对 BIC 的符号约定不统一,初学者照抄代码时很容易忽略定义变化。

面试题

Q1. 在三种缺失机制中,哪一种与数据本身的取值完全无关?

单选题 · easy

  • A.完全随机缺失(MCAR)← 正确答案
  • B.随机条件缺失(MAR)
  • C.非随机缺失(MNAR)
  • D.缺失与数据取值全部无关

答案:A。MCAR 下数据是否缺失与观测值、缺失值都无关,像证词被风吹雨打随机损坏;MAR 缺失与观测值有关,MNAR 缺失与缺失值本身有关。D 选项是 MCAR 的翻版描述,并非第四种机制。

Q2. BIC 分数的惩罚项随样本量 N 增长如何变化?

单选题 · easy

  • A.随样本量线性增长
  • B.按 N 的对数增长← 正确答案
  • C.按 N 的平方根增长
  • D.与样本量完全无关

答案:B。BIC 的惩罚项是 $\frac{d}{2}\log N$,随 $N$ 按对数增长。对数增长意味着样本再多,惩罚也只是缓慢增加,惩罚主要由参数个数 $d$ 决定,这与奥卡姆剃刀的「模型复杂度优先」思想一致。

Q3. 完整样本法的主要缺点是什么?

单选题 · easy

  • A.仅删含缺失的行并损失样本量← 正确答案
  • B.需要专门统计软件才能运行
  • C.只能用于连续变量不能处理离散
  • D.总是比插补方法计算复杂度高

答案:A。完整样本法把任何含缺失的行整体删除,实现简单,但丢失大量信息;若缺失机制并非 MCAR,剩下的样本还有代表性偏差,导致参数估计和结构学习都不准。它并不需要特殊软件,也非只能处理连续变量。

Q4. 分数可分解性对结构搜索有哪些好处?

多选题 · mid

  • A.可以仅重算局部分数实现增量更新← 正确答案
  • B.可以并行计算不同变量的局部分数← 正确答案
  • C.可以避免对观测数据的任何假设
  • D.可以直接得到无偏的参数估计

答案:AB。可分解性让整图分数等于各变量局部分数之和,因此增删一条边只需重算相关变量的分数,并可按变量并行计算。它不会消除数据假设,也不会自动让参数无偏——无偏性取决于模型设定和缺失处理方式。

Q5. EM 算法的 E 步主要做什么?

单选题 · mid

  • A.根据当前参数计算缺失变量的期望统计量← 正确答案
  • B.直接删除所有含缺失值的数据行
  • C.用固定常数一次性替换所有缺失值
  • D.枚举所有可能的因果图结构

答案:A。E 步在固定当前参数 $\theta^{(t)}$ 的条件下,对缺失变量 $Z$ 求期望,得到充分统计量的期望值;M 步再最大化该期望似然更新参数。B 是完整样本法,C 是单值插补,D 是结构搜索的暴力做法。

Q6. 关于 MCAR 与 MAR 的关系,哪些说法正确?

多选题 · mid

  • A.MCAR 是 MAR 的一种特殊情形← 正确答案
  • B.MAR 允许缺失与已观测变量相关← 正确答案
  • C.MCAR 假设丢因完全独立于数据← 正确答案
  • D.MAR 不依赖任何已观测变量

答案:ABC。若缺失概率既不依赖观测值也不依赖缺失值,即 MCAR,它天然满足 MAR 的条件(因为独立性更强),所以 MCAR 是 MAR 的特例。MAR 的缺失概率可与观测变量相关;D 则把它误说成了更强的 MCAR 条件。

Q7. 结构 EM 与普通 EM 的核心区别是什么?

单选题 · mid

  • A.结构 EM 同时更新图结构与参数← 正确答案
  • B.结构 EM 不需要处理缺失数据
  • C.结构 EM 只能处理连续变量
  • D.结构 EM 的复杂度一定更低

答案:A。普通 EM 在图结构固定的前提下迭代更新参数;结构 EM 把结构搜索也放进迭代,每轮既补全缺失、又尝试增删转边,最后图和参数同时收敛。它同样需要处理缺失,也不限于连续变量,复杂度通常更高而非更低。

Q8. 关于 MNAR 数据的处理,下列说法正确的有哪些?

多选题 · hard

  • A.忽视缺失机制直接插补可能引入系统性偏差← 正确答案
  • B.需要对缺失机制建模或做敏感性分析← 正确答案
  • C.插补次数足够多时结果一定无偏
  • D.完全随机缺失是 MNAR 的一种特例

答案:AB。MNAR 下缺失概率依赖于缺失值本身,标准插补和 EM 的可忽略性假设被破坏,估计会系统性偏差,因此要显式建模缺失机制或做敏感性分析。插补次数再多也消除不了模型设定错误;MCAR 是 MAR 的特例,与 MNAR 无关。

Q9. 为什么数据缺失会让基于分数方法的搜索变慢?

单选题 · hard

  • A.每张候选图的分数需考虑多种缺失模式组合← 正确答案
  • B.候选图数量会因缺失机制直接翻倍
  • C.搜索算法必须额外学习一张缺失指示图
  • D.缺失数据让变量的取值域无限扩张

答案:A。缺失出现后,似然函数要对所有可能的缺失值组合求积分或求和,局部分数不再有解析闭式,评分成本显著上升,结构搜索的总耗时也就膨胀了。因果图的候选数量本身不因缺失而翻倍,算法也不需要专门学缺失指示图。

Q10. 当缺失机制为 MNAR 时,忽略缺失机制直接使用标准 EM 的后果是什么?

单选题 · extreme

  • A.参数估计可能不一致并出现系统性偏差← 正确答案
  • B.得到无偏估计且统计效率更高
  • C.结构搜索停止但参数不更新
  • D.缺失值会被自动地精确恢复

答案:A。标准 EM 的可忽略性假设要求缺失与缺失值条件独立,MNAR 恰恰破坏该假设,因此迭代收敛点通常不是真实极大似然估计,参数产生系统性偏差,结构搜索也会被误导。EM 不会自动精确恢复缺失值,它的期望只是统计意义上的填补。