概述与定位

一句话定位: 本笔记提供因果图模型和因果发现算法的系统性实验配置指南,包括合成数据生成和基准测试设计。

** prerequisites **

  • 概率图模型基础(贝叶斯网络、DAG)
  • 因果推断基础(因果图、d-分离)
  • 统计基础(条件独立性测试)
  • Python数据分析基础(numpy, pandas)

核心直觉

因果发现算法的评估需要 ground truth 因果图,但真实数据的因果结构未知。合成数据生成通过指定因果图结构和噪声参数,产生已知的因果数据,是评估因果发现算法的标准方法。

为什么需要合成数据配置的核心直觉:真实世界的因果结构是不可观测的,无法验证因果发现算法的准确性。合成数据通过显式定义 DAG 和条件分布,提供 ground truth,使算法评估成为可能。

Benchmark设计的核心直觉:因果发现算法的性能受多种因素影响:变量数量、边密度、数据样本量、线性vs非线性、离散vs连续等。系统性 benchmark 需要覆盖这些因素的不同配置。


数学推导

因果图的形式化

设变量集合 ,因果 DAG ,其中 是有向边集合。

因果机制由结构方程模型描述:

其中 的父节点集合, 是独立噪声。

线性高斯模型

最常用的合成数据模型:

参数:

  • : 因果效应强度
  • : 噪声标准差

非线性模型

常用函数形式:

  • 多项式:
  • 神经网络:
  • 高斯过程:

数据生成算法

Algorithm: Generate Causal Data
Input: DAG G, sample size N, noise scale σ
Output: Data matrix D ∈ R^{N×n}

1. Topological sort nodes of G to get ordering π
2. Initialize D = zeros(N, n)
3. for each node X_i in topological order π:
   a. Compute parent values D[:, Pa(X_i)]
   b. Sample X_i = f_i(Pa(X_i)) + σ * ε, ε ~ N(0,1)
   c. Store D[:, i] = X_i
4. Return D

训练与估计

关键参数配置

参数说明典型值范围
n_samples样本数量100 - 10000
n_vars变量数量5 - 50
edge_prob边存在概率0.05 - 0.3
edge_weight因果效应强度0.5 - 2.0
noise_std噪声标准差0.1 - 1.0
graph_type图类型ER, SF, B

图类型配置

Erdos-Renyi (ER) 图:

  • 每个边独立以概率 存在
  • 参数: 控制稀疏性

Scale-Free (SF) 图:

  • 度分布遵循幂律
  • 模拟真实网络的异质性

Bipartite (B) 图:

  • 节点分为两组,组内无连边
  • 模拟混杂结构

gcastle 配置示例

from castle.datasets import DAG, IIDSimulation
 
# 配置ground truth DAG
n_vars = 10
n_edges = 15
graph_type = 'ER'
 
# 生成DAG
adj_matrix = DAG(n_vars, n_edges, graph_type).to_adjacency_matrix()
 
# 生成线性高斯数据
data = IIDSimulation(
    adj_matrix,
    n_samples=1000,
    noise_type='gauss',
    noise_scale=1.0
).data

bnlearn 配置示例

from bnlearn import structure_learning, parameter_learning
 
# 定义网络结构
model = {
    'A': [],
    'B': [],
    'C': ['A', 'B'],
    'D': ['C'],
    'E': ['C']
}
 
# 参数学习
df = parameter_learning.fit(model, data)
 
# 结构学习
model_learned = structure_learning.fit(data, method='hc')

实验设计

Benchmark 配置表

配置IDn_varsedge_probn_samplesnonlinear用途
B1100.1500No基础评估
B2100.1500Yes非线性鲁棒性
B3200.11000No大规模
B4100.3500No密集图
B5100.05500No稀疏图

评估指标

结构恢复:

  • SHD (Structural Hamming Distance): 错误边数
  • SHD-C: 仅计算方向错误的边
  • TPR/FPR: 真阳性率/假阳性率

参数估计:

  • MAE: 平均绝对误差
  • MSE: 均方误差

复现注意事项

关键实现点

  1. 拓扑排序: 生成数据前必须对DAG拓扑排序
  2. 噪声独立: 确保噪声变量独立同分布
  3. 参数范围: 确保因果效应显著大于噪声
  4. 随机种子: 固定所有随机种子

常见问题

  • 循环检测: 生成DAG后验证无环
  • 过稀疏/过密集: 检查边数量是否符合预期
  • 数值不稳定: 因果效应太大导致数值问题

超参数参考

参数典型值注意事项
n_vars10-50变量太多计算量大
edge_prob0.1-0.2保证足够边且不过密
n_samples500-5000样本太少因果发现不准
noise_std0.5-1.0噪声太大因果信号弱

本章要点总结

  • 合成数据是评估因果发现算法的标准方法
  • 线性高斯模型是最常用的基准模型
  • ER图和Scale-Free图模拟不同网络结构
  • 拓扑排序确保数据生成顺序正确
  • gcastle和bnlearn是主流因果实验库
  • SHD是评估结构恢复的主要指标
  • 参数范围需平衡信号强度和噪声
  • 固定随机种子确保可复现性
  • Benchmark需要覆盖多种配置
  • 非线性模型测试算法鲁棒性

关键词

因果图模型 合成数据 因果发现benchmark DAG生成 gcastle bnlearn 结构评估 参数估计 SHD 实验配置