GNN-Causal-Inference
│ .gitignore
│ README.md
│
├─.idea
├─Combined_Results
├─Correlation_Graph
├─dataset
│ ├─Causal_simulation_data
│ ├─Causal_simulation_data_2
│ │ └─N100_T10000_t3
│ ├─Intel Lab Data
│ └─pemsd7
├─Module
│ │ CADGNN.py
│ │ causal_analysis_pipeline.py
│ │ generate_reconstructed_perturbations.py
│ │ MGC-RM.py
│ │ MGC-RM2.py
│ │ MGC-RM3.py
│ │ PageRank.py
│ │ pcmci-val.py
│ │ PCMCI_.py
│ │ PCMCI_2.py
│ │ pcmci_draw_DiGraph.py
│ │ pcmci_draw_MultiDiGraph.py
│ │ PCMCI_Intel.py
│ │ PCMCI_PEMS.py
│ │ PCMCI_TJ.py
│ │ Perform.py
│ │ perturbation.py
│ │ plotscore.py
│ │ Resilience_prediction.py
│ │ SCMI.py
│ │ SCMI2.py
│ └─ Subgraph.py
├─reference
│ README.pdf
│ 基于因果关系的时空数据预测算法研究_曹瑞豪(1).pdf
│ 空间关联模式引导下的地质灾害空间因果关系发现方法_陈炳蓉.pdf
│ 素材.pptx
│
└─utils
│ Causal_dataset_process.py
│ Causal_simulation_data.py
│ Causal_simulation_data_2.py
│ Causal_simulation_perform.py
│ corr_graph_const.py
│ euclidean_distance.py
│ feature_expansion.py
│ get_data_file.py
│ haversine_distance.py
│ Intel_dataprocess_25072120.py
│ Intel_dataprocess_250721_re.py
│ Intel_epoch_25072120.py
│ Intel_timestamps_process_250722.py
│ setup.py
│ TJ_dataprocess_250718.py
│ TJ_dataprocess_3d_25071816.py
│ utils.py
│ __init__.py
│
└─pems
项目概述
GNN-Causal-Inference 是一个基于图神经网络的因果推断系统,用于分析时空数据中的因果关系。该项目集成了多种因果推断算法(PCMCI、SCMI)和深度学习模型(CADGNN),并提供了完整的数据处理、模型训练和预测流程。
核心模块功能与区别
1. 因果推断算法模块
PCMCI 相关模块
-
PCMCI_.py: 基础PCMCI+算法实现
- 功能: 运行PCMCI+算法,分析时间序列数据中的因果关系
- 输入: 时间序列数据、节点位置、参数配置
- 输出: 因果图矩阵、因果效应矩阵、可视化结果
- 特点: 基础实现,支持距离阈值过滤
-
PCMCI_2.py: PCMCI模块的封装版本
- 功能: 提供完整的PCMCI分析流水线
- 输入/输出: 与PCMCI_.py相同,但提供了更清晰的模块化接口
- 特点: 模块化设计,便于外部调用
-
pcmci_draw_DiGraph.py: PCMCI结果可视化(简单图)
- 功能: 使用
nx.DiGraph可视化因果关系 - 输入: PCMCI结果文件(.npz)
- 输出: 因果图和因果矩阵热力图
- 特点: 仅处理简单有向图,不包含时间滞后信息
- 功能: 使用
-
pcmci_draw_MultiDiGraph.py: PCMCI结果可视化(多重图)
- 功能: 使用
nx.MultiDiGraph可视化因果关系 - 输入: PCMCI结果文件(.pkl)
- 输出: 包含时间滞后信息的因果图
- 特点: 支持多个时间滞后,显示滞后τ值,自关联边可视化
- 功能: 使用
-
领域特定PCMCI模块:
- PCMCI_Intel.py: Intel传感器数据的PCMCI分析
- PCMCI_PEMS.py: PEMS交通数据的PCMCI分析
- PCMCI_TJ.py: 天津气象数据的PCMCI分析
SCMI 相关模块
-
SCMI.py: 基础SCMI算法实现
- 功能: 空间因果互信息分析
- 输入: 时间序列数据、节点位置、空间参数
- 输出: 空间因果图、Moran's I统计量
- 特点: 考虑空间邻近性,使用空间权重矩阵
-
SCMI2.py: SCMI模块封装版本
- 功能: SCMI算法的模块化实现
- 输入/输出: 与SCMI.py相同,但提供了更清晰的接口
- 特点: 更好的模块化设计,便于外部调用
2. 深度学习模型模块
CADGNN 模块
- CADGNN.py: 对抗解耦图神经网络
- 功能: 分离因果和偏差表示,提取时空因果特征
- 输入: 相关图特征、因果图特征、边索引、边权重
- 输出: 因果表示、重建矩阵、判别器输出
- 特点: 使用梯度反转层、符号图卷积层、对抗训练
3. 模型训练与评估模块
图匹配模块
-
MGC-RM.py: 多粒度图匹配模型
- 功能: 计算图对相似性,用于韧性预测
- 输入: 图对(边索引、节点特征、边权重)
- 输出: 相似性分数
- 特点: 多粒度匹配,使用CADGNN提取的因果表示
-
MGC-RM2.py: MGC-RM的改进版本
- 功能: 与MGC-RM.py相同,但包含注意力机制
- 改进: 引入多头注意力、门控机制、残差连接
-
MGC-RM3.py: MGC-RM的进一步改进
- 功能: 与MGC-RM2.py相同,但优化了读出层
- 改进: 多头注意力读出层
4. 数据处理模块
数据生成模块
-
Causal_simulation_data.py: 简单因果结构数据生成
- 功能: 生成基础的因果时间序列数据
- 特点: 每个节点一个自回归项,简单邻近节点影响
-
Causal_simulation_data_2.py: 复杂因果结构数据生成
- 功能: 生成复杂的因果时间序列数据
- 特点: 每个节点多个自回归项、多个时间滞后、正负效应、防止双向连接机制
数据处理模块
- Causal_simulation_perform.py: 因果连接分析与可视化
- 功能: 分析因果连接权重,可视化重要节点
- 输入: 因果连接字典、节点位置
- 输出: 节点重要性排序、可视化图
5. 分析与预测模块
节点重要性分析
- PageRank.py: 加权PageRank分析
- 功能: 计算节点的重要性权重
- 输入: PCMCI和SCMI因果矩阵、节点位置
- 输出: 节点重要性排序、可视化结果
- 特点: 结合时空因果关系,可视化因果图
韧性预测
-
Resilience_prediction.py: 韧性预测模型
- 功能: 预测网络韧性,使用因果特征
- 输入: 因果特征、节点位置
- 输出: 韧性分数
- 特点: 结合CADGNN因果表示
-
causal_analysis_pipeline.py: 因果分析流水线
- 功能: 为韧性预测提供因果图输入
- 输入: 节点特征、位置、参数
- 输出: 组合因果矩阵
- 特点: 结合PCMCI和SCMI结果
性能评估
- Perform.py: 网络性能指标计算
- 功能: 计算各种网络性能指标
- 输入: 节点排序、位置数据
- 输出: 多种性能指标曲线
- 指标: 自然连通性、AEC、鲁棒性分数等
数据结构说明
输入数据格式
- 时间序列数据:
(节点数, 时间步数)或(时间步数, 节点数) - 节点位置:
(节点数, 2)- [x坐标, y坐标] - 因果矩阵:
(节点数, 节点数, 时间滞后+1)- [源节点, 目标节点, 滞后]
输出数据格式
- 因果图: NetworkX MultiDiGraph,包含边权重、滞后信息
- 重要性排序: 一维数组,节点索引按重要性排序
- 预测分数: 一维数组,每个候选节点的韧性分数
项目流程
- 数据生成: Causal_simulation_data_2.py → 生成时空因果数据
- 因果推断: PCMCI/SCMI模块 → 提取因果关系
- 特征学习: CADGNN → 学习因果表示
- 模型训练: MGC-RM系列 → 训练图匹配模型
- 节点排序: PageRank → 节点重要性排序
- 韧性预测: Resilience_prediction → 预测网络韧性
- 性能评估: Perform → 评估网络性能指标
该项目通过多种因果推断算法和深度学习模型的结合,提供了完整的时空因果分析和网络韧性预测解决方案。
数据集
- TJ数据集:天津地区时空数据
- Intel Lab Data:Intel实验室传感器数据
实验报告
实验1:PCMCI+算法验证
参考:
对比分析PCMCI+算法生成的因果图和显著相关图
-
数据合成:根据$X_t = \alpha \cdot Y_{t-1} + \beta \cdot Z_{t-2} + \epsilon_t$ 预设因果关系,并添加噪声,生成合成时间序列数据;
-
计算滞后相关函数
观察变量之间是否存在时间延迟上的相关性,确实符合预设的因果关系
-
PCMCI+学习因果图:从观测数据中识别出:哪些变量对另一个变量有直接的滞后影响,这些影响是正向还是负向的(通过 MCI 数值判断)
-
构建显著相关图用于对比
1)生成代理数据集:基于原始数据和已知因果结构,生成多个替代数据集(具有类似的统计特性、不同的随机噪声实现、“无因果”的参考分布)
2)对比原始相关性和代理数据的相关性,判断其是否显著
相关性成因:
-
真实的因果关系;
-
样本量有限或噪声引起的伪相关性)
黑色线:替代数据的平均相关性
灰色区域:90%置信区间
红色线:原始数据的相关性若原始相关性绝对值超出随机情况→存在真实的因果关系,否则表明原始数据中的相关性可能是随机波动的结果。
筛选P值绘制显著相关图,显著相关图包含相关但非因果的边,但是显著性高的边确实为真是因果关系,PCMCI+算法的因果学习结果基本正确
-




