3. 图神经网络入门
在金融关系演化任务中,数据天然不是欧几里得空间中的规则网格,而是由账户、企业、担保、交易、股权等实体与关系构成的图。要把这类数据送进神经网络,第一步是建立统一的图表示语言:谁参与、如何连接、连接强度如何、节点和边携带哪些特征。本节围绕图的基本表示、邻接矩阵、节点嵌入、消息传递机制与经典GNN模型展开,为后续时序图神经网络打下基础。
一、图的基本表示:从金融实体到数学对象
一个图通常记为 G = (V, E),其中 V 是节点集合,E 是边集合。在金融场景中,节点可以表示银行账户、上市公司、自然人、基金或行业板块;边可以表示转账、担保、持股、供应链或舆情共现。若边有方向,如资金从A流向B,则称为有向图;若边带权重,如转账金额或持股比例,则称为加权图。节点和边都可以附带特征向量,例如账户的日均余额、企业的财务指标、边的交易频次与金额。
图表示的关键在于把业务语义映射为结构语义。例如,在反欺诈场景中,一个账户节点可能连接多个设备节点和交易对手节点,形成“账户—设备—IP—交易”的异构图。此时需要区分节点类型和边类型,否则模型会把不同语义的关系混为一谈。实际建模时,常先定义模式(schema),再构建图数据对象。
二、邻接矩阵:图结构的代数表达
邻接矩阵是图最基础的代数表示。对于含 n 个节点的图,邻接矩阵 A 是 n×n 矩阵,A[i][j] 表示节点 i 到节点 j 是否存在边或边的权重。无向图的邻接矩阵对称,有向图则不一定对称。若节点还带特征矩阵 X(形状为 n×d),则图数据可表示为 (A, X)。
邻接矩阵的优点是便于矩阵运算和批量处理,缺点是稀疏性高。金融图往往有百万级节点,但每个节点的邻居数有限,若用稠密矩阵存储会浪费大量内存。因此工程中常用稀疏格式,如 COO、CSR 或边列表。下面是一个简单的边列表与邻接矩阵构造示例:
import numpy as np
import scipy.sparse as sp
# 边列表:源节点、目标节点、权重
edges = [(0, 1, 1.0), (1, 2, 0.8), (2, 0, 0.5), (2, 3, 1.2)]
n = 4
rows = [e[0] for e in edges]
cols = [e[1] for e in edges]
vals = [e[2] for e in edges]
A = sp.coo_matrix((vals, (rows, cols)), shape=(n, n)).tocsr()
print(A.toarray())
# [[0. 1. 0. 0. ]
# [0. 0. 0.8 0. ]
# [0.5 0. 0. 1.2]
# [0. 0. 0. 0. ]]
在GNN中,邻接矩阵通常还会经过归一化处理,例如对称归一化 D^{-1/2} A D^{-1/2},以缓解高度数节点在聚合时主导信息的问题。对于带自环的图,还会加上单位矩阵 I,使节点在聚合时保留自身信息。
三、节点嵌入与消息传递机制
节点嵌入的目标是把每个节点映射为低维稠密向量,使结构相近或角色相似的节点在向量空间中接近。早期方法如 DeepWalk、Node2Vec 通过随机游走生成序列,再用 Word2Vec 学习嵌入;这类方法依赖游走策略,难以直接利用节点特征。GNN 则通过消息传递机制,在聚合邻居信息的同时融合节点自身特征,实现端到端学习。
消息传递可概括为三个步骤:消息生成、消息聚合、节点更新。以第 k 层为例,节点 v 先从邻居 u 接收消息 m_{u→v}^{(k)},再聚合为 a_v^{(k)},最后与自身表示 h_v^{(k-1)} 一起更新为 h_v^{(k)}。公式化表示为:
m_{u→v}^{(k)} = M^{(k)}(h_u^{(k-1)}, h_v^{(k-1)}, e_{uv})
a_v^{(k)} = AGG({m_{u→v}^{(k)} | u ∈ N(v)})
h_v^{(k)} = U^{(k)}(h_v^{(k-1)}, a_v^{(k)})
其中 M、AGG、U 分别表示消息函数、聚合函数和更新函数。不同GNN模型的差异,主要就体现在这三个函数的设计上。金融场景中,聚合函数常采用求和、均值或注意力加权,以体现不同交易对手的重要性差异。
四、经典GNN模型概览与金融场景对照
不同GNN模型在消息传递的细节上各有侧重。下表对几种经典模型进行对照,并给出金融关系演化中的典型用途:
| 模型 | 核心机制 | 优点 | 金融场景示例 |
|---|---|---|---|
| GCN | 对称归一化邻接矩阵 + 均值聚合 | 结构简单、训练稳定 | 股权网络中的企业风险传播 |
| GraphSAGE | 邻居采样 + 多种聚合函数 | 支持归纳学习、适合大图 | 新开户账户的欺诈识别 |
| GAT | 注意力加权聚合邻居 | 可区分邻居重要性 | 交易对手重要性差异建模 |
| GIN | 求和聚合 + MLP 更新 | 表达能力强、理论完备 | 图级别金融风险分类 |
| RGCN | 按关系类型分别聚合 | 支持异构图与多关系 | 担保、持股、交易多关系融合 |
在金融关系演化任务中,RGCN 和 GAT 往往更贴近业务需求,因为金融图天然是多关系、异质且带权重的。若再引入时间维度,就需要把静态GNN扩展为时序图神经网络,例如在每一时间片上运行GNN,再用RNN或Transformer融合时序表示。
五、常见误区与复盘建议
- 误区一:把邻接矩阵当作普通特征矩阵。邻接矩阵描述的是连接关系,不是节点属性;节点特征应单独用
X表示,二者在模型中承担不同角色。 - 误区二:忽略边方向与时间戳。资金流向、担保方向具有明确因果含义,若统一按无向图处理,会丢失关键风险传播方向。
- 误区三:过度堆叠GNN层数。层数过多会导致过平滑,所有节点嵌入趋于一致。金融图中通常2到3层即可覆盖多数邻居路径。
- 误区四:不做归一化。高度数节点会在聚合中占据主导,导致模型偏向中心节点,需使用对称归一化或注意力机制缓解。
掌握图的基本表示、邻接矩阵、节点嵌入与消息传递机制后,就已经具备把金融关系数据转化为GNN可训练对象的能力。下一步的关键,是在此基础上引入时间维度,让图结构随交易、担保和股权关系动态演化,从而支撑更贴近真实金融风控与投研场景的时序图神经网络建模。