3. 反欺诈图谱数据准备:用户设备、IP、手机号、交易等实体关系抽取与特征工程
反欺诈图谱的构建质量直接决定 GraphSAGE 模型的上限。本节聚焦从原始日志到图结构的全流程:实体识别、关系抽取、属性特征工程与图拓扑特征构造。数据源涵盖用户设备指纹、IP 地址、手机号、交易流水等核心反欺诈字段。
3.1 实体定义与抽取
在反欺诈场景中,实体(Node)是图谱的基本单元。每个实体需具备唯一标识(ID)和类型标签。以下为常见实体类型及其抽取逻辑:
| 实体类型 | 实体标识(ID) | 抽取来源 | 示例 |
|---|---|---|---|
| 用户(User) | user_id | 注册/登录日志 | U100234 |
| 设备(Device) | device_fingerprint | SDK 采集、UA 解析 | DF_ABC123XYZ |
| IP 地址(IP) | ip_address | 请求头、网络日志 | 203.0.113.45 |
| 手机号(Phone) | phone_number | 注册/绑卡信息 | 138****5678 |
| 交易(Transaction) | transaction_id | 交易流水表 | TXN_987654 |
| 银行卡(Card) | card_hash | 绑卡/支付信息 | HASH_4A3B2C |
实操要点:设备指纹需做归一化处理(如去除空格、统一大小写);IP 地址建议同时保留 IPv4 和 IPv6 格式;手机号应脱敏后存储,仅保留前三位和后四位用于关联。
3.2 关系抽取与边构建
关系(Edge)定义了实体之间的交互行为。在反欺诈图谱中,关系通常带有时间戳、频次、金额等属性。以下为关键关系类型及其抽取规则:
- 用户 → 设备:登录/操作日志中 user_id 与 device_fingerprint 的绑定关系。边属性:首次绑定时间、最近绑定时间、绑定次数。
- 用户 → IP:每次请求的源 IP。边属性:IP 归属地(国家/城市)、ISP、使用时段分布。
- 用户 → 手机号:注册或修改手机号记录。边属性:绑定时间、是否主手机号。
- 用户 → 交易:用户发起的每笔交易。边属性:交易金额、交易类型(转账/消费/提现)、交易时间、交易状态。
- 设备 → IP:设备通过某个 IP 发起请求。边属性:首次出现时间、累计请求次数。
- 手机号 → 交易:手机号作为交易验证或通知渠道。边属性:验证成功/失败次数。
关系抽取核心原则:每条边必须包含时间维度(timestamp),以便后续进行时序图分析和快照采样。缺失时间戳的关系应标记为“未知”,并降低其在模型训练中的权重。
3.3 实体属性特征工程
实体特征分为静态属性(如注册时间)和动态统计属性(如过去 24 小时登录次数)。以下为各实体的典型特征工程清单:
| 实体 | 特征类别 | 特征示例 | 计算方式 |
|---|---|---|---|
| 用户 | 基础属性 | 注册时长(天)、账户等级、是否实名 | 直接映射 |
| 行为统计 | 近 7 天登录次数、平均交易金额、设备更换频率 | 滑动窗口聚合 | |
| 设备 | 硬件属性 | 操作系统版本、屏幕分辨率、是否模拟器 | SDK 上报解析 |
| 风险画像 | 关联用户数、关联 IP 数、黑名单命中次数 | 图遍历计数 | |
| IP | 地理属性 | 国家、城市、经纬度、ASN 编号 | IP 库查询 |
| 行为属性 | 过去 1 小时请求量、代理/VPN 标记、数据中心标记 | 流式统计 + 第三方情报 | |
| 交易 | 金额属性 | 交易金额、金额与历史均值偏差 | Z-score 计算 |
| 时序属性 | 交易时间(小时/星期)、距上一笔交易间隔 | 时间差计算 |
3.4 图拓扑特征构造
GraphSAGE 模型不仅依赖节点自身属性,更依赖邻居结构信息。以下为在特征工程阶段可预先计算的拓扑特征:
- 节点度(Degree):每个实体的直接邻居数量。例如,一个设备关联了 50 个用户,则其度数为 50。高度数设备可能是共享设备或代理节点。
- 局部聚类系数(Local Clustering Coefficient):衡量节点邻居之间的连接紧密程度。欺诈团伙中节点往往形成高密度子图。
- PageRank 值:通过迭代计算节点在图中的重要性。高风险节点通常具有异常的 PageRank 分布。
- K-core 值:节点所属的最大 k-core 层级。欺诈团伙核心成员通常位于高 k-core 区域。
- 邻居异质性(Neighbor Heterogeneity):节点邻居的类型分布熵。例如,一个用户同时关联多个设备、多个 IP 和多个手机号,异质性高,可能为异常。
注意:拓扑特征计算需在每次图更新后重新执行。对于大规模图(节点数 > 1 亿),建议使用分布式图计算框架(如 Spark GraphX、TigerGraph)进行离线批处理,避免单机 OOM。
3.5 数据准备流程总览
以下 SVG 图展示了从原始日志到 GraphSAGE 输入特征的完整数据准备流水线:
3.6 特征存储与版本管理
完成特征工程后,需将特征数据组织为 GraphSAGE 可消费的格式。推荐使用以下存储方案:
| 数据组件 | 存储格式 | 说明 |
|---|---|---|
| 节点特征表 | Parquet / ORC | 每行一个节点,列包含 node_id、node_type、所有特征字段 |
| 边表 | Parquet / CSV | 每行一条边,列包含 src_id、dst_id、edge_type、timestamp、边属性 |
| 特征元数据 | JSON / YAML | 记录特征名称、类型、缺失值处理策略、归一化参数 |
| 版本快照 | 时间戳目录 | 每日/每小时生成一份快照,支持模型回滚和对比实验 |
工程建议:使用特征存储平台(如 Feast、Tecton)管理在线/离线特征一致性。GraphSAGE 训练时使用离线特征,推理时通过特征服务平台提供实时特征,避免训练/推理特征不一致导致的模型效果衰减。
3.7 数据质量校验
在数据进入模型之前,必须通过以下质量检查:
- 完整性检查:节点 ID 无空值,边表无悬挂边(即边引用的节点 ID 在节点表中存在)。
- 唯一性检查:同一实体类型下无重复 ID。
- 时效性检查:边的时间戳在合理时间范围内(如不早于 1970 年,不晚于当前时间 + 1 小时)。
- 分布检查:数值型特征无异常离群值(如交易金额为负数),类别型特征无未注册类别。
- 图连通性检查:孤立节点(无边连接)占比不应超过 5%,否则需排查数据源是否遗漏关系。
常见踩坑:设备指纹因采集 SDK 版本不同导致同一设备生成多个指纹,需做指纹合并(Merge)逻辑。建议在实体抽取阶段维护一个“设备指纹映射表”,记录指纹之间的等价关系。