3. 图神经网络入门

图神经网络入门 学习卡片

在欺诈团伙识别任务中,账户、设备、IP、银行卡、手机号等实体天然构成一张关系网络。传统机器学习把每个样本当作独立个体,忽略了“谁和谁有关联”这一关键信号;而图神经网络(GNN)的核心价值,正是让节点在表示学习过程中不断吸收邻居信息,从而把团伙结构、共享资源、异常聚集模式编码进向量表示。本节围绕三种最常用的 GNN 架构——GCN、GAT、GraphSAGE,讲清它们的原理差异、消息传递机制,以及在欺诈检测中的适用边界。

一、核心原理:消息传递是统一的底层范式

无论是 GCN、GAT 还是 GraphSAGE,都可以归纳为同一套“消息传递”框架。对图中每个节点,每一层更新大致分为三步:

  1. 消息生成:邻居节点将自己的特征经过线性变换或非线性映射,生成待传递的消息。
  2. 消息聚合:中心节点按某种权重收集邻居消息,常用求和、均值、最大值或注意力加权。
  3. 节点更新:将聚合结果与中心节点自身表示结合,经过激活函数得到新一层表示。

用公式概括,第 l 层节点 v 的表示为:

h_v^(l) = σ( W · AGG({ h_u^(l-1) : u ∈ N(v) ∪ {v} }) )

三者的区别集中在“AGG 如何设计”以及“邻居权重是否可学习”。GCN 使用归一化邻接矩阵,相当于对邻居做固定权重的加权平均;GAT 引入注意力系数,让不同邻居拥有不同重要性;GraphSAGE 则把聚合函数与自身表示拼接,并支持对邻居采样,适合大规模动态图。

关键理解:GNN 的层数决定感受野。1 层只能看到直接邻居,2 层能看到邻居的邻居。欺诈团伙往往通过多层中介隐藏关系,因此 2~3 层通常是欺诈检测的常用范围,层数过深会带来过平滑问题。

二、方法流程:从建图到节点分类

在欺诈检测中,GNN 的落地流程通常包括以下步骤:

  • 建图:确定节点类型(账户、设备、商户)与边类型(转账、登录、共享设备),并构造节点特征。
  • 划分数据集:按时间或按连通分量划分训练、验证、测试集,避免标签泄漏。
  • 模型选择:根据图规模、邻居重要性差异、是否支持归纳学习选择 GCN、GAT 或 GraphSAGE。
  • 训练与评估:以节点分类为目标,使用交叉熵损失,关注 AUC、召回率与团伙级指标。
  • 解释与复盘:结合 GNNExplainer 等方法定位关键子图与关键邻居,支撑风控策略。

下面给出一个基于 PyTorch Geometric 的 GCN 节点分类最小示例,便于建立代码直觉:

import torch
import torch.nn.functional as F
from torch_geometric.nn import GCNConv

class GCN(torch.nn.Module):
    def __init__(self, in_dim, hidden_dim, out_dim):
        super().__init__()
        self.conv1 = GCNConv(in_dim, hidden_dim)
        self.conv2 = GCNConv(hidden_dim, out_dim)

    def forward(self, x, edge_index):
        x = self.conv1(x, edge_index)
        x = F.relu(x)
        x = F.dropout(x, p=0.5, training=self.training)
        x = self.conv2(x, edge_index)
        return F.log_softmax(x, dim=1)

model = GCN(in_dim=32, hidden_dim=64, out_dim=2)
optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)

for epoch in range(200):
    model.train()
    optimizer.zero_grad()
    out = model(data.x, data.edge_index)
    loss = F.nll_loss(out[data.train_mask], data.y[data.train_mask])
    loss.backward()
    optimizer.step()

若把 GCNConv 替换为 GATConv,模型会自动学习邻居注意力权重;替换为 SAGEConv,则支持对邻居采样并拼接自身表示。三者接口相似,但行为差异明显。

三、案例与场景:三种架构在欺诈检测中的适用性

假设我们面对一个典型的电商刷单团伙识别场景:节点是买家账户,边是“同一设备登录”或“同一收货地址”。团伙账户之间连接密集,但与正常账户连接稀疏。此时:

  • GCN:适合关系相对均匀、邻居重要性差异不大的图。计算简单、训练稳定,常作为基线模型。但在欺诈图中,正常账户可能连接大量邻居,GCN 的固定归一化会稀释异常信号。
  • GAT:适合邻居重要性差异明显的场景。注意力机制能自动降低噪声邻居权重,突出与欺诈高度相关的邻居。缺点是注意力计算增加开销,且在小图上容易过拟合。
  • GraphSAGE:适合大规模、动态增长的图。通过采样固定数量邻居,能控制计算量,并支持新节点归纳学习。对于每天新增大量账户的风控系统,GraphSAGE 的工程友好性更突出。
维度 GCN GAT GraphSAGE
邻居权重 固定归一化 可学习注意力 可学习聚合
归纳能力 较弱 中等 强
计算开销 低 较高 中等
大规模图 一般 一般 优
欺诈检测适用性 基线、关系均匀 邻居重要性差异大 动态增长、大图

实践建议:在欺诈检测项目中,可先用 GCN 建立基线,再用 GAT 验证注意力是否带来提升,最后用 GraphSAGE 解决线上大规模与新增节点问题。三者并非互斥,也可以在不同子图上组合使用。

四、误区与复盘:避免“为图而图”

初学者在欺诈检测中应用 GNN 时,常见误区包括:

  • 忽视边的时间属性:欺诈关系具有时序性,若把未来边引入训练,会造成标签泄漏。应按时间切分并构造动态图。
  • 盲目加深网络:层数过多会导致过平滑,所有节点表示趋同,反而降低区分度。2~3 层通常足够。
  • 把 GNN 当作万能模型:若图中关系稀疏或噪声极大,GNN 可能不如传统特征工程。应先验证图结构是否携带有效信号。
  • 只看节点级指标:欺诈检测更关注团伙级召回。应补充连通分量、团伙覆盖率等评估指标。
  • 忽略解释性:风控场景需要可解释结论。GNNExplainer 能输出关键子图与关键边,帮助分析师理解模型判断依据。

复盘要点:GNN 的收益来自“关系信号”而非模型复杂度。建图质量、边定义、时间切分和评估指标,往往比选择 GCN 还是 GAT 更决定最终效果。先确保图有意义,再谈架构选型。

理解 GCN、GAT、GraphSAGE 的统一消息传递范式与差异,是后续使用 GNNExplainer 进行欺诈团伙模型解释的基础。只有清楚模型如何聚合邻居信息,才能准确解释“为什么这个账户被判定为团伙成员”,并据此形成可落地的风控策略。