PyGOD: A Python Library for Graph Outlier Detection
摘要
PyGOD是一个开源的Python库,用于检测图数据中的异常值。作为这类库中首个综合性的实现,PyGOD支持广泛的基于图的方法,用于节点、边、子图和图级别的异常检测,在一个统一的、良好文档化的API下设计,旨在供研究人员和从业者使用。为了解决大型图中的可扩展性问题,我们为选定的模型提供了包括小批量和抽样在内的高级功能。PyGOD配备了促进代码可靠性和可维护性的最佳实践,包括单元测试、持续集成和代码覆盖。为了促进可访问性,PyGOD在https://github.com/pygod-team/pygod/和Python Package Index (PyPI)上以宽松的BSD许可证发布。
关键词:异常检测、异常检测、图学习、图神经网络
1 引言
异常检测(Outlier Detection,OD),也称为异常检测,是识别与一般数据分布不符的异常样本的关键机器学习任务(Aggarwal, 2017; Li等,2022)。随着图数据在研究和实际应用中的重要性日益增加(Ding等,2021b; Huang等,2021; Fu等,2021; Zhou等,2021; Xu等,2022),最近利用基于图的方法如图神经网络(GNNs)进行异常检测引起了很多关注(Ma等,2021; Ding等,2019b,2021a),并在社交网络(Sun等,2018; Dou等,2020)和安全系统(Cai等,2021)等许多应用中发挥作用,例如检测可疑活动。
尽管在多种编程语言中存在一长串已建立的库,用于检测表格和时间序列数据中的异常值,例如PyOD(Zhao等,2019)、SUOD(Zhao等,2021b)、PyODDs(Li等,2020)、ELKI(Achtert等,2010)、OutlierDetec-Liu、Dou、Zhao、Ding、Hu、Zhang、Ding、Chen、Peng、Shu、Chen、Jia和Yu等(Muhr等,2022)、PyTOD(Zhao等,2021a)、TODS(Lai等,2021)、Telemanom(Hundman等,2018),但是缺少一个专门用于图异常检测的库。
为了填补这一缺口,我们设计了第一个全面的Python图异常检测库,名为PyGOD,其中包括了一些关键的技术进步和贡献。首先,它涵盖了从节点到图层级的多种算法,并且在标签/监督的可用性上有所不同。表1显示,PyGOD已经支持了十多种领先的算法。其次,PyGOD通过统一的API设计简化了检测模型的可访问性。从用户的角度来看,只需要将数据准备成预定义的图格式——然后PyGOD中的所有异常检测器都能够处理和处理这些数据。第三,PyGOD支持通过小批量和抽样进行大规模检测,这可以促进大图的检测。考虑到代码的清晰性和质量,我们提供了详细的API文档和示例,并且实现了跨平台的持续集成的单元测试,以及代码覆盖率和可维护性检查。
| 算法 | 监督 | 层级 | 骨干网络 | 小批量 |
|---|---|---|---|---|
| MLPAE (Sakurada 和 Yairi, 2014) | 无监督 | 节点 | MLP | 是 |
| GCNAE (Kipf 和 Welling, 2016) | 无监督 | 节点 | GNN | 是 |
| ONE (Bandyopadhyay 等人, 2019) | 无监督 | 节点 | MF | 否 |
| DOMINANT (Ding 等人, 2019a) | 无监督 | 节点 | GNN | 是 |
| DONE (Bandyopadhyay 等人, 2020) | 无监督 | 节点 | GNN | 是 |
| AdONE (Bandyopadhyay 等人, 2020) | 无监督 | 节点 | GNN | 是 |
| AnomalyDAE (Fan 等人, 2020) | 无监督 | 节点 | GNN | 进行中 |
| GAAN (Chen 等人, 2020) | 无监督 | 节点 | GAN | 是 |
| OCGNN (Wang 等人, 2021) | 无监督 | 节点 | GNN | 是 |
| GUIDE (Yuan 等人, 2021) | 无监督 | 节点 | GNN | 是 |
| CONAD (Xu 等人, 2022) | 无监督/半监督 | 节点 | GNN | 进行中 |
| CoLA (Xu 等人, 2022) | 无监督/半监督 | 节点 | GNN | 进行中 |
表1:PyGOD V0.2.0中选择的异常检测模型

翻译:
训练数据 G(PyG 数据对象)
process_data(G): 提取 G 的关键信息
模型训练(适用于转导和归纳设置)
fit(K_G): 训练检测器
输出:
decision_scores_: 异常得分
labels_: 二分类的异常标签
测试数据 H(PyG 数据对象)
process_data(H): 提取 H 的关键信息
评分和预测(仅适用于归纳设置)
decision_function: 预测原始异常得分
predict: 预测二分类的异常标签
predict_proba: 预测成为异常的概率
在这个过程中,训练数据和测试数据都是以PyTorch Geometric数据对象的形式处理的。训练阶段适用于两种设置:转导(transduction)和归纳(inductive)。转导设置中,模型直接在训练数据上进行预测,而归纳设置中,模型在新的、未见过的数据上进行预测。模型训练后,可以输出异常得分和二分类的异常标签。在归纳设置中,除了可以得到每个数据点的异常得分和预测标签,还可以得到数据点被判定为异常的概率。
图1:PyGOD统一API设计的演示
2 库的设计与实现
依赖性。PyGOD 是为 Python 3.6 及以上版本构建的,它依赖于流行的 Pytorch (Paszke 等人,2019) 和 Pytorch Geometric (PyG) (Fey 和 Lenssen,2019) 来在 CPU 和 GPU 上有效进行图学习。此外,它使用 numpy (Harris 等人,2020),scipy (Virtanen 等人,2020) 和 scikit-learn (Pedregosa 等人,2011) 进行数据操作。
API 设计。受到 scikit-learn (Buitinck 等人,2013) 和 PyOD (Zhao 等人,2019) 的 API 设计启发,PyGOD 中的所有检测算法都继承自具有相同 API 接口的基类:(i) fit 训练检测模型,获取输入数据上的异常分数(分数越高,越可能是异常)和标签,并为预测生成必要的统计信息(在归纳设置中);(ii) decision function 利用训练好的模型预测新进数据的原始异常分数(在归纳设置中);(iii) predict 使用训练好的模型返回二进制预测(正常样本为 0,异常样本为 1);以及 (iv) predict_proba 使用领先方法 (Kriegel 等人,2011) 返回样本作为异常的概率。同时,我们还包括了在异常检测中提供置信度分数的最新进展 (Perini 等人,2020) 用于上述预测方法。上述 API 的使用在代码演示 1 中展示。

代码演示1:在Cora数据集(Morris等,2020)上使用Dominant方法(Ding等,2019a)
利用 PyG 简化图学习。我们选择在流行的 PyG 库之上开发 PyGOD,原因有多个。首先,这降低了用户处理图数据的复杂性。也就是说,PyGOD 只要求输入数据为 PyG 标准的图数据格式。值得注意的是,不同的检测模型需要从 PyG 图中提取不同的信息。在每个检测模型的实现中,我们设计了一个抽象的处理图方法来提取必要的信息,例如邻接矩阵、节点和边的属性等,用于底层的检测算法。其次,大多数检测算法共享常见的骨干网络(参见表1),如图卷积神经网络(GCN)(Kipf 和 Welling,2017)和图自编码器(Kipf 和 Welling,2016),PyG 为此提供了优化的实现。第三,PyG 是最受欢迎的 GNN 库,具有高级功能,如图采样和分布式训练。在 PyG 框架下,我们为选定的模型启用并实现了小批量和/或采样,以适应如表1所示的大规模图的学习。
除了检测模型外,我们还设计了一组有用的实用函数来促进图异常检测。在评估方面,PyGOD 在 utils.metric 模块中提供了图 OD 的常用指标。在数据方面,PyGOD 在 utils.outlier_generator 中为结构和属性设置提供了异常注入方法(Ding 等人,2019a),作为模型评估和基准测试的解决方案。
3. 库的鲁棒性和可访问性
鲁棒性和质量。在构建 PyGOD 时,我们遵循了系统设计和软件开发的最佳实践。首先,我们利用 GitHub Actions 自动化在不同 Python 版本和操作系统下的测试过程。除了每日计划测试外,提交和拉取请求也会触发单元测试。值得注意的是,我们强制所有代码至少达到 90% 的测试覆盖率。通过遵循 PEP8 标准,我们强制实现一致的编码风格和命名约定,这有利于社区合作和代码可读性。
可访问性。PyGOD 附带了由 Read the Docs 渲染的详细 API 文档。在文档中,提供了安装指南和 Jupyter 笔记本中的交互式示例。为了促进社区贡献,该项目托管在 GitHub 上,有友好的贡献指南和问题报告机制。
4. 结论和未来计划
在本文中,我们介绍了第一个全面的图异常检测库,称为 PyGOD。独特的是,它支持广泛的检测算法,具有统一的 API、丰富的文档和鲁棒的代码设计,这些对学术研究和工业应用都非常有用。PyGOD 的发展计划将专注于多个方面:(i) 包括更多针对不同子任务的算法,例如在边缘和子图中的异常检测;(ii) 与工业界合作,使 PyGOD 更加实用,并满足从业者的需求;(iii) 利用图领域的最新进展优化其可访问性和可扩展性(贾等人,2020);以及 (iv) 结合自动化机器学习,实现智能模型选择和超参数调整(赵等人,2021c)。
致谢
本文的作者得到了美国国家科学基金会(NSF)的支持,其资助的项目包括 III-1763325、III-1909323、III-2106758 和 SaTC-1930941。
这篇文章介绍了PyGOD——一个用于图异常检测的综合性Python库。PyGOD支持从节点到图级别的多种基于图的检测方法,具备统一的API设计,便于研究者和实践者使用。它通过提供小批量和采样功能解决了大规模图的可扩展性问题,并遵循最佳实践如单元测试、持续集成和代码覆盖率来保证代码的可靠性和可维护性。PyGOD的技术优势包括其对多种领先算法的支持、提高检测模型的可访问性和处理大规模图的能力。未来计划包括扩展算法范围、与工业界合作提高实用性、优化可访问性和可扩展性,并整合自动化机器学习以实现智能模型选择和超参数调整。
实操:https://github.com/pygod-team/pygod/
原文地址:https://arxiv.org/pdf/2204.12095.pdf

9284

被折叠的 条评论
为什么被折叠?



