3. 欺诈图谱构建

欺诈图谱构建 学习卡片

在识别关键欺诈节点之前,必须先有一张“可计算、可追溯、可扩展”的欺诈图谱。图谱构建不是把数据简单导入图数据库,而是围绕欺诈业务问题,把多源异构数据转化为实体—关系—属性的结构化网络。本节围绕四个核心环节展开:数据源接入、实体抽取、关系定义与图存储选型,并给出可落地的工程方法。

一、核心原理:从“记录视角”转向“网络视角”

传统风控系统以申请、交易、设备等单条记录为中心,擅长判断“这一笔是否异常”,却难以回答“这群人是否在协同作案”。欺诈图谱的核心价值在于把分散的记录连接成网络:同一设备被多个账户使用、同一银行卡绑定多个手机号、多个账户共享同一收货地址,这些“共享关系”本身就是强欺诈信号。

因此,图谱构建的本质是完成三次映射:第一,把业务对象映射为节点(用户、设备、卡、IP、商户、地址);第二,把业务行为映射为边(登录、转账、绑定、收货);第三,把行为上下文映射为属性(时间、金额、频次、渠道)。只有映射清晰,后续的中心性计算与关键节点识别才有稳定基础。

构建目标:让每一个欺诈团伙在图中表现为“稠密子图或星型结构”,让关键节点表现为“高中心性、高桥接性、高聚集性”的顶点。

二、方法流程:四步构建可用的欺诈图谱

1. 数据源接入:先定问题,再定数据

数据源接入常见四类:业务系统数据(账户、订单、交易)、风控埋点数据(登录、点击、设备指纹)、外部数据(黑名单、工商、司法)、人工标注数据(案件、举报、工单)。接入时建议采用“批流结合”:历史数据用批量导入,实时行为用消息队列接入。

# 示例:从Kafka接入实时登录事件并写入图数据库
kafka-console-consumer \
  --bootstrap-server broker:9092 \
  --topic risk_login_event \
  --from-beginning \
  --property print.key=true

# 事件样例
{"user_id":"U1024","device_id":"D88","ip":"10.2.3.4","ts":"2024-06-01T10:22:31","action":"login"}

接入阶段要建立数据契约:字段含义、主键、时间格式、脱敏规则、更新频率。否则后续实体对齐会大量返工。

2. 实体抽取:把“字段”变成“节点”

实体抽取的目标是从原始数据中识别出稳定、可区分的业务对象。常用方法有三类:规则映射(如 user_id 直接映射为用户节点)、正则与词典(手机号、银行卡号、身份证号)、模型抽取(从文本工单、聊天记录中抽取人名、账号、地址)。

抽取后必须做实体对齐:同一自然人在不同系统中可能有多个 ID,需要通过手机号、设备指纹、银行卡等强标识进行合并。对齐质量直接决定图谱是否“连通”。

3. 关系定义:边是欺诈信号的主要载体

关系定义要遵循“业务可解释、计算可复用”原则。常见关系包括:登录(用户—设备)、绑定(用户—银行卡)、转账(用户—用户)、收货(用户—地址)、归属(设备—IP)。每条边应携带时间、次数、金额等属性,便于后续做时序与权重分析。

关系类型起点终点关键属性欺诈含义
登录用户设备时间、IP、频次设备共用、团伙登录
绑定用户银行卡绑定时间、渠道卡池、资金归集
转账用户用户金额、时间、方向资金环路、洗钱
收货用户地址次数、时间虚假收货、集中作案

4. 图存储选型:按查询模式决定技术栈

图存储选型没有唯一答案,关键看查询模式与规模。若以多跳关系查询、路径分析为主,可选 Neo4j、NebulaGraph、JanusGraph;若需要与大数据生态结合,可选 HugeGraph、TigerGraph;若数据量极大且以离线图计算为主,可用 Spark GraphX 或 Pregel 类框架。

选型建议:中小规模、快速验证优先 Neo4j;超大规模、分布式写入优先 NebulaGraph;已有 Hadoop/Spark 体系优先 HugeGraph 或 GraphX。不要为了“图”而图,先明确查询模式。

三、案例场景:一起“设备共用型”欺诈团伙的图谱构建

某平台发现一批账户在短时间内集中注册并申请提现。原始数据分散在账户表、登录日志、设备指纹表中。构建过程如下:

  1. 接入账户、登录、设备三张表,统一 user_id 与 device_id 主键。
  2. 抽取用户节点、设备节点、IP 节点,并对手机号做实体对齐。
  3. 定义“登录”关系,边属性记录时间与次数。
  4. 写入图数据库后,执行两跳查询:找出共享同一设备且互相转账的用户群。
// Cypher示例:查找共用设备且存在转账关系的可疑团伙
MATCH (u1:User)-[:LOGIN]->(d:Device)<-[:LOGIN]-(u2:User)
MATCH (u1)-[t:TRANSFER]->(u2)
WHERE u1 <> u2 AND t.amount > 1000
RETURN d.device_id, u1.user_id, u2.user_id, t.amount
ORDER BY t.amount DESC
LIMIT 20;

查询结果中,一个设备关联了 17 个账户,且这些账户之间存在环形转账。该设备节点在后续中心性分析中表现为高介数中心性,成为关键欺诈节点。

四、误区与复盘:构建阶段最容易踩的坑

  • 误区一:先建图再想问题。没有明确欺诈场景,图谱会变成“数据仓库的图版本”,无法支撑识别。
  • 误区二:实体对齐过度合并。把弱标识(如昵称)当强标识,会把正常用户错误合并,产生虚假团伙。
  • 误区三:关系定义过细。边类型过多会导致查询复杂、计算缓慢,建议先定义 5~8 类核心关系。
  • 误区四:忽视时序属性。欺诈关系具有强时序性,缺少时间戳会导致无法区分“历史正常”与“当前异常”。

复盘要点:图谱构建完成后,必须做一次“连通性体检”:节点数、边数、孤立节点比例、最大连通子图规模、平均度。若孤立节点过多,说明实体对齐或关系定义不足;若最大连通子图过大,说明合并过度或关系过泛。

只有把数据源、实体、关系与存储四件事做扎实,后续的中心性计算与关键欺诈节点识别才有可靠输入。构建阶段多花一天做对齐与校验,识别阶段就能少走一周弯路。