pygod
基于图神经网络的异常检测库,16+算法覆盖节点/边/图三级粒度,专克「伪装者」
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于图神经网络的异常检测库,16+算法覆盖节点/边/图三级粒度,专克「伪装者」
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

图1:PyGOD 官方 Logo
2020年,某头部电商平台的反欺诈团队遇到了一个棘手问题:他们用 XGBoost 训练的欺诈检测模型,准确率从 92% 一路跌到了 67%。原因并不复杂——职业欺诈者已经摸清了模型的套路,开始通过"养号"的方式建立看似正常的社交关系网:用多个账号互相点赞、评论、转账,伪造出「正常用户」的行为轨迹。
这种新型欺诈的狡猾之处在于:它不是孤立的异常点,而是嵌入在复杂关系网络中的「伪装者」。传统基于表格数据的异常检测方法,只能看到每个用户独立的行为特征,却看不见这张密密麻麻的关系网。而图结构数据,恰恰是表达实体关系最强的武器。
这就是图异常检测(Graph Outlier Detection)这一细分领域的诞生背景,而 PyGOD(Python Graph Outlier Detection) 就是专门解决这个问题的全栈式 Python 库。
PyGOD 由来自伊利诺伊大学芝加哥分校(UIC)、卡内基梅隆大学(CMU)、北京航空航天大学(BUAA)、亚利桑那州立大学(ASU)和伊利诺伊理工学院(IIT)的研究团队联合开发。项目的核心作者 Kay Liu 和 Yingtong Dou 均来自 UIC 数据挖掘实验室,导师为知名学者 Philip S. Yu 教授(ACM Fellow、IEEE Fellow)。
项目在学术发表方面成绩斐然:
这种「顶会论文 + 开源实现 + Benchmark 数据集」三位一体的模式,使 PyGOD 不仅仅是一个工具库,更是一个完整的图异常检测研究生态。
如果把异常检测比作「在人群中找出可疑者」,那么:
PyGOD 的设计哲学与表格异常检测库 PyOD 一脉相承:统一的 fit/predict API、相似的超参数命名、sklearn 风格的返回值(decision_score_、label_、threshold_)。如果你熟悉 PyOD,学习 PyGOD 的成本几乎为零。
PyGOD 目前实现了 16 种图异常检测算法,覆盖多种技术路线:
这类方法将图数据编码为低维向量,再通过解码器重建原始图结构,异常节点的重建误差通常更大:
| 算法 | 全称 | 特点 | 发表 |
|---|---|---|---|
| DOMINANT | Deep Anomaly Detection | 最早将 GAE 引入图异常检测的里程碑工作 | SDM 2019 |
| AnomalyDAE | Dual Autoencoder | 同时重建节点特征和图结构,双视角捕获异常 | ICASSP 2020 |
| GAAN | Generative Adversarial | 引入 GAN 对抗训练提升鲁棒性 | CIKM 2020 |
| DMGD | Multi-Graph Description | 融合多图视图联合检测 | FAIA 2020 |
| GUIDE | Higher-Order Structure | 利用高阶结构信息增强检测能力 | BigData 2021 |
| GADNR | Neighborhood Reconstruction | 2024年最新工作,通过邻域重建检测异常 | WSDM 2024 |
通过数据增强和对比学习让正常节点和异常节点在表示空间中拉开距离:
| 算法 | 全称 | 特点 | 发表 |
|---|---|---|---|
| OCGNN | One-Class GNN | 单类支持向量机的图神经网络版本 | Neural Computing 2021 |
| CoLA | Contrastive Learning Anomaly | 对比学习 + 自监督,图增强策略丰富 | TNNLS 2021 |
| CONAD | Contrastive NAD | 结合数据增强的对比异常检测 | PAKDD 2022 |
| CARD | Community-Guided | 社区感知 + 对比学习 + 异常感知重建 | DASFAA 2024 |
| 算法 | 全称 | 特点 | 发表 |
|---|---|---|---|
| SCAN | Structural Clustering Algorithm | 最早基于结构聚类的图异常检测 | KDD 2007 |
| GAE | Variational Graph Auto-Encoder | 变分自编码器,概率建模 | - |
| Radar | Residual Analysis | 基于残差分析的属性网络异常检测 | IJCAI 2017 |
| ANOMALOUS | Joint Modeling | 联合建模属性和结构 | IJCAI 2018 |
| ONE | Outlier Aware Network Embedding | 感知异常的图嵌入方法 | AAAI 2019 |
| DONE/AdONE | Deep Outlier Detection | 基于 MLP 自编码器,无图卷积 | WSDM 2020 |
PyGOD 支持三种异常检测粒度,超过了大多数同类工具:
PyGOD 的代码结构清晰,分为六大核心模块:
pygod/
├── detector/ # 16种检测器,对外统一API
├── nn/
│ ├── encoder.py # 图编码器(GCN/GAT/SAGE 等)
│ ├── decoder.py # 自编码器解码器
│ ├── conv.py # 自定义图卷积层
│ └── 功能层(done/cola/card/dominant 等)
├── utils/ # 工具函数
├── metric/ # 评估指标
├── generator/ # 图数据生成器
└── test/ # 单元测试
detector/base.py 是所有检测器的基类,定义了标准的 fit() / predict() 接口。每个具体检测器(如 DOMINANT)继承 base.py,复用 PyTorch Geometric 的 Data 对象作为输入,确保了与 PyG 生态的完全兼容。
nn/encoder.py 封装了多种图编码器:GCN(图卷积网络)、GAT(注意力机制)、SAGE(采样聚合)等,这些编码器可以被多个检测器共享,实现了代码复用。
benchmark/ 目录下提供了完整的评测框架,包含 main.py(主评测脚本)、type.py(数据集类型管理)、utils.py(评测工具)和 time.py(性能计时),用于复现 BOND 论文的实验结果。
图异常检测的计算代价通常很高(O(n²) 的节点对关系),PyGOD 通过以下策略实现大规模图的可扩展处理:
这意味着在 Reddit 这样的百万节点图上,用户也能在消费级 GPU(如 RTX 3090)上完成训练。
PyGOD 最大的工程亮点是极低的上手门槛。以 DOMINANT 为例:
from pygod.detector import DOMINANT
model = DOMINANT(num_layers=4, epoch=20)
model.fit(train_data) # 输入为 PyG Data 对象
score = model.decision_score_ # 异常分数,越高越异常
pred, score = model.predict(test_data, return_score=True)
与 PyOD 的 API 设计完全对齐,习惯 scikit-learn 的用户可以直接上手。文档提供了交互式 Jupyter Notebook 教程,涵盖从数据加载到结果可视化的完整流程。
PyGOD 通过 pip 一键安装,但有一个需要注意的「设计决策」:不自带 PyTorch 和 PyTorch Geometric。
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install torch_geometric
pip install pygod
这个决策背后有合理的技术原因:PyG 依赖图结构复杂,不同 CUDA 版本之间的兼容性差异大,让用户自行安装可以减少依赖冲突。但这也意味着部署比纯 pip 安装多了一步。
系统要求方面,CPU 可运行但速度较慢,强烈建议使用 NVIDIA GPU(显存 4GB+),配合 CUDA 11.8+ 环境。无 Dockerfile 和 Web UI,更适合集成到现有 Python 数据管道中,作为离线分析或实时检测 pipeline 的一环。
客观来说,PyGOD 在以下方面存在局限:
图异常检测是 AI 安全领域增长最快的方向之一。随着:
这类工具库的价值正在快速放大。PyGOD 作为该领域首个系统性的 Python 工具库,已经被 100+ 学术论文引用,PyPI 月下载量持续增长,是图神经网络 + 异常检测交叉领域的首选工具。
| 指标 | 数值 |
|---|---|
| GitHub Stars | 1,496 |
| 算法数量 | 16+ |
| 支持粒度 | 节点 / 边 / 图 |
| 深度学习框架 | PyTorch + PyTorch Geometric |
| GPU 支持 | 全部算法 |
| 编程语言 | Python 3.8+ |
| 许可证 | BSD-2-Clause |
| 最新版本 | v1.1.0(2024年2月) |
| 学术引用 | JMLR + NeurIPS 双顶会 |