第2章:反欺诈图谱基础——图谱构建与节点特征
做反欺诈的人,手里没张图谱,就好像上战场没带地图。我个人觉得,图谱这东西,说白了就是把散落在各个角落的数据点,用关系串起来。你今天转账给谁,谁又转给了谁,这些动作在表格里只是一行行冰冷的记录,但在图里,它就是活生生的网络。
我刚开始带团队时,有人问我:“我们不就是做规则模型吗?搞这么复杂干嘛?”结果翻车了——团伙欺诈,单看每个账户都没问题,一拉图谱,全是关联。从那以后,图谱就成了我们反欺诈的标配。
这一章,咱们聊聊图谱怎么建,节点特征怎么提炼。别急,都是干货。
2.1 图谱的骨架——实体与关系
构建图谱的第一步,是确定节点和边。你想想看,欺诈场景里,什么是核心实体?
- 自然人:身份证号、手机号、设备ID、IP地址……这些都是人的化身。
- 账户:银行卡号、支付账号、虚拟钱包。
- 事件:交易记录、登录行为、修改密码请求。
有了实体,再来定义关系。我习惯用“行为”和“属性”两类来划分子:
| 关系类型 | 举例 | 重要性 |
|---|---|---|
| 行为关系 | A向B转账、A使用设备C登录 | 最直接,时间敏感 |
| 属性关系 | A和B共用同一手机号、同一IP | 识别共用身份、团伙 |
| 衍生关系 | A是B的担保人、A是B的手机联系人 | 深度挖掘,易被忽略 |
别小看属性关系。我曾经遇到过一个案例,两个账户看起来毫无交易往来,但注册手机号只差最后一位。图谱一渲染,共用同一个WiFi IP……嘿,同一个团伙。
2.2 节点特征的“三驾马车”
节点不是空壳,得附上信息才能干活。这些信息就是节点特征。我把它们分成三类,咱们挨个看。
2.2.1 属性特征——你是谁
静态的、不怎么变的数据。比如:
- 账户注册时间、是否实名、注册渠道。
- 设备型号、系统版本、是否root。
- IP归属地、是否代理IP。
这类特征好理解,但容易造假。我建议:不要轻信设备指纹中的“是否模拟器”标签,很多最新模拟器能绕过检测。
2.2.2 统计特征——你做了什么
对节点关联的所有事件做聚合计算。常用的有:
- 过去1小时、1天、7天的交易次数和金额。
- 交易对手数量、设备切换次数。
- 操作时间的分布(是不是总在凌晨活跃)。
2.2.3 图拓扑特征——你在网络中的位置
这是图谱特有的优势。常见的指标:
- 度(Degree):节点关联边的数量。关联越多,越可疑或越重要。
- PageRank:衡量节点在网络中的“影响力”。欺诈节点往往聚在一起,PageRank会异常高或异常低。
- 聚类系数:衡量节点的邻居之间是否互相连接。高密度小团伙就是这个指标高。
- 介数中心性:节点充当“桥梁”的程度。中间人洗钱账户的这个值通常很高。
2.3 时间戳建模——让图“动”起来
图谱不能是静态的快照。欺诈行为有很强的时效性——今天和你交易的IP,后天可能就成了黑产。我建议每个节点和边都带上时间戳集合。
怎么用?举个例子:
- 计算最近一次交易的距今时间。间隔越短,行为越“热”。
- 统计历史上的“断连”模式。比如某设备连续3个月没活动,突然激活进行大额交易。
- 构建“时间衰减权重”。老关系的权重低,新关系的权重高。
# 伪代码:计算节点最近活跃时间
def last_active_hours(node_id, current_time, graph):
events = graph.get_node_events(node_id)
# 只取最近500条,避免内存爆炸
recent = sorted(events, key=lambda x: x['timestamp'], reverse=True)[:500]
if not recent:
return 999999 # 极大值代表长期沉默
delta = (current_time - recent[0]['timestamp']).total_seconds() / 3600
return delta
嗯,要注意时间衰减的粒度。按我经验,小时级窗口用于检测爆发式攻击,天级窗口适合发现缓慢渗透的团伙。
2.4 图谱快照与增量更新——别卡死在“重建”上
线上一套图谱,每天交易量上亿条。你全部重算?不行,太慢了。我建议做分层处理:
| 层级 | 更新频率 | 典型做法 |
|---|---|---|
| 全量快照 | 每天/每周一次 | 离线ETL,基于全量数据重建图谱 |
| 增量图 | 分钟/实时 | 仅处理新增的交易和变化的关系 |
| 实时子图 | 毫秒级 | 基于当前请求,提取目标节点的2-3度邻居 |
有人会问:“快照和增量两张图,特征能对齐吗?”能,但得小心。增量图由于数据不完整,度的计算会偏小。解决办法是在增量图上使用“相对特征”,比如“当前节点的度是快照时的多少百分比”,而不是直接用绝对值。
这一章就聊到这儿。图谱构建是地基,节点特征是砖石。下一节里,咱们再深入变量衍生的细节——怎么把图谱特征变成能吃进模型的好“菜”。