2. 反欺诈图谱基础:图数据结构与典型构建
在反欺诈场景中,图结构是描述复杂关联关系的核心工具。本章将系统讲解图数据的基本构成单元、同构与异构图的区别,以及如何在反欺诈业务中构建有效的图谱。理解这些基础是后续使用 GraphSAGE 进行回放验证的前提。
2.1 图数据结构三要素:节点、边、属性
图由三个基本元素构成,它们共同定义了反欺诈图谱的语义和计算边界:
| 元素 | 反欺诈中的典型含义 | 示例 |
|---|---|---|
| 节点 (Node/Vertex) | 业务实体,如用户、设备、手机号、银行卡、IP 地址 | 用户 A、设备 IMEI_123、银行卡 6222**** |
| 边 (Edge) | 实体之间的交互或归属关系 | 登录、转账、绑定、同设备使用 |
| 属性 (Feature) | 节点或边的特征向量,用于描述其状态 | 用户注册时间、交易金额、设备型号 |
关键认知:反欺诈图谱的威力在于“边”。单看一个用户可能无异常,但通过边连接到的多个高风险设备或黑名单手机号,就能发现团伙欺诈模式。
下图展示了一个包含 3 个节点、2 条边和若干属性的简单反欺诈图谱片段:
2.2 同构图与异构图
根据节点和边的类型数量,图结构分为同构图和异构图。反欺诈场景中,异构图是主流,因为它能更真实地反映多类型实体间的复杂交互。
| 类型 | 节点类型数 | 边类型数 | 反欺诈适用性 | 典型例子 |
|---|---|---|---|---|
| 同构图 | 1 种 | 1 种 | 低(过于简化) | 用户-用户转账网络 |
| 异构图 | ≥ 2 种 | ≥ 2 种 | 高(贴近真实业务) | 用户-设备-手机号-银行卡 |
实战建议:在构建反欺诈图谱时,优先采用异构图。即使初期数据有限,也应预留多种节点类型(如用户、设备、IP)的扩展空间,以便后续接入更多数据源时无需重构图谱。
下图对比了同构图与异构图的视觉差异:
2.3 反欺诈场景下的典型图谱构建
在反欺诈业务中,图谱构建通常遵循“实体识别 → 关系抽取 → 属性填充 → 图存储”的流程。以下是一个针对信贷申请反欺诈的典型图谱构建案例:
2.3.1 实体与关系定义
| 实体类型 | 节点标识 | 关键属性 |
|---|---|---|
| 申请人 | user_id | 年龄、收入、学历、历史逾期次数 |
| 设备 | device_fp | 设备指纹、操作系统、是否模拟器 |
| 手机号 | phone | 运营商、入网时长、是否虚拟号段 |
| 银行卡 | card_hash | 发卡行、卡类型、绑定时间 |
| IP 地址 | ip_addr | 地理位置、ASN、代理检测标签 |
| 关系类型 | 起点 → 终点 | 边属性示例 |
|---|---|---|
| 登录 | 申请人 → 设备 | 登录时间、登录结果(成功/失败) |
| 绑定 | 申请人 → 手机号 | 绑定时间、是否主卡 |
| 转账 | 申请人 → 银行卡 | 交易金额、交易时间、交易对手 |
| 同设备 | 设备 → 设备 | 共享时间窗口、共享 IP |
2.3.2 图谱构建流程
- 数据接入:从业务数据库、埋点日志、第三方风控数据源抽取原始数据。
- 实体对齐:通过设备指纹、手机号、身份证号等唯一标识进行实体去重与合并。
- 关系建边:根据时间窗口内的交互行为(如 24 小时内同一设备登录多个用户)建立边。
- 属性编码:将离散属性(如运营商)转为 one-hot 或 embedding,连续属性(如交易金额)进行归一化。
- 图存储:将构建好的图数据写入图数据库(如 Neo4j)或分布式图存储系统。
常见陷阱:不要将所有历史数据一次性建边。反欺诈图谱应设置合理的时间衰减窗口(如 90 天),避免过时关系引入噪声。同时,边属性(如时间戳)必须保留,以便后续进行时序回放验证。
2.3.3 图谱构建示例(伪代码)
# 伪代码:反欺诈图谱构建核心逻辑
def build_fraud_graph(transactions, devices, phones):
graph = HeteroGraph()
# 1. 添加节点
for user in transactions['user_id'].unique():
graph.add_node(node_id=user, node_type='user',
features={'age': user_age, 'income': user_income})
for device in devices['device_fp'].unique():
graph.add_node(node_id=device, node_type='device',
features={'os': device_os, 'is_emulator': is_emu})
# 2. 添加边(基于时间窗口)
for _, row in transactions.iterrows():
if within_time_window(row['timestamp'], window_days=90):
graph.add_edge(src=row['user_id'], dst=row['device_fp'],
edge_type='login',
features={'timestamp': row['timestamp'],
'ip': row['ip_addr']})
return graph
2.4 本章小结
- 图数据结构由节点、边、属性三要素构成,反欺诈场景中边的关系语义至关重要。
- 异构图比同构图更适合反欺诈,因为它能建模多类型实体间的复杂交互。
- 典型反欺诈图谱构建包括实体定义、关系抽取、属性编码、图存储四个步骤,需注意时间窗口和边属性的保留。