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):交易使用设备,边特征为设备指纹匹配度、网络类型。
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流程
将业务数据库中的关系型数据转换为图数据,需要经过以下标准步骤:
- 实体抽取:从用户表、交易表、设备表中提取唯一实体ID,生成节点列表。
- 关系映射:根据外键关联(如交易表中的user_id和device_id)生成边列表。
- 特征工程:为每个节点和边计算统计特征(如用户历史交易金额均值、设备关联用户数)。
- 图构建:使用DGL或PyG库将节点和边组装为异构图对象。
- 子图采样:对于大规模图,使用邻居采样策略生成小批量训练数据。
3.6 本章小结
本章建立了图数据的基础知识体系,并完成了欺诈检测异构图的构建。核心要点包括:
- 节点与边是图的基本单元,在欺诈场景中边关系比节点属性更具判别力。
- 异构图比同构图更适合欺诈检测,因为欺诈模式往往涉及多种实体类型的交叉关联。
- 用户-交易-设备三元组是工业界最成熟的欺诈图结构,能够有效识别设备聚集和团伙欺诈。
- DGL格式用于模型训练和推理,CSV边列表用于数据管道和存储,两者互补。