一、社群发现基础:图论基础概念、社群定义、团伙欺诈场景概述、课程整体框架
1.1 图论基础概念——从一张关系网说起
做反欺诈这些年,我越来越觉得,单看单个用户的行为,就像盲人摸象。你只能摸到一条腿,却看不到整头大象。而图,恰恰是帮我们看清全貌的工具。
图是什么?说白了,就是一堆节点和一堆边的集合。节点可以是一个人、一个设备、一张银行卡。边就是他们之间的关系——转账、同设备登录、共用手机号等等。
我习惯把图分成两种:
- 无向图:边没有方向。比如A和B共用一台设备,这个关系是双向的。
- 有向图:边有方向。比如A给B转账,方向就很明确。
在实际的团伙欺诈场景里,我们更多用的是有向图。为什么?因为资金流向本身就是有方向的,你想想看,骗子把钱从A转到B,再转到C,这个链条一旦断了,你就很难追踪。
核心概念速查表
| 术语 | 含义 | 反欺诈场景举例 |
|---|---|---|
| 节点 | 图中的实体 | 用户ID、设备指纹、IP地址 |
| 边 | 实体间的关系 | 转账、同设备登录、同IP注册 |
| 度 | 节点连接的边数 | 一个设备关联了多少个账号 |
| 连通分量 | 互相可达的节点子集 | 一个完整的欺诈团伙 |
| 路径 | 从一个节点到另一个节点的走法 | 资金流转的完整链路 |
我记得刚入行那会儿,遇到一个薅羊毛团伙。单看每个账号,行为都挺正常的——有登录、有浏览、有下单。但一画图就露馅了:200多个账号,全挂在同一台设备上。这就是典型的「高密度子图」,也是我们后面要重点讲的内容。
1.2 社群定义——团伙在图中长什么样
社群,学术上叫community。定义其实挺直观的:内部连接紧密,外部连接稀疏的一组节点。
你想想看,一个正常的社交网络里,你的朋友之间互相认识的概率很高。但一个欺诈团伙呢?他们之间频繁转账、共用设备,内部关系密不透风,对外却几乎不联系。这就是社群。
常见的社群定义方式有三种:
- 基于模块度:衡量社群划分质量的一个指标。值越大,说明内部越紧密。我个人习惯用模块度来快速验证一个团伙是不是真的「抱团」。
- 基于连通性:只要节点之间能通过边互相到达,就算一个社群。简单粗暴,但容易把不相关的节点也包进来。
- 基于密度:设定一个阈值,比如内部边密度大于0.5才算社群。这种方式更精细,适合做精准打击。
避坑指南
我曾经在一个项目里,直接用连通分量来定义团伙,结果把两个完全不相干的正常用户群也合并了。后来加了密度约束,才把误杀率降下来。所以,定义社群时,一定要结合业务场景。薅羊毛团伙和洗钱团伙,他们的图结构差异很大,不能一刀切。
1.3 团伙欺诈场景概述——我们到底在打什么
团伙欺诈,说白了就是一群人合起伙来薅平台羊毛、骗补贴、洗钱。跟单人欺诈最大的区别在于:单人欺诈靠规则就能防住,团伙欺诈必须靠图。
我遇到过最常见的几种场景:
- 薅羊毛:注册大量小号,用同一批设备、同一批IP,集中抢优惠券。这种团伙的图结构通常是「星型」——一个设备连几百个账号。
- 刷单炒信:商家和刷手之间互相下单、互相好评。图里会出现大量的「三角结构」——A给B下单,B给C下单,C又给A下单。
- 洗钱:资金从A到B到C再到D,中间可能经过几十层。这种图的特点是「链状」——路径长、节点多、单笔金额小。
注意
团伙欺诈的识别,难点不在于算法,而在于特征工程。你想想看,如果连图都建不对,后面的社群发现算法再牛也没用。我见过太多团队,一上来就上Louvain、Label Propagation,结果跑出来的社群全是噪声。为什么?因为建图时没考虑边的权重、时间衰减、关系强度。
1.4 课程整体框架——我们怎么学
这门课,我把它分成四个模块。每个模块解决一个核心问题:
| 模块 | 核心问题 | 你会学到什么 |
|---|---|---|
| 基础篇 | 图是什么?社群是什么? | 图论基础、社群定义、团伙欺诈场景 |
| 算法篇 | 怎么找到社群? | Louvain、Label Propagation、GN算法 |
| 实战篇 | 怎么落地到业务? | 特征提取、模型融合、线上部署 |
| 进阶篇 | 怎么应对对抗? | 动态图、时序图、对抗样本防御 |
我个人建议,如果你刚接触图算法,先把基础篇吃透。别急着调包跑模型,先把图建好、把特征想清楚。我见过太多人,Louvain跑得飞起,但连模块度是什么意思都说不清楚。嗯,这样不行。
下面这张图,是我自己整理的课程知识体系。你可以把它当成一张地图,随时回来看看自己走到哪了。
这张图里,每个模块之间是递进关系。基础篇打底,算法篇给工具,实战篇教你怎么用,进阶篇帮你应对对抗。我建议你学完一个模块,就回去看看这张图,确认自己没走偏。
学习建议
别急着跑代码。先花一周时间,把图论基础概念吃透。什么叫度?什么叫连通分量?什么叫最短路径?这些概念在后面的算法里会反复出现。我见过太多人,Louvain调参调得飞起,但连「模块度」的物理意义都说不清楚。嗯,这样不行。