深夜的侦探社里,老侦探盯着白板上两条线索:洒水器开启,路面很湿。他摇摇头说:“这两条线索总是同时出现,但真正让它们同时出现的,是昨夜那场没人注意的暴雨。暴雨就是那个躲在阴影里的幕后因素。”在数据科学中,这样的幕后因素叫“隐变量”。如果办案时只盯着看得见的线索,很容易把相关当成因果;如果能揪出隐变量,真相才会浮出水面。隐变量因果发现就是一套系统的侦探方法,而深度因果发现则是让AI实习生帮忙,自动从海量数据里挖出这些隐藏的同伙。本文从侦探社的日常出发,带你理解隐变量为什么危险、常用算法怎么破案,以及深度学习如何让这个老行当焕发新生命。

岗位关联

掌握隐变量因果发现,你就能为AI模型提供可解释的因果骨架,避免被虚假相关误导,是走向可靠可解释AI的必修课。

目录
  1. 可视化演示
  2. 隐变量基础:看不见的幕后主使
  3. 因果图模型:绘制作案网络
  4. 因果发现原理:从线索中筛出真凶
  5. 隐变量干扰:被污染的线索
  6. 典型算法:侦探工具箱
  7. 深度因果发现:AI实习生的新招
  8. 性能与优化:降低误判率
  9. 实践与案例:将办案经验落地
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示隐变量因果发现全流程:观测变量到隐变量的映射关系、隐变量间因果图结构发现、可识别性条件验证,通过交互理解从观测数据恢复隐变量因果结构的深度学习方法。

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

隐变量映射:观测到隐变量投影 观测变量O:可直接测量的数据特征 隐变量Z:不可直接观测的潜在因子 Z = h(O), h: deep encoder 深度网络学习从观测空间到隐变量空间的映射

隐变量基础:看不见的幕后主使

老侦探把实习生叫到白板前,指着现场照片说:“书房里茶杯碎了,猫在叫。你以为是猫打碎了茶杯,却忽略了窗外驶过的卡车震动了整栋楼。卡车震动没被写进记录,却是同时影响猫和茶杯的幕后主使。”在因果发现里,这种影响多个观测变量、却没有被直接记录下来的因素,就是隐变量。

观测数据像案发现场留下的痕迹。我们能看到X和Y总是同时出现,但如果存在一个共同的隐变量Z,那么即便X和Y之间没有任何直接因果,它们也会表现出强烈的统计相关。传统方法常常把这种假象当成真相。因此,因果发现的第一步,不是急着画箭头,而是先问:有没有一个看不见的角色躲在阴影里。

正式地说,隐变量因果发现关注的是数据中未观测的共同原因。经典的因果充分性假设要求:不存在影响两个及以上观测变量的未观测共同原因。这个假设一旦不成立,单纯基于观测变量的算法就可能被虚假相关欺骗。我们可以用全概率公式看清隐变量的影响——当观测不到Z时,X和Y的联合分布其实是对Z所有可能取值求和后的结果:

老侦探合上卷宗说:“先承认可能有看不见的老板,再问老板是谁,才是破案的第一步。”理解隐变量基础,正是整个隐变量因果发现的起点。

P(X,Y)=∑zP(X,Y∣z) P(z)\displaystyle P(X,Y) = \sum_{z} P(X, Y \mid z) \, P(z)
这个公式说明:只看X和Y的“合影”,很可能是把Z在不同场景下的效果叠加在一起,从而产生“两人总是同进同出”的假象。
  1. 联合分布展开把X和Y同时出现的概率,按照幕后因素Z的每一种取值拆开,得到 $P(X,Y) = \sum_z P(X, Y, Z=z)$。
  2. 全概率公式将每一项写成条件概率乘边缘概率,即 $P(X,Y,Z=z) = P(X,Y \mid Z=z)P(Z=z)$。
  3. 汇总所有取值把所有Z取值下的贡献相加,得到观测到的联合概率,这就是我们眼睁睁看到的“相关”。

因果图模型:绘制作案网络

侦探社的白板上很快多了一张图:圆形代表人,箭头表示“影响”。A指向B,B指向C,表示A影响B、B影响C。老侦探说:“如果A和C还有一个共同原因B,那它们之间的关系就会呈现叉形结构,不能随便画一条A→C的线。”

这种用节点表示变量、用有向边表示直接因果的图,就是有向无环图(DAG)。它是因果关系的标准化语言。每个节点是一个变量,每条边代表一次直接的因果作用。有了图,AI实习生才能知道该调查谁、该控制什么条件。

为了表达数据是如何“生成”出来的,因果图模型通常配合结构方程一起使用。结构方程明明白白写出每个变量如何由它的父节点和噪声生成。噪声项往往就包含了未观测的隐变量成分,因此这个方程天然适合讨论隐变量:

老侦探把箭头画完,对实习生说:“只有这张网络是对的,后续调查才不会冤枉好人。”因果图模型,就是给整场案件定下结构框架。

Xi=fi(PAi,Ui)\displaystyle X_i = f_i\left(\mathrm{PA}_i, U_i\right)
这个方程想说的是:第i个节点的值,不是凭空来的,而是由它的直接原因(父节点)和它专属的未观测扰动共同决定的。
  1. 下标$i$代表第$i$个变量节点,例如“杯子的位置”或“猫的惊叫程度”。
  2. 父节点$\mathrm{PA}_i$所有直接指向$X_i$的变量,即直接造成$X_i$变化的可观测原因。
  3. 噪声$U_i$没有被观测到的其他影响因素,它可能包含隐变量的残余作用。
  4. 函数$f_i$描述父节点和噪声如何组合成$X_i$的生成规则。

因果发现原理:从线索中筛出真凶

老侦探有一套标记法:如果两个嫌疑人同伙作案,但每当张三不在场,李四也从不出现,那么张三很可能是李四的“上线”而非“同谋”。实习生听得入神,老侦探补充:“我们真正判断的依据,是‘在特定条件下,两人是否还保持一致行动’。”

这套逻辑迁移到数据里就是条件独立性。给定一个变量集合Z后,如果X和Y在统计上相互独立,那么因果图里通常不存在X—Y的直接边。约束方法做的就是这件事:不断挑选不同的Z,做条件独立性检验,再用检验结果反向筛选出可能的因果图结构。

当然,这一切依赖一个关键前提——忠实性假设:样本中观察到的独立性关系,必须忠实反映因果图中的d-分离性质,不能出现“图中明明有边,数据却假装独立”的巧合。条件独立性可用如下符号简洁表达:

老侦探把这套管教给实习生:“记住,真正的因果,必须经得起‘换一个条件再看’的考验。”因果发现原理,正是这场考验的标准化流程。

X⊥ ⁣ ⁣ ⁣⊥Y∣Z\displaystyle X \perp\!\!\!\perp Y \mid Z
这个表达式是因果发现中的“测谎仪”:一旦成立,就说明在Z被控制住的前提下,X和Y之间没有直接依赖关系。
  1. 符号$\perp\!\!\!\perp$表示统计独立,相当于“两人没有暗中联动”。
  2. 竖线$\mid$后面的$Z$是控制变量,表示“把Z固定住再看”。
  3. 整体含义在Z被控制时X和Y独立,则因果图上X和Y之间不画直接边。
  4. 算法用途因果发现算法反复使用这个测谎仪,最终得到一张与证据最一致的因果图。

隐变量干扰:被污染的线索

“你看这两个嫌疑人,总在深夜同时出门,可他们之间根本没有联系。”老侦探指着卷宗说,“其实他们都收到同一位幕后老板的短信指令。老板才是让两人同进同出的原因。”实习生恍然大悟:原来相关性并不等于因果联系,它可能只是隐变量制造的巧合。

数学上,这种巧合可以被精确刻画。假设隐变量Z是标准正态的,X和Y都由Z加上各自独立的测量噪声生成:X = aZ + εx,Y = bZ + εy,其中εx和εy彼此独立且与Z独立。那么即使X到Y没有因果箭头,X和Y的协方差依然不为零:

“如果不揪出幕后老板,我们永远会把同伙当成主犯。”老侦探的语气很重。隐变量干扰,是所有因果发现算法必须跨越的第一道陷阱。

Cov(X,Y)=a b σZ2\displaystyle \mathrm{Cov}(X,Y) = a\, b\, \sigma_Z^2
这个公式非常直观地揭示了“幽灵相关”的来源:只要共同原因Z存在,并且它同时影响X和Y,那么X和Y就会表现出协方差,哪怕它们之间根本没有因果箭头。
  1. 协方差定义$Cov(X,Y)=E[(X-E[X])(Y-E[Y])]$,用来衡量两个变量是否同步变化。
  2. 代入线性生成式把$X=aZ+\varepsilon_x$和$Y=bZ+\varepsilon_y$代入,展开后得到四项。
  3. 噪声独立消失因为$\varepsilon_x$、$\varepsilon_y$相互独立且与Z独立,交叉项期望为0。
  4. 剩余核心项最终只剩下$ab\sigma_Z^2$,这就是隐变量Z注入的虚假相关。

典型算法:侦探工具箱

老侦探打开一个布满灰尘的工具箱,从里面抽出三本手册:“FCI、RFCI、CCD,这些是专治‘有隐变量’悬案的老伙计。”实习生翻开手册,看到里面画满了带星号和圆圈的箭头,一时摸不着头脑。

FCI(Fast Causal Inference)是最经典的隐变量因果发现算法。它通过多轮条件独立性检验,允许箭头端点保留不确定标记,最终输出局部祖先图PAG,而不是被打磨得过于自信的完全DAG。RFCI(Really Fast Causal Inference)面向大规模稀疏图,牺牲一部分完整性来换取速度。CCD则重点处理因果环存在时的隐藏因素场景。它们的共同内核,都是寻找能让两个变量“断开”的分离集。找到一个分离集,就意味着找到了一组可以解释假相关的变量:

老侦探合上手册说:“工具各不相同,但都相信同一句话——控制住该控制的,假关联才会现形。”典型算法,就是这句话的系统化执行。

∃ SXY:X⊥ ⁣ ⁣ ⁣⊥Y∣SXY\displaystyle \exists\, \mathbf{S}_{XY}:\quad X \perp\!\!\!\perp Y \mid \mathbf{S}_{XY}
这行表达的意思是:只要存在某个变量集合S,能够使X和Y在控制S后变得独立,算法就会认为X与Y之间没有直接因果边。
  1. 存在量词$\exists$表示“至少能找到一组”。
  2. 分离集$\mathbf{S}_{XY}$表示能解释X和Y假相关的那几个变量。
  3. 条件独立成立在这个分离集控制下,X和Y的统计依赖消失。
  4. 算法任务FCI等算法就是在所有变量子集中搜索这样的分离集,从而排除虚假边。

深度因果发现:AI实习生的新招

传统的算法像一张张翻卷宗,效率有限。AI实习生提出新思路:“我不需要手工设计每一次独立性检验,我可以直接学习每个人在本案中的‘隐藏人设’。”老侦探眼前一亮,这不就是隐变量的另一种表达方式吗?

深度因果发现把隐变量表示学习融入神经网络。因果表示学习希望从观测数据中提取潜在因子,这些潜在因子可能就是未观测的共同原因;变分自编码器(VAE)通过编码器把观测数据压缩成潜在变量分布,再让解码器重建数据;生成式发现则通过反复重构,从误差中反推出因果结构。这三板斧合起来,让AI能够端到端地发现隐变量,而不是依赖人工挑选检验条件。

VAE的训练目标由两部分组成:一是让解码器能很好地重建原始数据,二是让编码器输出的潜在变量分布不要偏离先验太远。其核心损失函数是证据下界:

老侦探满意地点头:“实习生的眼睛能看见白板上写不出的因素。”深度因果发现,正是把这种直觉变成了可训练的神经网络。

L=Eqϕ(z∣x)[log⁡pθ(x∣z)]−DKL(qϕ(z∣x) ∥ p(z))\displaystyle \mathcal{L} = \mathbb{E}_{q_\phi(z\mid x)}\left[\log p_\theta(x\mid z)\right] - D_{\mathrm{KL}}\left(q_\phi(z\mid x)\,\|\,p(z)\right)
这个损失函数是AI实习生的“学习目标”:既要让潜在变量z能还原出案件线索x,又要保证z的分布足够规矩,不变成一团乱码。
  1. 编码器$q_\phi(z\mid x)$根据观测线索x推断隐变量z的概率分布,相当于猜测幕后老板长什么样。
  2. 重构项$\mathbb{E}[\log p_\theta(x\mid z)]$希望从z还原出x的概率尽量大,保证z没丢掉关键信息。
  3. KL散度项$D_{KL}$衡量z的分布与标准先验p(z)的差异,防止模型过度自由发挥。
  4. 整体优化通过最大化$\mathcal{L}$,模型学会用隐变量解释观测数据中的因果来源。

性能与优化:降低误判率

老侦探很担心错怪好人。一份优秀的办案报告,既要讲清楚案情,又不能草木皆兵,把每条模糊线索都当成因果。性能与优化要解决的就是这个问题:如何让因果发现模型在有限数据上做出可靠判断。

首先是可识别性。有时不同因果图能生成相同观测分布,这时数据本身无法区分谁对谁错。引入非线性机制或非高斯噪声假设,可以有效提升可识别性。其次是样本复杂度。条件独立性检验非常依赖样本量,样本太少,检验结果就像证据不足的证词,可信度低。最后是稀疏正则,它让模型只在确凿证据处画箭头,避免在无关变量之间画出多余的边。常用手段是在损失函数中加入参数向量的L1范数:

老侦探在报告封面上写下:“用最少的线索破案,才能避免过度拟合的冤案。”性能与优化,就是这种破案智慧的数学保障。

min⁡θℓ(θ)+λ∥θ∥1\displaystyle \min_\theta \ell(\theta) + \lambda \|\theta\|_1
这个公式是“少画箭头”的数学化表达:第一项追求拟合数据,第二项惩罚参数绝对值之和,让可画可不画的边尽量被压缩为零。
  1. 损失项$\ell(\theta)$衡量当前因果模型对观测数据的解释程度。
  2. L1惩罚$\lambda\|\theta\|_1$对每个参数绝对值求和,鼓励参数稀疏。
  3. 零系数含义当某个边的参数被压成0,就等价于因果图中删掉这条边。
  4. 系数$\lambda$控制“破案严谨度”与“数据拟合度”之间的平衡。

实践与案例:将办案经验落地

侦探社的业务越做越大,开始承接医疗、电商和工厂的委托。老侦探发现,虽然场景不同,但方法论惊人地一致:先承认有隐变量,再用因果发现揪出它们。

在生物医学中,患者的遗传易感性是典型的隐变量,它同时影响生活方式和患病结果。深度因果发现帮助研究者从病历数据中识别出真正的药物因果效应。在推荐系统中,用户潜在兴趣是一个巨大的隐变量,它同时影响点击行为和购买行为。算法需要把兴趣因子提出来,才能避免“越热门越推荐”的恶性循环。在工业故障诊断中,环境温度和操作习惯是常见隐变量,它们让报警与停机同时出现,却并非因果关系。此时,因果发现能够定位真正的根因部件。

在所有这些场景里,最终目标通常是估计因果效应,例如“如果实施某项干预,结果会变化多少”。这需要用do算子明确表达干预,而不是简单做条件筛选:

老侦探笑了:“幕后老板找到了,办案报告才真正可信。”实践与案例,正是把隐变量因果发现从理论推向千行百业的桥梁。

ATE=E[Y∣do(X=1)]−E[Y∣do(X=0)]\displaystyle ATE = \mathbb{E}\left[Y \mid do(X=1)\right] - \mathbb{E}\left[Y \mid do(X=0)\right]
这个公式用“干预前后结果之差”来定义平均因果效应,本质上是在问:如果强制所有人吃这个药,会比强制不吃好多少?它比“吃药的人是否更健康”更接近真相。
  1. $do(X=1)$表示人为强制把X设为1,而不是被动观察X=1。
  2. $\mathbb{E}[Y \mid do(X=1)]$干预后Y的平均水平,相当于“全体服药组的平均康复率”。
  3. $\mathbb{E}[Y \mid do(X=0)]$全体不服药组的平均康复率。
  4. 二者相减得到平均因果效应ATE,这是因果发现的最终交付物。

AI 应用场景

医疗因果发现:揪出遗传易感性

阶段:因果推断与知识发现

解决的问题:传统统计只看到“服药—康复”相关,却忽略遗传易感性这个隐变量。它同时影响病人是否选择某种药物和最终康复效果,导致药效被高估或低估。AI利用深度因果表示学习提取潜在健康状况,再结合条件独立检验,能够区分真正有效的药物因果效应。

具体案例:某医院使用病历数据,用VAE学习患者的潜在生理状态,再用FCI类算法生成因果结构,医生最终获得一张可视化因果报告,准确识别出对特定人群真正有效的治疗方案。

推荐系统:用户兴趣作为隐变量

阶段:反事实推理与模型校准

解决的问题:用户点击行为受“物品流行度”这个隐变量影响,热门内容总是获得更多曝光,导致模型误把流行度当作用户真实兴趣。隐变量因果发现能把“兴趣因子”和“流行度因子”拆开,再做反事实纠偏。

具体案例:某电商平台引入深度因果发现模块,提取用户潜在兴趣表示并修正曝光偏差,冷门但高质量的商品曝光率提升了23%,用户满意度明显上升。

工业故障诊断:定位根因部件

阶段:根因分析与预测维护

解决的问题:工厂中设备报警和停机总是同时出现,但真正的原因是冷却风扇老化,它作为隐变量同时影响温度报警和停机率。若不控制这个隐变量,维护团队会误换昂贵设备。

具体案例:某制造企业用稀疏因果图学习对传感器数据建模,发现“风扇老化—温度升高—停机”的真实因果路径,将错误更换率降低了四成,节省了大量维护成本。

Python 演示

python31 行
import numpy as np def generate_confounded_data(n=3000, seed=42):    rng = np.random.default_rng(seed)    z = rng.normal(0, 1, n)          # 隐变量:幕后老板    x = 0.8 * z + rng.normal(0, 0.6, n)    y = 0.6 * z + rng.normal(0, 0.6, n)    return x, y, z def pearson_corr(a, b):    a = a - a.mean()    b = b - b.mean()    denom = np.sqrt((a * a).sum() * (b * b).sum())    return (a * b).sum() / denom def partial_corr(x, y, z):    rxy = pearson_corr(x, y)    rxz = pearson_corr(x, z)    ryz = pearson_corr(y, z)    return (rxy - rxz * ryz) / np.sqrt((1 - rxz * rxz) * (1 - ryz * ryz)) def main():    x, y, z = generate_confounded_data()    r_xy = pearson_corr(x, y)    r_xy_z = partial_corr(x, y, z)    print("观测相关性 r(X, Y) =", round(r_xy, 3))    print("控制隐变量后偏相关 r(X, Y | Z) =", round(r_xy_z, 3))    print("结论:相关主要由共同原因Z导致,XY之间无直接因果。") if __name__ == "__main__":    main()
目的:生成一个存在共同原因Z的数据集,同时计算原始相关和偏相关,直观展示隐变量如何制造虚假相关、控制后又如何被消除。
  1. z = rng.normal(0, 1, n)生成不可观测的隐变量,模拟幕后老板。
  2. x = 0.8 * z + rng.normal(0, 0.6, n)用结构方程生成X,父节点是Z,噪声独立。
  3. pearson_corr(a, b)计算两个变量的相关系数,对应“只看到表面的相关”。
  4. rxy_z = partial_corr(x, y, z)计算控制Z后的偏相关,相当于把幕后老板隔离后重新审问。
  5. if __name__ == "__main__":提供可执行入口,方便在命令行运行。

常见误区

误区我算了一下X和Y的相关系数,p值小于0.05,所以X就是Y的原因,可以直接下结论。

正解相关性只说明两个变量同步变化,不能说明变化的来源。就像洒水器开启与路面湿相关,却可能是暴雨这个隐变量同时造成的。要做因果结论,必须检验条件独立、控制隐变量,甚至借助do算子分析干预效果。

为何常见:教材里常用相关衡量变量关系,而媒体也总爱用“同增同减”暗示因果,导致初学者把相关当因果。

误区只要跑一遍PC或FCI算法,我就能拿到完整的DAG,所有箭头方向都清清楚楚。

正解很多模型在相同数据下只能识别到马尔可夫等价类,箭头方向可能多个候选。FCI输出的是PAG,保留不确定端点,暗示哪些方向无法判断。隐变量存在时,唯一识别更难,甚至需要额外的干预数据。

为何常见:算法图例常常展示完美恢复的例子,让人误以为输出总是完整图,忽略了理论上的不可识别性。

误区我在数据里跑了一轮独立性检验,没发现隐变量的痕迹,所以因果充分性假设成立。

正解没检测到不等于不存在。可能样本量不够,可能检验功效低,也可能隐变量的影响被噪声掩盖。现实数据几乎总存在某种未观测因素,正确心态是“默认可能有隐变量,再设法验证或消除”。

为何常见:统计检验的“不显著”容易被误读为“证明不存在”,尤其初学者常把“无证据”当成“有证据证明无”。

误区我用回归控制住年龄、性别以后,剩下的相关系数就是因果效应,这相当于做了自然实验。

正解条件作用只是“在人群中观察某子组”,而do(X=x)是“主动把人变到X=x状态”。两者在存在隐变量时结果会不同。例如控制服药意愿后看药效,不等于强制所有人服药;观察值可能被选择性偏差污染。

为何常见:回归分析在教科书里常用“control for”一词,让人混淆统计控制与因果干预。

误区深度模型只要能预测准确就行,我直接用隐变量表示去跑下游任务,反正效果不错。

正解因果发现的价值在于给出可解释机制。如果模型只用低维向量做事而说不清隐变量含义,就退化成了黑箱预测。隐变量因果发现要求最终输出因果图或结构化解释,让医生、工程师能理解并信任结论。

为何常见:深度学习在图像、语音上的成功强化了“端到端够用”的印象,忘记因果发现天然面向可解释AI。

面试题

Q1. 下列哪项最符合“隐变量”的含义?

单选题 · easy

  • A.数据表里显式记录的缺失值
  • B.影响多个观测却未直接观测的因素← 正确答案
  • C.与所有观测变量都独立的噪声
  • D.只存在于深度学习隐藏层的特征

答案:B。隐变量是能同时影响多个观测变量、却没有被直接记录的因素。缺失值、独立噪声、隐藏层特征都不是因果意义上的隐变量。就像暴雨影响洒水器又影响路面,却没被写进记录。

Q2. “因果充分性假设”成立意味着什么?

单选题 · easy

  • A.样本数量必须足够覆盖所有取值
  • B.不存在影响多个变量的未观测共同原因← 正确答案
  • C.所有隐藏变量都已经被人工观测到
  • D.证据变量之间不存在任何相关性

答案:B。因果充分性假设指所有共同原因都被观测到,不存在未观测混淆变量。这并不是要求样本量或变量之间不相关。只有满足该假设,传统算法才能避免隐变量干扰。

Q3. “相关不等于因果”最核心的原因是?

单选题 · easy

  • A.数据中存在测量误差难以避免
  • B.可能存在共同原因或隐变量干扰← 正确答案
  • C.回归模型的参数无法被解释
  • D.时间序列数据总具有自相关性

答案:B。相关可能是共同原因导致的虚假相关,这是最核心原因。测量误差和自相关也可能影响分析,但不是本质。时间序列不一定总自相关,回归参数也并非不可解释。

Q4. 隐变量最容易引发的统计现象是?

单选题 · mid

  • A.梯度爆炸导致模型无法收敛
  • B.两个无关变量出现显著相关← 正确答案
  • C.特征之间出现严重的多重共线性
  • D.训练集和测试集的分布完全一致

答案:B。当隐变量同时影响两个观测变量时,即使它们没有直接因果,也会因共同原因而呈现显著相关。这就是虚假相关。梯度爆炸、多重共线性、分布一致都不是隐变量的典型后果。

Q5. 符号X⊥⊥Y|Z表示什么?

单选题 · mid

  • A.X和Y在给定Z时彼此独立← 正确答案
  • B.X与Z之间不存在任何因果关系
  • C.Y是由X和Z共同生成的输出
  • D.X和Y的边缘分布完全相同

答案:A。该符号表示在固定Z的条件下,X与Y统计独立。这意味着X和Y之间没有直接依赖,因果发现算法会据此判断图中不应存在直接边。

Q6. 在结构方程X=f(PA_X,U_X)中,U_X代表什么?

单选题 · mid

  • A.X的全部可观测父节点集合
  • B.影响X的未观测噪声或隐变量← 正确答案
  • C.模型的超参数和正则化系数
  • D.用于验证的独立同分布样本

答案:B。PA_X是父节点,U_X是X独有的未观测扰动,常包含隐变量成分。它不是超参数,也不是验证集样本。U_X的独立性假设决定了结构方程能否被识别。

Q7. 关于FCI算法,以下说法正确的是?

单选题 · mid

  • A.只能在无隐变量数据上运行
  • B.通过搜寻分离集排除虚假边← 正确答案
  • C.输出唯一确定的完整DAG
  • D.不需要任何条件独立性检验

答案:B。FCI允许隐变量存在,输出PAG而非唯一DAG,核心手段正是条件独立性检验和分离集搜索。其他选项都与FCI的设计目标相反。

Q8. 以下哪些是隐变量因果发现的常用算法?

多选题 · mid

  • A.FCI算法← 正确答案
  • B.RFCI算法← 正确答案
  • C.梯度下降法
  • D.CCD算法← 正确答案

答案:ABD。FCI、RFCI、CCD都是处理隐变量的因果发现算法。梯度下降是通用优化方法,不是专门用于因果发现的算法,因此不选。

Q9. 关于do(X=x)算子的正确理解是?

单选题 · hard

  • A.等价于在观测数据中只筛选X=x样本
  • B.表示强制将X干预为x后观察其他变量← 正确答案
  • C.用于计算变量之间的相关系数矩阵
  • D.只在离散变量场景下才定义有效

答案:B。do(X=x)表示主动干预,把X强制设为x,而不是被动筛选X=x的样本。它在连续和离散变量中都有效,用于计算因果效应,而非相关系数矩阵。

Q10. 下列哪些策略能提高隐变量因果发现的可识别性?

多选题 · hard

  • A.假设因果机制是非线性且噪声非高斯← 正确答案
  • B.使用L1稀疏正则约束因果图结构← 正确答案
  • C.删除所有与目标变量无关的观测
  • D.结合随机对照试验等干预数据← 正确答案

答案:ABD。非线性非高斯假设是LiNGAM等方法的可识别条件;L1稀疏正则可以压缩不必要边;干预数据能消除方向歧义。删除与目标无关的观测会损失信息,不能提高可识别性。