3. 欺诈图谱建模:常见欺诈模式与图谱建模方法论

欺诈图谱建模的核心是将业务欺诈模式转化为图结构中的子图模式(Subgraph Pattern),从而利用图计算引擎(如 Spark GraphX / GraphFrames)进行高效检测。本节首先梳理三类最常见的欺诈模式,然后给出从业务规则到图谱模型的标准化建模方法论。

3.1 常见欺诈模式

根据黑产攻击手法的图结构特征,可将欺诈模式归纳为以下三类:

欺诈模式 图结构特征 典型场景 检测难度
团伙欺诈 密集子图、星型结构、共享属性(设备/IP/手机号) 信贷骗贷、虚假注册、恶意刷单 中
环状交易 有向环、资金闭环、多跳循环 洗钱、信用卡套现、虚假交易 高
薅羊毛 二部图密集连接、设备/IP 聚集、时间窗口爆发 新客优惠套利、秒杀抢券、积分盗刷 低-中

3.1.1 团伙欺诈

团伙欺诈通常表现为多个账户共享相同的设备指纹、IP 地址、手机号或身份证号。在图谱中,这些共享属性节点会连接大量账户节点,形成星型结构或密集子图。黑产团伙通过批量注册或控制大量账户实施骗贷、刷单等行为。

关键指标: 节点度数(Degree)、连通分量大小(Connected Component Size)、共享属性比例(Shared Attribute Ratio)。

3.1.2 环状交易

环状交易是洗钱和套现的典型模式。资金在多个账户之间形成闭合回路,目的是掩盖资金来源或制造虚假交易流水。在图论中,环状交易对应有向环(Directed Cycle)或多跳循环路径。检测环状交易需要支持大图上的环检测算法,如深度优先搜索(DFS)或基于矩阵乘法的环枚举。

注意: 在 Spark 上直接做全图环检测代价极高,通常采用限制路径长度(如 3~6 跳)的局部环检测策略,或使用 GraphFrames 的 motif finding 接口。

3.1.3 薅羊毛

薅羊毛模式的核心特征是资源聚集:大量用户账户通过少量设备或 IP 发起高频交易。在图谱中,这表现为二部图(Bipartite Graph)中一侧节点(设备/IP)的度数极高,且交易时间高度集中。薅羊毛检测通常需要结合时间窗口和频次统计。

实践建议: 薅羊毛检测可先通过度数过滤(Degree Filter)快速缩小候选集,再使用滑动时间窗口内的边计数进行精确判定。

3.2 图谱建模方法论

从业务规则到可执行的图谱模型,通常遵循以下五个步骤:

  1. 业务抽象: 将业务欺诈场景转化为图元素(节点、边、属性)。
  2. 模式定义: 用子图模板(Motif)描述欺诈模式的结构特征。
  3. 特征工程: 基于图结构计算节点/边的统计特征(度数、PageRank、连通分量等)。
  4. 模型训练/规则配置: 使用监督学习或专家规则对特征进行打分。
  5. 在线/离线推理: 在 Spark 上批量计算或流式计算,输出欺诈评分。

下图展示了从业务场景到图谱模型的完整建模流程:

欺诈图谱建模方法论流程图 业务抽象 节点/边/属性定义 模式定义 Motif 子图模板 特征工程 度数/PageRank/连通分量 模型/规则 评分配置 推理引擎 Spark 批量/流式 迭代优化(反馈回路) 说明: 每个步骤的输出作为下一步的输入;特征工程和模型规则可多次迭代。 Spark GraphFrames 的 motif finding 接口可直接用于模式定义阶段的子图匹配。

3.3 图谱建模中的关键图算法

在欺诈图谱建模中,以下图算法被广泛用于特征提取和模式识别:

算法 用途 Spark 实现方式
连通分量(Connected Components) 识别团伙聚集,找出属于同一团伙的节点集合 GraphFrames.connectedComponents()
PageRank 衡量节点在图中的重要性,高 PageRank 节点可能是核心欺诈账户 GraphFrames.pageRank()
三角形计数(Triangle Count) 检测密集子图,三角形数量异常高可能表示团伙 GraphFrames.triangleCount()
标签传播(Label Propagation) 社区发现,自动划分欺诈团伙 GraphFrames.labelPropagation()
Motif Finding 子图模式匹配,直接查找环状交易、星型结构等 GraphFrames.find("(a)-[e]->(b); (b)-[e2]->(a)")

3.4 三种欺诈模式的图谱建模示例

下面分别给出三种欺诈模式的图谱建模示例,展示如何将业务模式转化为具体的图结构和检测逻辑。

3.4.1 团伙欺诈建模

图结构: 账户节点(Account)与设备节点(Device)之间通过“使用”边连接。团伙欺诈表现为多个账户共享同一设备。

检测逻辑: 查找度数大于阈值(如 5)的设备节点,其关联的所有账户构成候选团伙。

// GraphFrames 示例:查找共享设备的账户团伙
val devices = graph.find("(a)-[e:uses]->(d)")
  .filter("e.relation = 'uses'")
  .groupBy("d.id")
  .agg(count("a.id").alias("account_count"))
  .filter("account_count > 5")

devices.show()

3.4.2 环状交易建模

图结构: 账户节点之间通过“转账”边连接,形成有向环。

检测逻辑: 使用 Motif Finding 查找 3 跳以内的有向环。

// GraphFrames 示例:查找 3 节点环状交易
val cycle3 = graph.find("(a)-[t1:transfer]->(b); (b)-[t2:transfer]->(c); (c)-[t3:transfer]->(a)")
  .filter("t1.amount > 1000 AND t2.amount > 1000 AND t3.amount > 1000")

cycle3.show()

3.4.3 薅羊毛建模

图结构: 用户节点(User)与订单节点(Order)之间通过“下单”边连接,订单节点与设备节点(Device)之间通过“来自”边连接。

检测逻辑: 统计同一设备在短时间窗口内关联的订单数量。

// GraphFrames 示例:检测薅羊毛设备
val woolDevice = graph.find("(u)-[o:order]->(d)")
  .filter("o.timestamp > '2025-01-01 00:00:00' AND o.timestamp < '2025-01-01 01:00:00'")
  .groupBy("d.id")
  .agg(count("u.id").alias("user_count"))
  .filter("user_count > 10")

woolDevice.show()

3.5 建模避坑指南

常见错误 1: 忽略属性边的时效性。欺诈图谱中的边(如交易、登录)通常带有时间戳,如果不加时间窗口过滤,会引入大量历史噪声,导致误判。
常见错误 2: 过度依赖全局算法。在十亿级图谱上运行全图连通分量或 PageRank 可能耗时数小时,应优先使用局部子图采样或增量计算。
常见错误 3: 模式定义过于严格。环状交易检测中,如果要求完全闭合的环,可能漏掉“准环”(如 A→B→C→A 但缺少一条边),建议使用松弛匹配或路径评分。

3.6 本章小结

欺诈图谱建模的核心在于将业务欺诈模式转化为可计算的图结构模式。团伙欺诈对应密集子图/星型结构,环状交易对应有向环,薅羊毛对应二部图密集连接。建模方法论遵循“业务抽象 → 模式定义 → 特征工程 → 模型/规则 → 推理引擎”五步流程。在 Spark 上,GraphFrames 的 Motif Finding 和内置图算法为这三种模式提供了高效的检测手段。