GitHunt
SH

shanshili/GNN-Causal-Inference

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,包含边权重、滞后信息
  • 重要性排序: 一维数组,节点索引按重要性排序
  • 预测分数: 一维数组,每个候选节点的韧性分数

项目流程

  1. 数据生成: Causal_simulation_data_2.py → 生成时空因果数据
  2. 因果推断: PCMCI/SCMI模块 → 提取因果关系
  3. 特征学习: CADGNN → 学习因果表示
  4. 模型训练: MGC-RM系列 → 训练图匹配模型
  5. 节点排序: PageRank → 节点重要性排序
  6. 韧性预测: Resilience_prediction → 预测网络韧性
  7. 性能评估: Perform → 评估网络性能指标

该项目通过多种因果推断算法和深度学习模型的结合,提供了完整的时空因果分析和网络韧性预测解决方案。

数据集

  • TJ数据集:天津地区时空数据
  • Intel Lab Data:Intel实验室传感器数据

实验报告

实验1:PCMCI+算法验证

参考:

对比分析PCMCI+算法生成的因果图和显著相关图

  1. 数据合成:根据$X_t = \alpha \cdot Y_{t-1} + \beta \cdot Z_{t-2} + \epsilon_t$ 预设因果关系,并添加噪声,生成合成时间序列数据;

    timeseries_plot

  2. 计算滞后相关函数

    观察变量之间是否存在时间延迟上的相关性,确实符合预设的因果关系

    lag_functions_plot

  3. PCMCI+学习因果图:从观测数据中识别出:哪些变量对另一个变量有直接的滞后影响,这些影响是正向还是负向的(通过 MCI 数值判断)

    causal_graph

  4. 构建显著相关图用于对比

    1)生成代理数据集:基于原始数据和已知因果结构,生成多个替代数据集(具有类似的统计特性、不同的随机噪声实现、“无因果”的参考分布)

    2)对比原始相关性和代理数据的相关性,判断其是否显著

    相关性成因:

    • 真实的因果关系;

    • 样本量有限或噪声引起的伪相关性)

    compare_lag_functions

    黑色线:替代数据的平均相关性
    灰色区域:90%置信区间
    红色线:原始数据的相关性

    若原始相关性绝对值超出随机情况→存在真实的因果关系,否则表明原始数据中的相关性可能是随机波动的结果。

    significant_correlations_graph

    筛选P值绘制显著相关图,显著相关图包含相关但非因果的边,但是显著性高的边确实为真是因果关系,PCMCI+算法的因果学习结果基本正确

shanshili/GNN-Causal-Inference | GitHunt