园丁老周发现一件怪事:春天按“浇水越多花开越盛”的规律打理花园,花团锦簇;到了冬天照做,花却冻伤烂根。他翻出三年的观察记录,把所有数据混在一起计算,竟然得出“浇水量与生长无关”的荒唐结论。问题出在哪?不是他的记录有误,而是花园在“换季”——数据分布变了,因果机制也跟着变。传统因果发现方法大多默认数据“四季如春”(平稳),面对真实世界的非平稳数据就会失灵。CD-NOD 算法的聪明之处,是把“换季”这件事也记进观察笔记:先找到季节转换点,再把“季节”作为隐藏上下文变量纳入因果发现,最终告诉你哪些规律稳定不变、哪些机制随环境漂移。它不假装世界不变,而是把变化本身变成线索。

岗位关联

掌握 CD-NOD,你就拥有了在“会换季的花园”里做因果推断的能力:不再假装数据平稳,而是把变化本身变成线索。这是工业界因果落地最稀缺的实操视角,也是从“知道因果发现”走向“会用因果发现”的关键一跃。

目录
  1. 可视化演示
  2. 非平稳挑战:四季花园的谜题
  3. 核心思想:把“季节”写进观察笔记
  4. 约束基础:条件独立与 PC 算法
  5. 算法流程:CD-NOD 的四步排查法
  6. 结果解读:变色龙与常青树
  7. 实战应用:从花园到工厂
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示CD-NOD算法核心:非平稳数据分布漂移检测、隐藏上下文变量C引入条件独立性检验、跨段因果结构变化发现,通过交互理解非平稳环境下的因果发现机制。

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

非平稳数据:分布随时间漂移 传统PC假设i.i.d.,无法处理分布漂移 CD-NOD检测跨段分布变化,引入上下文C P(X) changes with C → non-stationary 数据分布随上下文C变化导致传统方法失效

非平稳挑战:四季花园的谜题

园丁老周在小院里种了一片花。春天他发现“浇水越多、花开越盛”,于是记在手册里。冬天他照做,花却冻伤烂根。老周困惑:同一本手册怎么失灵了?把三年数据混在一起看,他更迷茫——“浇水量”和“生长量”几乎看不出任何关系。

传统因果发现方法(如 PC 算法)大多假设数据来自同一平稳分布——这相当于默认花园四季如春,全年共享一本规律手册。这个“平稳性假设”在实验室里很干净,但现实世界处处是“冬天”:传感器数据随工况漂移、消费行为随地区变化、患者指标随治疗阶段波动。数据分布一变,旧规律就破碎。

比“分布变化”更关键的是因果机制变化:不仅数据本身在动,变量之间的生成关系也在动。用公式说,如果变量 \(X_i\) 的直接原因集合 \(\text{Pa}_i\) 不变,但条件分布随上下文 \(C\) 改变,我们就说 \(X_i\) 是机制相关变量:

不记录季节的园丁,要么得到一本自相矛盾的手册,要么干脆放弃写手册。CD-NOD 的初衷,就是让因果发现在“花园会换季”的现实里依然可用。

P(Xi∣Pai,C=s)≠P(Xi∣Pai,C=s′)\displaystyle P(X_i \mid \text{Pa}_i, C=s) \neq P(X_i \mid \text{Pa}_i, C=s')
这个公式是理解 CD-NOD 的试金石:它把“规律变了”从模糊感觉变成一条可以检验的数学条件。
  1. 变量 Xi\(X_i\) 是我们关心的某个观测变量,比如“植物高度”。
    XiX_i
  2. 直接原因 Pa_i\(X_i\) 的“父节点”集合,比如光照、浇水量这些直接影响生长的因素。
    Pai\text{Pa}_i
  3. 上下文 C一个代表环境状态的隐藏变量,比如“季节”。它本身不一定被直接观测,但可以被推断出来。
    CC
  4. 两个状态 s 与 s'上下文的两个不同取值,比如“春天”和“冬天”。
    s,s′s, s'
  5. 条件分布给定上下文等于 \(s\)、且已知所有直接原因时,\(X_i\) 的分布规律——也就是一份“生长配方”。
    P(Xi∣Pai,C=s)P(X_i \mid \text{Pa}_i, C=s)
  6. 整体含义若两个上下文的“配方”不同,说明 \(X_i\) 的生成机制随环境改变,它就是机制相关变量。
    P(Xi∣Pai,C=s)≠P(Xi∣Pai,C=s′)P(X_i \mid \text{Pa}_i, C=s) \neq P(X_i \mid \text{Pa}_i, C=s')

核心思想:把“季节”写进观察笔记

聪明的老周换了个做法:每次浇水后,他在笔记本上多记一列——当天是哪个季节。一年过去,他把记录按季节拆开看:春天浇水效应接近 0.3,夏天 1.4,冬天 -0.8。“原来不是手册错了,是每季各有各的手册!”

CD-NOD 的英文全称是 Causal Discovery from Nonstationary/HDD Data,核心思想正是老周这个动作:把变化点或潜在上下文作为隐藏变量 \(C\),显式放入因果发现框架。数据不再被看成单一分布,而是若干“上下文片段”首尾相接的拼接;每个片段内部近似平稳,片段之间允许“换季”。

在这个框架里,每个变量都可以写成带上下文参数的生成模型:

老周多记了一列“季节”,一本矛盾手册变成几本清晰的季节手册。CD-NOD 做的第一件事,就是“多记一列”——把上下文 \(C\) 编码进数据。

Xi=fi(Pai,γi(C),εi)\displaystyle X_i = f_i(\text{Pa}_i, \gamma_i(C), \varepsilon_i)
它说明:变量不是凭空产生的,而是“父节点的贡献 + 受上下文调制的参数 + 噪声”共同作用的结果。\(\gamma_i\) 是否依赖 \(C\),决定了机制是否随环境变化。
  1. 生成函数 f_i把输入“翻译”成 \(X_i\) 的规则,比如高度由浇水量和光照按某个配方合成。
    fif_i
  2. 父节点 Pa_i\(X_i\) 的直接原因,是配方里的“原料”。
    Pai\text{Pa}_i
  3. 上下文参数 γ_i(C)一个随上下文 \(C\) 改变的系数,比如“每毫升水能带来多少厘米生长”在不同季节数值不同。
    γi(C)\gamma_i(C)
  4. 噪声 ε_i所有未观测的随机干扰,让同等条件下每次结果也不完全一样。
    εi\varepsilon_i
  5. 整体式子的意义把 \(X_i\) 表达为“父节点 + 环境调制 + 随机噪声”的合成,这是 CD-NOD 建模的出发点。
    Xi=fi(Pai,γi(C),εi)X_i = f_i(\text{Pa}_i, \gamma_i(C), \varepsilon_i)

约束基础:条件独立与 PC 算法

老周想确认“浇水是否真的影响生长”。他没有只算相关系数,而是把阳光、土壤条件接近的几排花挑出来,单独比较:在其他因素相同时,浇水多的是不是长得更高?这种控制变量法,就是统计里的条件独立思想。

条件独立的数学定义:给定 \(Z\) 时,如果 \(X\) 与 \(Y\) 的联合分布等于各自条件分布的乘积,说明知道 \(Y\) 对预测 \(X\) 没有任何额外帮助,记为 \(X \perp\!\!\!\perp Y \mid Z\):

PC 算法像一个有耐心的园丁:先用条件独立测试搭建骨架(哪些变量之间有边),再通过 V 结构(两个原因共同指向一个结果)等线索给边定方向。CD-NOD 继承了这套过滤方法,只是额外处理了“换季虚线”。

X⊥ ⁣ ⁣ ⁣⊥Y∣Z  ⟺  P(X,Y∣Z)=P(X∣Z) P(Y∣Z)\displaystyle X \perp\!\!\!\perp Y \mid Z \iff P(X, Y \mid Z) = P(X \mid Z)\,P(Y \mid Z)
条件独立是约束方法(PC 算法等)的“试纸”:每对变量在什么样的控制条件下失去关联,就暗示了它们之间是否存在直接边、以及该由谁指向谁。
  1. 条件独立符号\(X\) 与 \(Y\) 在给定 \(Z\) 后互相不再影响,记为 \(X \perp Y \mid Z\)。
    X⊥ ⁣ ⁣ ⁣⊥Y∣ZX \perp\!\!\!\perp Y \mid Z
  2. 等价关系这个符号定义等价于下面的概率等式。
      ⟺  \iff
  3. 联合分布给定 \(Z\) 时 \(X\) 与 \(Y\) 一起出现的分布——如果两者有隐藏联系,它会呈现“抱团”现象。
    P(X,Y∣Z)P(X, Y \mid Z)
  4. 乘积形式各自单独的条件概率相乘,代表“互不相干”的基准。
    P(X∣Z) P(Y∣Z)P(X \mid Z)\,P(Y \mid Z)
  5. 实践计算对高斯数据,常用 Fisher-Z 变换检验偏相关系数 \(r\) 是否为 0,等价于检验条件独立是否成立。
    z=12ln⁡(1+r1−r)z = \frac{1}{2}\ln\left(\frac{1+r}{1-r}\right)

算法流程:CD-NOD 的四步排查法

老周把整套经验固化成四个步骤:①整理全年浇水与生长记录;②在日历上标出春夏秋冬的转换日;③在表格里加“季节”列;④分季节做控制变量对比,逐因素排查。

CD-NOD 的流程与老周完全同步:预处理分段 → 变化点检测 → 扩展变量集 → ePC 骨架学习与机制检验。前两步识别数据分布发生突变的“换季日”,第三步把上下文写成一个指示变量 \(C\) 加入数据集,第四步在扩展后的变量集上运行增强版 PC 算法(ePC)。

第四步的灵魂是一个假设检验:看每个变量 \(X_i\) 在给定其父节点 \(\text{Pa}_i\) 后,是否还与上下文 \(C\) 有条件依赖:

四步走完,老周台账上的每个因素都被贴上了标签:变色龙还是常青树。

H0:Xi⊥ ⁣ ⁣ ⁣⊥C∣Pai,Ha:Xi⊥̸ ⁣ ⁣ ⁣⊥C∣Pai\displaystyle H_0: X_i \perp\!\!\!\perp C \mid \text{Pa}_i, \qquad H_a: X_i \not\perp\!\!\!\perp C \mid \text{Pa}_i
零假设 \(H_0\) 表示“机制的常量”,备择假设 \(H_a\) 表示“机制随环境变化”。CD-NOD 对每个变量做一次这样的检验,拒绝 \(H_0\) 的变量被标记为机制相关。
  1. 零假设 H0设 \(X_i\) 与上下文 \(C\) 在控制 \(\text{Pa}_i\) 后仍然独立——相当于说“这个变量的配方不随季节变”。
    H0:Xi⊥ ⁣ ⁣ ⁣⊥C∣PaiH_0: X_i \perp\!\!\!\perp C \mid \text{Pa}_i
  2. 备择假设 Ha反之,给定 \(\text{Pa}_i\) 后 \(X_i\) 仍与 \(C\) 有关联——“配方随季节变”。
    Ha:Xi⊥̸ ⁣ ⁣ ⁣⊥C∣PaiH_a: X_i \not\perp\!\!\!\perp C \mid \text{Pa}_i
  3. Pa_i 的角色父节点集合充当“控制变量”,避免把父节点变化造成的间接联系误判为机制变化。
    Pai\text{Pa}_i
  4. 检验过程用条件独立测试计算统计量并求 \(p\) 值,\(p\) 值小于显著性水平 \(\alpha\) 时拒绝 \(H_0\)。
    p<αp < \alpha
  5. 输出标记被拒绝的变量进入“机制相关”名单,未被拒绝的进入“稳定机制”名单。
    Xi∈Svaried或Xi∈SstableX_i \in \mathcal{S}_{\text{varied}} \quad \text{或} \quad X_i \in \mathcal{S}_{\text{stable}}

结果解读:变色龙与常青树

老周拿着最终台账念道:“浇水量是变色龙——它的效应随季节大起大落;阳光是常青树——永远正向促进;土壤 pH 值以前没注意,它只在夏季降雨后突然变得重要……”

CD-NOD 的产出可以归纳为两份名单:机制相关变量(变色龙)与机制稳定变量(常青树),外加一份结构变化类型描述——是某条边的参数强度变了,还是边消失或新增。基于约束方法的特性决定了:它只能指出“谁和 \(C\) 有条件关联”,具体变化方式还需要回到数据中核对。

用集合写法,最终输出可以简洁地表示为:

老周最关心的正是这份名单——他不必再对每个因素平均用力,而是重点管理“浇水”这类敏感变量。

Sstable={i:Xi⊥ ⁣ ⁣ ⁣⊥C∣Pai},Svaried={i:Xi⊥̸ ⁣ ⁣ ⁣⊥C∣Pai}\displaystyle \mathcal{S}_{\text{stable}} = \{i : X_i \perp\!\!\!\perp C \mid \text{Pa}_i\}, \quad \mathcal{S}_{\text{varied}} = \{i : X_i \not\perp\!\!\!\perp C \mid \text{Pa}_i\}
稳定集合与变化集合把变量一分为二,这比一张“全年平均因果图”信息量大得多——它告诉你,在哪个环境该信任哪条规律。
  1. 稳定集合所有在给定父节点后与上下文独立的变量——常青树。
    Sstable\mathcal{S}_{\text{stable}}
  2. 变化集合所有与上下文存在依赖的变量——变色龙。
    Svaried\mathcal{S}_{\text{varied}}
  3. 集合构造符号花括号表示“所有满足条件的下标 \(i\) 组成一组”。
    {i:Xi⊥̸ ⁣ ⁣ ⁣⊥C∣Pai}\{i : X_i \not\perp\!\!\!\perp C \mid \text{Pa}_i\}
  4. 整体含义两份集合与因果骨架一起,构成 CD-NOD 的最终交付物,回答“哪些规律在变、哪些规律不变”。
    Sstable∪Svaried\mathcal{S}_{\text{stable}} \cup \mathcal{S}_{\text{varied}}

实战应用:从花园到工厂

老周的方法被果园、温室和城市绿化队拿去推广:只要有“上下文”存在的地方,这套“找换季点 → 加一列 → 逐变量排查”的流程就能照搬。

在实际 AI 项目中,CD-NOD 主要服务三类场景。一是时间非平稳:工业设备传感器随工况漂移,用 CD-NOD 找出哪些传感信号对故障标签的因果机制随工况改变。二是跨域非平稳:不同城市的消费行为分布不同,用它检视信贷风险因子在每个地区是否机制一致。三是群体异质性:多家医院的临床数据合并时,治疗方案的效果可能随医院环境变化,CD-NOD 能标注出“效果不稳定”的治疗因子。

与传统 DAG 学习方法相比,CD-NOD 的优势是“不装睡”——它直面分布漂移;局限也很明确:变化点检测的误差会向下游传播、小样本下条件独立检验功效有限、得到的因果图仍有马尔可夫等价类歧义(多条 DAG 无法仅凭数据区分),且朴素实现通常假设测试关系是参数化的(如偏相关)。在实际落地中,建议把它当作探索性诊断工具:先定位机制相关变量,再用实验或更细的模型深挖。

从花园到工厂,核心问题始终是两句——“什么变了?”和“哪个变量在变?”CD-NOD 用一列“季节”,把第二个问题变成了一张可执行的名单。

AI 应用场景

工业设备故障诊断(时间非平稳)

阶段:因果发现与特征筛选

解决的问题:传统方法把全时段传感器数据视为同分布,工况切换时特征与故障的相关性忽有忽无,模型误报率居高不下。CD-NOD 先检测工况变化点,再检验“哪些传感信号对故障的因果机制随工况改变”,从而把“工况敏感型”特征和“全局稳定型”特征分开处理。

具体案例:某风电场的振动传感器数据跨越冬夏,轴温与故障的关联在低温季节显著、高温季节微弱。用 CD-NOD 识别出轴温是机制相关变量后,运维系统按季节分别训练告警阈值,误报率下降约 30%。

跨区域信贷风控(跨域非平稳)

阶段:因果特征工程与模型可解释

解决的问题:消费金融模型将多城市数据合并训练,某些因子(如“夜间消费占比”)在不同地区的因果作用方向相反。CD-NOD 把“城市”作为上下文,找出机制相关因子,避免全局模型产生系统性偏差。

具体案例:某消金公司在华东、华南、东北三地部署同一套模型,贷后数据显示“夜间消费次数→违约”的系数在东北显著为正、在华南接近零。引入 CD-NOD 标记该变量机制相关后改为分区域建模,AUC 提升约 5%。

多中心医学研究(群体异质性)

阶段:因果效应异质性检测

解决的问题:多中心临床试验中,不同医院的诊疗流程与人群基线不同,药物效果的环境依赖被合并数据掩盖。CD-NOD 可识别“治疗方案的生效机制是否随医院环境变化”。

具体案例:三家医院合并研究“辅助化疗→两年生存率”,CD-NOD 检测出中心 B 的环境变量与“化疗剂量→生存”条件相关,事后查明该院患者平均年龄更高,进而按年龄层细分建模,结论更稳健。

Python 演示

python73 行
"""CD-NOD 简化教学版:在合成花园数据上演示变化点检测与机制相关变量识别"""import numpy as np rng = np.random.default_rng(42) def simulate_garden():    """模拟三个季节(上下文)的观测数据:X=浇水量,Y=植物高度"""    params = [('春', 0.3), ('夏', 1.4), ('冬', -0.8)]    n_per = 25    x, y, context = [], [], []    for ci, (_, slope) in enumerate(params):        xi = rng.normal(5, 0.8, n_per)        yi = 10 + slope * xi + rng.normal(0, 1.5, n_per)        x.extend(xi)        y.extend(yi)        context.extend([ci] * n_per)    return np.array(x), np.array(y), np.array(context) def detect_change_points(x, y, window=10, stride=5, tol=0.8):    """滑动窗口回归:斜率跳变处即为候选变化点"""    slopes, centers = [], []    for start in range(0, len(x) - window + 1, stride):        b = np.polyfit(x[start:start+window], y[start:start+window], 1)[0]        slopes.append(b)        centers.append(start + window // 2)    cps = []    for k in range(1, len(slopes)):        if abs(slopes[k] - slopes[k-1]) > tol and (not cps or centers[k] - cps[-1] > window):            cps.append(centers[k])    return cps def mechanism_change_test(x, y, cps):    """F 检验:分段回归是否显著优于合并回归?    若显著,说明 X->Y 的机制随上下文(季节)发生了变化"""    def ssr(xs, ys):        params = np.polyfit(xs, ys, 1)        resid = ys - np.polyval(params, xs)        return np.sum(resid ** 2)     boundaries = [0] + cps + [len(x)]    k_seg = len(boundaries) - 1    pooled = ssr(x, y)    segmented = sum(ssr(x[boundaries[i]:boundaries[i+1]],                        y[boundaries[i]:boundaries[i+1]])                    for i in range(k_seg))    df_num = 2 * (k_seg - 1)    df_den = len(x) - 2 * k_seg    if segmented <= 0 or df_num <= 0:        return float('inf') if segmented <= 0 else 0.0, df_num, df_den    f = ((pooled - segmented) / df_num) / (segmented / df_den)    return f, df_num, df_den def main():    x, y, context = simulate_garden()    cps = detect_change_points(x, y)    if not cps:        print('未检测到变化点,请调整窗口或阈值')        return    f, d1, d2 = mechanism_change_test(x, y, cps)    print('检测到的变化点位置:', cps)    print('真实上下文切换位置: [25, 50]')    print('F 统计量:', round(f, 2), '自由度:', (d1, d2))    try:        from scipy import stats        p = stats.f.sf(f, d1, d2)        print('p 值:', round(p, 6))        print('结论: 浇水量(X) 的因果机制随季节(C)变化' if p < 0.05              else '结论: 未发现机制变化')    except ImportError:        print('提示: 安装 scipy 后可获得 p 值; 经验上 F 值越大机制变化证据越强') if __name__ == '__main__':    main()
目的:在合成的“四季花园”非平稳数据上,复现 CD-NOD 的两个核心步骤——用滑动窗口回归定位变化点,再用 F 检验判断“浇水量→植物高度”的机制是否随上下文变化。
  1. yi = 10 + slope * xi + rng.normal(0, 1.5, n_per)用不同斜率生成三季数据,模拟因果机制随上下文变化
  2. b = np.polyfit(x[start:start+window], y[start:start+window], 1)[0]每个小窗口拟合 X→Y 的斜率,实时监视机制强度
  3. if abs(slopes[k] - slopes[k-1]) > tol and (not cps or centers[k] - cps[-1] > window):斜率跳变超过阈值且距离足够远,才记为变化点
  4. boundaries = [0] + cps + [len(x)]用检测到的变化点把数据切成多个上下文片段
  5. pooled = ssr(x, y)假设机制不变时,用一个全局模型拟合全部数据得到的残差
  6. segmented = sum(ssr(x[boundaries[i]:boundaries[i+1]], y[boundaries[i]:boundaries[i+1]]) for i in range(k_seg))允许机制逐段改变时,各段分别拟合的残差之和
  7. f = ((pooled - segmented) / df_num) / (segmented / df_den)F 统计量,对比“分段模型”相对“合并模型”是否显著更优

常见误区

误区学完 CD-NOD 后,以为它先把非平稳数据“修”成平稳数据,再套用普通因果发现方法,相当于数据预处理里加了一道“平稳化”。

正解CD-NOD 并没有消除非平稳性,而是把非平稳性显式编码为上下文变量 \(C\)。它承认数据由多个分布拼接而成,再在这个“拼接数据集”上做因果发现。就像老周不假装四季如春,而是把“季节”这一列写进表格再分析——表格没有变稳,但分析变得有意义了。

为何常见:把“检测变化点”理解成了“去除变化”,忽略了 CD-NOD 真正的建模重点是把变化当作变量而非噪声。

误区以为 CD-NOD 的结论就是“第几个时间点发生了因果结构变化”,只要变化点检测做得好,任务就完成了。

正解变化点回答“分布在哪里突变”(时间/位置刻度),机制相关变量回答“具体哪个变量 \(X_i\) 的生成机制变了”(变量维度)。知道“换季”还不够,还要逐变量检验才知道“浇水效果”变了而“阳光效果”没变。这是两种不同粒度的输出。

为何常见:混淆了“时间分层”与“变量分层”,把检测阶段的结果误当成最终结论。

误区以为机制相关必须表现为效应从正变负,比如浇水从“促进生长”变成“抑制生长”,否则就不算变化。

正解强度变化(系数从 0.3 变成 1.4)同样是机制相关,方向反转只是强度变化跨过零点的特例。CD-NOD 检验的是条件分布 \(P(X_i \mid \text{Pa}_i, C)\) 是否随 \(C\) 改变,并不要求符号翻转。

为何常见:直观上“相反方向”最醒目,导致人们忽视了更常见的量变式机制漂移。

误区因为 CD-NOD 的名字里带“非平稳”,且论文例子常涉及时序变化,初学者以为它只处理有时间戳的数据。

正解CD-NOD 的“非平稳”泛指分布漂移的一切来源:时间(季节)、空间(不同城市)、群体(不同医院)。只要能把样本划分成多个上下文片段,就能使用;上下文可以是地区、商家、实验批次等分组标签。

为何常见:论文案例以时间变化为主,读者产生了路径依赖,把“变化点检测”狭窄地理解为“时间序列断点”。

误区以为 CD-NOD 输出的一定是全局唯一、方向全定的真实 DAG,拿来就能直接用。

正解作为基于约束的方法,它仍受马尔可夫等价类限制:若干条 DAG 在条件独立关系上完全等价,仅凭观测数据无法区分方向。CD-NOD 擅长回答“哪些机制受影响”,而不是保证全图唯一定向。想确认方向仍需额外假设、干预实验或领域知识。

为何常见:把“找到了机制相关变量”过度解读为“找到了全部因果真相”。

面试题

Q1. CD-NOD 的核心突破是什么?

单选题 · easy

  • A.取消了对数据平稳性的假设
  • B.把变化点作为隐藏变量纳入因果发现← 正确答案
  • C.仅用深度网络替代全部统计检验
  • D.只处理线性两变量简单系统

答案:B。CD-NOD 最核心的突破是把变化点/潜在上下文作为隐藏变量 C 显式纳入因果发现框架。A 错在它并未“取消”所有假设(仍需充分性与马尔可夫条件);C 和 D 都与算法实质不符。

Q2. 机制相关变量指的是?

单选题 · easy

  • A.数据中方差最大的观测变量
  • B.与目标变量相关性最强的变量
  • C.生成机制随上下文变化的变量← 正确答案
  • D.由纯噪声主导的不可用变量

答案:C。机制相关变量指 \(P(X_i \mid \text{Pa}_i, C)\) 随上下文 C 改变的变量。方差大、相关性强都与机制变化无关;噪声主导变量也不等于机制相关。

Q3. CD-NOD 属于哪一类因果发现方法?

单选题 · easy

  • A.基于评分搜索的方法
  • B.基于神经网络的方法
  • C.基于贝叶斯优化的方法
  • D.基于约束条件的方法← 正确答案

答案:D。CD-NOD 继承 PC 算法的过滤逻辑,通过条件独立测试来筛边、定向,属于典型的基于约束方法。评分搜索、神经网络、贝叶斯优化都不是它的技术路线。

Q4. CD-NOD 中“变化点检测”的直接目的?

单选题 · mid

  • A.剔除数据中的异常噪声样本
  • B.将非平稳数据转换为平稳数据
  • C.划分数据分布相对一致的片段← 正确答案
  • D.减少参与因果发现的变量个数

答案:C。变化点检测用于找到分布突变的边界,把数据划分成内部近似平稳的上下文片段。它不剔除异常、不转换平稳性、也不做变量筛选,而是为后续“扩展变量集”提供分段依据。

Q5. ePC 算法中的"e"代表什么?

单选题 · mid

  • A.enhanced(增强的)← 正确答案
  • B.efficient(高效的)
  • C.ensemble(集成的)
  • D.exact(精确的)

答案:A。ePC 是 enhanced PC 的缩写,指把上下文变量 C 加入变量集后运行的增强版 PC 算法。它并非强调效率、集成或精确性,而是强调数据维度上的扩展。

Q6. 判断变量 Xi 是否机制相关的统计检验是?

单选题 · mid

  • A.检验 Xi ⊥ C | Pa_i 是否被拒绝← 正确答案
  • B.检验 Xi 与所有变量的边际相关
  • C.检验噪声项是否等于零
  • D.检验 C 与 Pa_i 是否独立

答案:A。机制相关的判定标准是 \(H_0: X_i \perp C \mid \text{Pa}_i\) 被拒绝——在控制父节点后 Xi 仍与上下文有关。边际相关、噪声是否为零、C 与父节点独立都不能刻画机制随环境变化。

Q7. 当不同上下文的因果强度变化但方向未反转时,CD-NOD 会?

单选题 · hard

  • A.判定该变量为机制稳定变量
  • B.彻底无法识别这一变化
  • C.只要条件分布显著不同就判定机制相关← 正确答案
  • D.只能得到变化点但无法定位变量

答案:C。CD-NOD 检验的是条件分布是否随 C 改变,而非符号是否反转。即使斜率从 0.3 变成 1.4(方向都是正),只要 \(P(X_i \mid \text{Pa}_i, C)\) 显著不同,就判定机制相关。

Q8. CD-NOD 适用的典型数据场景有哪些?

多选题 · mid

  • A.单一平稳分布的大样本数据
  • B.随时间漂移的工业传感器数据← 正确答案
  • C.不同地区分布的消费行为数据← 正确答案
  • D.完全无监督的高维文本数据

答案:BC。CD-NOD 针对的是非平稳/多上下文数据,时间漂移和跨区域分布正是典型场景。单一平稳分布用传统 PC 即可,不需要 CD-NOD;无监督文本数据不构成可分割的上下文因果问题。

Q9. 下列哪些是 CD-NOD 的已知局限?

多选题 · hard

  • A.变化点检测误差会传播到下游判断← 正确答案
  • B.条件独立测试在小样本下功效受限← 正确答案
  • C.能保证输出全局唯一的真实 DAG
  • D.需要假设数据始终处于平稳状态

答案:AB。变化点检测是 CD-NOD 的前置步骤,其误差会沿流水线传播;条件独立测试在样本少时统计功效有限,这是约束方法的通病。C 错在马尔可夫等价类导致方向不一定唯一;D 与 CD-NOD 的前提相反。

Q10. 与“变化点”相比,“机制相关变量”的粒度差异体现在?

多选题 · extreme

  • A.变化点是时间刻度上的分布突变← 正确答案
  • B.机制相关变量是列表层面的身份← 正确答案
  • C.两者等价无需区分只取其一
  • D.变化点用于分段机制用于逐变量← 正确答案

答案:ABD。变化点回答“分布在哪里突变”,是时间/位置刻度上的事件;机制相关变量回答“哪个变量的机制变了”,是变量维度的身份。两者层级不同、不可互相替代,因此 C 错误;在实际流程中变化点检测为分段服务,机制检验则逐变量进行。