3. 图数据基础与欺诈图构建:节点与边的定义、异构图与同构图、用户-交易-设备三元组图构建、图数据存储格式

在构建实时欺诈评分系统之前,必须理解图数据的核心概念。传统机器学习模型将样本视为独立同分布,而图神经网络则利用实体之间的关联关系进行推理。本章将系统讲解图数据的基础知识,并手把手构建用于欺诈检测的异构图。

3.1 图数据基础:节点与边的定义

图由两个基本元素组成:节点(Node)和边(Edge)。在欺诈场景中,节点代表业务实体,边代表实体之间的交互关系。

元素 定义 欺诈场景示例
节点 图中的独立实体,包含特征属性 用户ID、交易ID、设备ID、IP地址、手机号
边 节点之间的连接关系,可带有权重或类型 用户→交易(发起)、交易→设备(使用)、用户→手机号(绑定)
节点特征 描述节点属性的向量 用户注册天数、交易金额、设备首次出现时间
边特征 描述交互属性的向量 交易时间戳、IP地理位置距离、设备指纹匹配度
关键理解:在欺诈检测中,边往往比节点更重要。欺诈团伙通常会通过共享设备、IP或手机号形成密集的子图结构,这些连接模式是传统特征工程难以捕捉的。

3.2 同构图与异构图

根据节点和边的类型数量,图数据分为同构图和异构图。理解两者的区别是选择图神经网络模型的前提。

对比维度 同构图 异构图
节点类型 单一类型(如只有用户) 多种类型(用户、交易、设备)
边类型 单一关系(如用户-用户好友) 多种关系(用户-交易、交易-设备)
适用场景 社交网络、引文网络 电商风控、金融交易、推荐系统
模型复杂度 较低,GCN/GAT可直接使用 较高,需使用RGCN/HAN等异构模型
欺诈检测优势 发现团伙聚集 发现跨实体关联的隐蔽欺诈模式
常见误区:不要将所有实体强行建模为同构图。例如将用户和交易视为同一类型节点会丢失语义信息,导致模型无法区分“用户发起交易”和“交易关联设备”这两种完全不同的关系。

3.3 用户-交易-设备三元组图构建

在实时欺诈评分中,最经典的异构图为用户-交易-设备三元组图。该图包含三种节点类型和两种边类型,能够有效捕捉欺诈团伙的设备聚集和交易异常模式。

三元组图结构:
  • 用户节点(U):每个注册用户为一个节点,特征包括注册时长、历史交易次数、实名认证等级等。
  • 交易节点(T):每笔交易为一个节点,特征包括交易金额、时间戳、商户类别、支付方式等。
  • 设备节点(D):每个设备指纹为一个节点,特征包括设备型号、操作系统版本、是否模拟器、GPS可信度等。
  • 边类型1(U→T):用户发起交易,边特征为交易时间、IP地址。
  • 边类型2(T→D):交易使用设备,边特征为设备指纹匹配度、网络类型。
用户-交易-设备三元组异构图结构 用户-交易-设备三元组异构图 用户节点 (U) 注册时长、交易次数 交易节点 (T) 金额、时间、商户 设备节点 (D) 型号、OS、模拟器 发起交易 边特征: IP、时间 使用设备 边特征: 指纹匹配度 用户A (欺诈) 用户B (欺诈) 共享设备D 欺诈团伙模式 多个欺诈用户共享同一设备 形成星型结构,密度远高于正常用户

3.4 图数据存储格式

图数据在存储和传输时需要标准化的格式。在工业级欺诈评分系统中,最常用的格式为DGL图格式和CSV边列表格式。下面分别介绍这两种格式及其适用场景。

3.4.1 DGL图格式(推荐用于模型训练)

DGL(Deep Graph Library)提供了高效的异构图数据结构。以下代码展示了如何构建用户-交易-设备三元组图:

import dgl
import torch

# 定义异构图
graph_data = {
    ('user', 'initiate', 'transaction'): (
        torch.tensor([0, 1, 2, 3]),  # 源节点:用户ID
        torch.tensor([0, 1, 2, 3])   # 目标节点:交易ID
    ),
    ('transaction', 'use', 'device'): (
        torch.tensor([0, 1, 2, 3]),  # 源节点:交易ID
        torch.tensor([0, 0, 1, 2])   # 目标节点:设备ID
    )
}

# 创建异构图
g = dgl.heterograph(graph_data)

# 添加节点特征
g.nodes['user'].data['feat'] = torch.randn(4, 16)      # 4个用户,16维特征
g.nodes['transaction'].data['feat'] = torch.randn(4, 8) # 4笔交易,8维特征
g.nodes['device'].data['feat'] = torch.randn(3, 10)     # 3个设备,10维特征

# 添加边特征
g.edges['initiate'].data['time'] = torch.tensor([100, 200, 150, 300])
g.edges['use'].data['match_score'] = torch.tensor([0.95, 0.88, 0.76, 0.99])

print(g)
# 输出: Graph(num_nodes={'user': 4, 'transaction': 4, 'device': 3},
#             num_edges={('user','initiate','transaction'): 4,
#                        ('transaction','use','device'): 4},
#             metagraph=[('user','transaction','initiate'),
#                        ('transaction','device','use')])

3.4.2 CSV边列表格式(推荐用于数据管道)

在实时数据管道中,CSV格式更易于与消息队列和数据库集成。通常需要两个文件:节点文件(描述实体属性)和边文件(描述关系)。

文件类型 字段 示例
nodes_user.csv user_id, reg_days, auth_level, is_blacklist U1001, 365, 2, 0
nodes_transaction.csv txn_id, amount, timestamp, merchant_id T5001, 8999.00, 1700000000, M332
nodes_device.csv device_id, os_version, is_emulator, gps_trust D201, 14.0, 0, 0.92
edges_initiate.csv user_id, txn_id, ip_address, time_diff U1001, T5001, 192.168.1.1, 0.5
edges_use.csv txn_id, device_id, fingerprint_score, network_type T5001, D201, 0.99, wifi
生产建议:在实时场景中,建议使用DGL格式进行模型推理(内存高效),使用CSV格式进行数据存储和回溯分析。两者之间可以通过简单的ETL脚本互相转换。

3.5 从原始数据到图数据的ETL流程

将业务数据库中的关系型数据转换为图数据,需要经过以下标准步骤:

  1. 实体抽取:从用户表、交易表、设备表中提取唯一实体ID,生成节点列表。
  2. 关系映射:根据外键关联(如交易表中的user_id和device_id)生成边列表。
  3. 特征工程:为每个节点和边计算统计特征(如用户历史交易金额均值、设备关联用户数)。
  4. 图构建:使用DGL或PyG库将节点和边组装为异构图对象。
  5. 子图采样:对于大规模图,使用邻居采样策略生成小批量训练数据。
从原始数据到图数据的ETL流程 从原始数据到图数据的ETL流程 原始数据 用户表/交易表/设备表 实体抽取 去重、生成唯一ID 关系映射 外键关联生成边 特征工程 统计特征/聚合特征 图构建 DGL异构图对象 关键输出 节点特征矩阵 + 边索引列表 + 边类型映射表

3.6 本章小结

本章建立了图数据的基础知识体系,并完成了欺诈检测异构图的构建。核心要点包括:

  • 节点与边是图的基本单元,在欺诈场景中边关系比节点属性更具判别力。
  • 异构图比同构图更适合欺诈检测,因为欺诈模式往往涉及多种实体类型的交叉关联。
  • 用户-交易-设备三元组是工业界最成熟的欺诈图结构,能够有效识别设备聚集和团伙欺诈。
  • DGL格式用于模型训练和推理,CSV边列表用于数据管道和存储,两者互补。