2. 金融数据与图结构基础
在金融场景中,数据天然具有关系属性:账户之间的转账、股票之间的联动、企业与供应链上下游的关联、用户与设备的登录关系,都可以抽象为“实体 + 关系”的网络。要把这些数据送入 PyTorch Geometric(PyG)进行建模,第一步不是写模型,而是理解金融数据的类型以及图结构的基本表达方式。本节将围绕金融数据类型、图的基本概念、节点与边、邻接矩阵、同构图与异构图展开,为后续的图构建与模型训练打下基础。
一、金融数据类型:从表格到关系
金融数据通常可以分为三类。第一类是结构化数据,如交易流水、账户余额、行情 K 线,它们以行和列的形式存储在关系型数据库或 CSV 中,字段明确、便于统计。第二类是时间序列数据,如股票价格、汇率、利率曲线,其核心是“时间戳 + 数值”,强调趋势与周期性。第三类是关系型数据,如转账网络、担保关系、股权结构,这类数据的价值不在于单个样本,而在于样本之间的连接模式。
传统机器学习往往把每个样本视为独立同分布,但金融风控、反欺诈、量化选股等任务中,样本之间高度关联。例如,一个账户的欺诈风险会通过转账路径传播到相邻账户;一只股票的涨跌会受同行业、同供应链股票的影响。图结构正是用来显式表达这种关联的载体。
提示:判断一个金融任务是否适合图建模,可以问三个问题:实体之间是否存在有意义的连接?连接方向或类型是否影响结果?邻居信息是否能提升预测效果?若答案均为“是”,图方法通常值得尝试。
二、图的基本概念:节点、边与邻接矩阵
图由节点(Node/Vertex)和边(Edge)组成。在金融图中,节点可以表示账户、用户、股票、企业、设备、商户等实体;边表示实体之间的关系,如转账、持股、交易、登录、担保。边可以带有方向(有向图)和权重(加权图),也可以带有类型(异构图)。
邻接矩阵是图的一种代数表示。对于一个包含 N 个节点的图,邻接矩阵 A 是一个 N×N 的矩阵,A[i][j] 表示节点 i 到节点 j 是否存在边或边的权重。无向图的邻接矩阵是对称的,有向图则不一定对称。在 PyG 中,图通常以边列表(edge_index)和节点特征矩阵(x)的形式存储,而不是直接使用稠密邻接矩阵,因为金融图往往非常稀疏。
# 一个简单的金融转账图示例(边列表)
# 节点:0=账户A, 1=账户B, 2=账户C, 3=账户D
# 边:A->B, B->C, C->A, A->D
edge_index = [
[0, 1, 2, 0], # 源节点
[1, 2, 0, 3] # 目标节点
]
# 对应的邻接矩阵(4x4)
# A B C D
# A [ 0, 1, 0, 1 ]
# B [ 0, 0, 1, 0 ]
# C [ 1, 0, 0, 0 ]
# D [ 0, 0, 0, 0 ]
从上面的例子可以看到,邻接矩阵直观地表达了“谁连谁”,而边列表更适合稀疏存储和批量计算。PyG 的 Data 对象正是围绕 edge_index、x、edge_attr 等字段组织的。
三、同构图与异构图:金融场景的选择
根据节点和边的类型是否单一,图可以分为同构图(Homogeneous Graph)和异构图(Heterogeneous Graph)。同构图中所有节点属于同一类型,所有边也属于同一类型,例如“账户-转账-账户”网络。异构图中节点或边存在多种类型,例如“用户-购买-商品”“用户-登录-设备”“企业-持股-企业”同时存在。
| 对比维度 | 同构图 | 异构图 |
|---|---|---|
| 节点类型 | 单一类型 | 多种类型 |
| 边类型 | 单一类型 | 多种类型 |
| 典型金融场景 | 账户转账网络、股票相关性网络 | 用户-商户-设备网络、企业股权网络 |
| PyG 表示 | Data |
HeteroData |
| 建模复杂度 | 较低 | 较高,需按类型分别处理 |
选择同构图还是异构图,取决于业务问题是否需要区分实体和关系的语义。如果只关心“账户之间是否有关联”,同构图足够;如果需要区分“转账”“登录”“担保”等不同关系对风险的不同影响,异构图更合适。PyG 提供了 HeteroData 来管理多种节点和边类型,并支持按类型进行消息传递。
注意:不要为了追求“复杂”而盲目使用异构图。异构图虽然表达能力强,但参数量、调参难度和计算开销都会上升。实际项目中,建议先用同构图建立基线,再根据效果决定是否升级为异构图。
四、案例与复盘:转账网络中的图结构
假设我们要构建一个反欺诈转账网络。节点是账户,边是转账记录,边权重是转账金额,边方向是资金流向。此时可以构建一个有向加权同构图。若进一步引入“账户所属用户”“登录设备”“交易商户”等实体,则升级为异构图。构建流程通常包括:数据清洗、实体抽取、关系抽取、节点特征构造、边特征构造、图存储与校验。
- 数据清洗:去除重复、异常和缺失关键字段的记录。
- 实体抽取:确定节点类型,如账户、用户、设备、商户。
- 关系抽取:确定边类型,如转账、登录、消费。
- 特征构造:为节点和边生成数值特征,如账户年龄、转账金额、登录频次。
- 图存储:使用 PyG 的
Data或HeteroData组织数据。 - 图校验:检查孤立节点、自环、重复边和标签泄漏。
常见误区包括:把时间顺序完全忽略,导致未来信息泄漏;把不同语义的关系混为一种边,损失信息;以及直接使用稠密邻接矩阵处理百万级节点,造成内存爆炸。复盘时应重点关注图的稀疏性、方向性、时间性和类型语义。
理解金融数据与图结构基础,是后续使用 PyG 构建模型的前提。只有把业务关系正确地抽象为节点、边和类型,才能让图神经网络真正学到有价值的金融关联信息。