本文全面探讨了营销活动反作弊与电商反作弊的图算法应用。首先介绍了黑产薅取活动奖励、刷单等作弊行为的背景,随后深入讲解了同人挖掘技术,包括同人建模、挖掘步骤及稳定性处理。接着,依次介绍了标签传播算法、Fraudar算法、GCN网络的原理、优缺点及应用。最后,文章展望了未来图算法在风控反作弊应用的发展方向,如多模态数据融合与动态图实时计算,旨在应对黑产的快速演化,确保营销活动的公平性与数据真实性。
01 业务背景
在营销活动场景中,黑产团伙通过自动化手段大规模获取活动奖励,挤占真实用户权益造成营销资金浪费,并污染数据指标导致活动效果失真,从而影响运营决策准确性。
以当前主流作弊模式为例,黑产实施路径如下:
-
资源准备阶段:通过虚拟机登录批量购买的百度账号。
-
任务执行阶段:部署自动化脚本模拟用户行为,如视频播放、广告点击等。
-
资金变现阶段:使用分散的真实微信账号进行提现操作。
在与反作弊的对抗中,黑产工具持续升级(如改机工具、IP池轮换等),传统特征采集数据趋于分散。我们的反作弊体系从两个方向不断提升防御能力:
-
多维特征挖掘,包括设备指纹、行为特征以及环境特征。
-
关联团伙分析,包括用户操作模式量化、昵称相似度分析以及基于账号-设备-提现账户等信息建立关联图谱。

上图为云手机工具示例。
在电商场景中,存在着类似于营销活动的批量团伙作弊,典型的即刷单。刷单作弊即非真实有购买需求的用户(机器或众包真人)为了提升店铺的销量、评分,替店铺虚假的下单、评价,然后收取店铺报酬的一种作弊方式。
02 同人挖掘
2.1 同人建模
黑产为了节省成本往往存在账号、设备共用的情况,因此我们定义"同人"概念:
若参与活动的账号、设备背后的主体相同,则为一个同人团伙。
在账号之外,增加一个同人粒度进行数据监控和风险控制。例如,某人使用5个手机号分别注册5个uid,并使用2个身份证进行实名认证,每天在3个设备上参与活动,并将收益提取到2个微信账号中,我们希望通过构图将其归类为一个同人团伙。
2.1.1 同人挖掘
挖掘步骤可分为以下3步:
-
以用户百度账号为节点,共设备ID/手机号/提现ID/身份证号(加密)为边构图
-
挖掘极大连通子图,即有边的强连通判为同人关系
-
在多天参与活动的用户上挖掘同人关系,并与历史挖掘结果进行拼接,做同人ID稳定性处理
2.1.2 稳定性处理
在与历史同人结果拼接时,可将情况分为以下几类:

经过稳定性处理后,整体同人ID稳定性达96.8%,排除已知合并等不稳定因素稳定性达99.3%。
2.2 挖掘结果
由于线上已有一对多业务规则,同人团伙会采用多对多打散以绕过规则。
以下展示部分典型团伙构图:

2.3 同人应用
作弊识别:按照团大小逐渐收敛,从同人作弊株连、团内作弊风险浓度高、同人且有作弊风险几个思路进行策略迭代。
发放打压:对于作弊风险较低的羊毛党用户,业务侧可根据情况进行奖励发放打压。
03 标签传播算法及其应用
3.1 标签传播算法
标签传播算法(Label Propagation Algorithm,LPA)是一种基于图的半监督学习算法,常用于社区检测和节点分类任务。它通过迭代传播标签信息,利用数据结构的相似性来推断未知节点的标签。
3.1.1 算法流程
输入 :图 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( G = ( V , E ) ) (G=(V,E)) </math>(G=(V,E)),已知标签节点集合 <math xmlns="http://www.w3.org/1998/Math/MathML"> V L V_L </math>VL,未知标签节点集合 <math xmlns="http://www.w3.org/1998/Math/MathML"> V U V_U </math>VU。
输出 :所有节点预测标签 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( y i i ∈ V ) ({y_i}_{i\in V}) </math>(yii∈V)。
初始化阶段 :为每个已标记节点 <math xmlns="http://www.w3.org/1998/Math/MathML"> v ∈ V L v\in V_L </math>v∈VL分配固定标签 <math xmlns="http://www.w3.org/1998/Math/MathML"> y v y_v </math>yv,为每个未标记节点 <math xmlns="http://www.w3.org/1998/Math/MathML"> v ∈ V U v\in V_U </math>v∈VU随机分配标签(或按先验分布分配)。
迭代传播阶段:对于每个未标记节点,将出现频率最高的邻居标签作为自己的新标签。
定义 <math xmlns="http://www.w3.org/1998/Math/MathML"> N ( v ) N(v) </math>N(v)为节点 <math xmlns="http://www.w3.org/1998/Math/MathML"> v v </math>v的邻居集合, <math xmlns="http://www.w3.org/1998/Math/MathML"> y v ( t ) y_v^{(t)} </math>yv(t)为节点 <math xmlns="http://www.w3.org/1998/Math/MathML"> v v </math>v在迭代 <math xmlns="http://www.w3.org/1998/Math/MathML"> t t </math>t时的标签,Ⅱ为指示函数(当 <math xmlns="http://www.w3.org/1998/Math/MathML"> y u = l y_u=l </math>yu=l时为1,否则为0)。
无权图标签更新规则 <math xmlns="http://www.w3.org/1998/Math/MathML"> y v ( t + 1 ) = arg max l ∑ u ∈ N ( v ) Π ( y u t = l ) y_v^{(t+1)} = \argmax_l \displaystyle\sum_{u\in N(v)} \Pi(y_u^{t}=l) </math>yv(t+1)=argmaxlu∈N(v)∑Π(yut=l)
加权图标签更新规则 <math xmlns="http://www.w3.org/1998/Math/MathML"> y v ( t + 1 ) = arg max l ∑ u ∈ N ( v ) w u v ⋅ Π ( y u t = l ) y_v^{(t+1)} = \argmax_l \displaystyle\sum_{u\in N(v)} w_{uv} \cdot\Pi(y_u^{t}=l) </math>yv(t+1)=argmaxlu∈N(v)∑wuv⋅Π(yut=l),其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> w u v w_{uv} </math>wuv为边权重。
终止条件:当迭代不再改变任何节点的标签时;或达到最大迭代次数。

上图为标签传播示例。
3.1.2 实践细节
最高频率标签不唯一时:随机选择(结果可能不稳定),或结合其他信息(如节点度数等)。
传播顺序:同步更新(所有节点同时更新,可能振荡),或异步更新(按随机或度排序等顺序逐个更新)。
3.1.3 无监督改进
在完全无监督的情况下,仍然可以通过改进方法实现社区检测或聚类任务。面对局部最优问题,使用模块度作为目标函数多次运行。
算法流程:
-
随机初始化所有节点的标签(如1到K,K为社区数)
-
执行标准LPA迭代,直到收敛,计算模块度Q
-
重复多次,选择模块度最高的划分结果
模块度指标的核心思想:社区内部的连接应显著高于随机情况

其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> A i j A_{ij} </math>Aij为邻接矩阵元素(节点 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i和 <math xmlns="http://www.w3.org/1998/Math/MathML"> j j </math>j相连时为1,否则为0), <math xmlns="http://www.w3.org/1998/Math/MathML"> k i k_i </math>ki为节点 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i的度数, <math xmlns="http://www.w3.org/1998/Math/MathML"> m m </math>m为图中总边数 <math xmlns="http://www.w3.org/1998/Math/MathML"> m = 1 2 ∑ i k i m=\frac{1}{2}\sum_iki </math>m=21∑iki, <math xmlns="http://www.w3.org/1998/Math/MathML"> c i c_i </math>ci节点 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i所属的社区, <math xmlns="http://www.w3.org/1998/Math/MathML"> δ ( c i , c j ) \delta(c_i,c_j) </math>δ(ci,cj)若 <math xmlns="http://www.w3.org/1998/Math/MathML"> c i = c j c_i=c_j </math>ci=cj则为1,否则为0。
3.1.4 算法优缺点
优点:
-
计算高效:每轮迭代复杂度 <math xmlns="http://www.w3.org/1998/Math/MathML"> O ( ∣ E ∣ ) O(|E|) </math>O(∣E∣)
-
无需参数调优:完全基于图结构
-
自然并行化:节点更新可并行执行
局限性:
-
结果可能不稳定:受初始化顺序影响
-
仅利用拓扑结构:忽略节点特征信息
-
对稀疏图效果差:邻居信息不足时传播受限
3.2 在营销活动场景的应用
在营销活动场景中,黑产在资源准备和任务执行阶段存在批量化的账号生成和活动行为,在挖掘结果中也经常发现存在昵称、行为序列等相似的聚集特征。
3.2.1 构图
以用户账号为节点,以昵称与活动点位行为序列为例,分别采用针对字符串、序列相似度的建边算法。
昵称相似度:两两计算用户昵称的编辑距离,编辑距离越小说明两个昵称越相似。
序列相似度:拼接用户活动点位(活动行为类型标记)-时间作为行为序列,将序列中的打点转换为词频矩阵,使用MinHash估计Jaccard相似度。
实践细节
-
预处理,如做昵称长度分桶、异常用户筛选等,减少相似度计算量。
-
使用局部敏感哈希(LSH)进行优化,减少搜索空间。
-
可结合业务场景做相似度阈值过滤,缩减构图输入。
3.2.2 团伙挖掘
使用无监督的LPA算法进行团伙挖掘,设定团伙阈值、或结合业务场景添加其他特征进行作弊识别。
下表为实际应用中,通过用户行为序列相似挖掘出的一个团伙部分数据,其设备和地域并不聚集,但昵称可看出为批量操作。

04 Fraudar算法及其应用
在电商场景中,用户-店铺之间天然形成一种二部图的结构,二部图是指图中的节点有两类、边有一类,两类节点互相连接,每类节点本身之间没有连接。Fraudar算法是一种适用于二部图结构的算法,下文详细介绍我们在电商场景的应用。
4.1 Fraudar算法原理
4.1.1 全局可疑度度量
Fraudar定义了一个全局度量 <math xmlns="http://www.w3.org/1998/Math/MathML"> g ( S ) = f ( S ) ∣ S ∣ g(S) = \frac{f(S)}{|S|} </math>g(S)=∣S∣f(S),其中:
● <math xmlns="http://www.w3.org/1998/Math/MathML"> f ( S ) = f v ( S ) + f ϵ ( S ) f(S) = f_v(S) + f_{\epsilon}(S) </math>f(S)=fv(S)+fϵ(S):子网络 <math xmlns="http://www.w3.org/1998/Math/MathML"> S S </math>S 中节点的可疑度之和 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( f v ) (f_v) </math>(fv)与边的可疑度之和 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( f ϵ ) (f_{\epsilon}) </math>(fϵ);
● 假设在一个用户-商品二部图中,那么 <math xmlns="http://www.w3.org/1998/Math/MathML"> f v ( S ) f_v(S) </math>fv(S)可以理解为用户或商品的独立可疑度, <math xmlns="http://www.w3.org/1998/Math/MathML"> f ϵ ( S ) f_{\epsilon}(S) </math>fϵ(S)可以理解为用户在商品下的订单/评论的可疑度。
● <math xmlns="http://www.w3.org/1998/Math/MathML"> ∣ S ∣ |S| </math>∣S∣:子网络的规模(节点数)。
<math xmlns="http://www.w3.org/1998/Math/MathML"> g ( S ) g(S) </math>g(S)表示一个网络的平均可疑度,满足以下四个属性:
- (节点可疑度)当节点总数、边可疑度保持一致时,由较高可疑度的节点组成的网络比由较低可疑度节点组成的网络更可疑。
<math xmlns="http://www.w3.org/1998/Math/MathML"> ∣ S ∣ = ∣ S ′ ∣ ∧ f ϵ ( S ) = f ϵ ( S ′ ) ∧ f v ( S ) > f v ( S ′ ) ⇒ g ( S ) > g ( S ′ ) |S| = |S'| \land f_{\epsilon}(S) = f_{\epsilon}(S') \land f_v(S) > f_v(S') \Rightarrow g(S) > g(S') </math>∣S∣=∣S′∣∧fϵ(S)=fϵ(S′)∧fv(S)>fv(S′)⇒g(S)>g(S′)
- (边可疑度)其他条件不变,在网络中添加边会增加该网络的可疑度。
<math xmlns="http://www.w3.org/1998/Math/MathML"> e ∉ ϵ ⇒ g ( S ( v , ϵ ∪ e ) ) > g ( S ( v , ϵ ) ) e \notin \epsilon \Rightarrow g(S(v, \epsilon \cup \\{e\\})) > g(S(v, \epsilon)) </math>e∈/ϵ⇒g(S(v,ϵ∪e))>g(S(v,ϵ))
- (大小)假设节点和边的权重都相等,边的密度也相等,那么更大的网络比小的网络更可疑。其中边的密度 <math xmlns="http://www.w3.org/1998/Math/MathML"> r h o ( S ) \\rho(S) </math>rho(S)定义为网络中的边数除以它可能的最大边数。
<math xmlns="http://www.w3.org/1998/Math/MathML"> ∣ S ∣ > ∣ S ′ ∣ ∧ S ⊃ S ′ ∧ ρ ( S ) = ρ ( S ′ ) ⇒ g ( S ) > g ( S ′ ) |S| > |S'| \land S \supset S' \land \rho(S) = \rho(S') \Rightarrow g(S) > g(S') </math>∣S∣>∣S′∣∧S⊃S′∧ρ(S)=ρ(S′)⇒g(S)>g(S′)
- (集中度) 较小的网络比相同总可疑度但规模更大的网络更可疑。
<math xmlns="http://www.w3.org/1998/Math/MathML"> ∣ S ∣ < ∣ S ′ ∣ ∧ f ( S ) = f ( S ′ ) ⇒ g ( S ) > g ( S ′ ) |S| < |S'| \land f(S) = f(S') \Rightarrow g(S) > g(S') </math>∣S∣<∣S′∣∧f(S)=f(S′)⇒g(S)>g(S′)
4.1.2 抗伪装设计
即使虚假账户添加大量正常连接(伪装),算法仍能通过识别局部密集子网络发现异常,因为伪装行为会导致整体网络稀疏化,而欺诈子网络仍保持高密度。

上图是虚假账户常用的伪装方法,假设为用户-商品网络,那么(a)刷单用户通过向正常商品随机下单伪装;(b)刷单用户通过向正常商品添加有偏的伪装;(c)刷单用户劫持一些正常账户。
算法使用了列权重作为边权的方式来抗伪装,即利用商品的边数来定义边权。在一个用户商品图中,算法先确定商品节点的数量,利用 1/log(商品节点边数+5)确定边权 (边可疑度),然后按照边权汇总求取商品节点、用户节点的权重(节点可疑度)。
4.1.3 算法实现流程
利用列权重定义边权能够抵抗虚假账户向正常商品增加边的伪装,因为是往正常商品增加边,不会影响欺诈商品的边数,也即三种伪装方式的欺诈块仍然是高权重的/密集的。而如果使用行权重,那么一个用户通过向正常商品增加边,就可以稀释自己的欺诈边的可疑度,达到伪装的目的。

上图是 Fraudar 算法的步骤。迭代移除当前优先级最高的节点(可疑度贡献最低的节点),逐步缩小网络规模,直至所有节点被移除。每一步记录剩余子网络的全局可疑度 <math xmlns="http://www.w3.org/1998/Math/MathML"> g ( S ) g(S) </math>g(S)。在所有迭代步骤中, <math xmlns="http://www.w3.org/1998/Math/MathML"> g ( S ) g(S) </math>g(S)值会先增大后减小,算法保留每一步的迭代结果,选择 <math xmlns="http://www.w3.org/1998/Math/MathML"> g ( S ) g(S) </math>g(S)达到最大值的子网络作为最可疑的欺诈团伙。
由于遍历删除图中可疑度最低的节点是个 <math xmlns="http://www.w3.org/1998/Math/MathML"> O ( ∣ V ∣ 2 ) O(|V|^2) </math>O(∣V∣2)的操作(迭代 <math xmlns="http://www.w3.org/1998/Math/MathML"> ∣ V ∣ |V| </math>∣V∣次,每次找到可疑度最低的节点 <math xmlns="http://www.w3.org/1998/Math/MathML"> O ( ∣ V ∣ ) O(|V|) </math>O(∣V∣),因此算法引入了优先树(小顶堆),叶子节点对应图中的节点,父节点记录子节点中的最高优先级,以此实现快速访问和更新优先级。优化后算法需要迭代边数次,每次查找和更新节点优先级的复杂度变为 <math xmlns="http://www.w3.org/1998/Math/MathML"> O ( l o g ∣ V ∣ ) O(log|V|) </math>O(log∣V∣),算法的总时间复杂度为 <math xmlns="http://www.w3.org/1998/Math/MathML"> O ( ∣ ϵ ∣ l o g ∣ V ∣ ) O(|\epsilon| log|V|) </math>O(∣ϵ∣log∣V∣)。
另外,在实际应用中,只获得可疑度最大的子图可能并不够用,可以在获取一个可疑度最大子图后将其中原始图中删除,然后再在剩余的图中获取次可疑的子图,循环往复得到多个可疑子图。
4.1.4 优缺点及改进方向
优势:
1. 抗伪装能力通过全局度量而非局部密度,算法能抵抗虚假账户添加正常连接的行为,即使部分节点被"污染",仍能准确识别核心欺诈簇。
2. 高效性与可扩展性利用优先树结构优化节点移除操作,时间复杂度为 O(|∈| log |V|),适用于大规模网络。
3. 实际应用场景
-
电商刷单检测:识别虚假评论形成的密集用户-商品子网络。
-
社交网络反欺诈:检测伪卡交易或虚假关注关系。
-
金融反洗钱:发现异常交易团伙。
4.2 Fraudar算法应用

4.2.1 构图与关系降噪
实践中,我们利用用户-店铺的订单关系构建二部图,并且为了提升二部图中的风险浓度,对低风险店铺等做了剪枝实现关系的降噪,然后输入Fraudar算法挖掘异常子图。
原始的Fraudar算法只能挖掘出风险最高的一个子图,但实际业务中,一般不止一个作弊团伙,因此我们在每次运行Fraudar算法产生一个子图后,就将这个子图从原始图中裁剪掉,再次运行Fraudar算法得到次可疑的子图,即循环Fraudar。通过这种方法,我们可以获得期望数量的异常子图。
4.2.2 结合监督模型
挖掘出的风险子图由用户和店铺构成,而实际业务的识别目标是订单,且风险子图中会掺杂少量正常用户的订单。为了进一步提升算法识别结果的准确率,我们将挖掘出的风险子图输入到LR模型进行精细判别。LR模型使用用户、店铺的特征作为输入,异常订单为正样本、正常订单为负样本训练,最后在风险子图的用户、店铺的订单上区分出异常订单并落地到业务。
05 GCN模型及其应用
上文提到Fraudar模型为了提升图的风险浓度做了剪枝降噪,这样提升算法精准的同时会损失一部分召回。并且Fraudar本身是无监督模型,还需要结合监督模型做精细化判别。因此我们尝试了端到端的GCN模型,提升召回的同时简化了识别链路。
5.1 GCN模型原理
5.1.1 GCN的核心思想:消息传递与聚合
GCN的核心是通过邻域聚合更新节点特征,其本质是让每个节点从邻居节点中提取有效信息:
1. 基础聚合公式:
<math xmlns="http://www.w3.org/1998/Math/MathML"> H ( l + 1 ) = σ ( D ^ − 1 / 2 A ^ D ^ − 1 / 2 H ( l ) W ( l ) ) H^{(l+1)} = \sigma\left(\hat{D}^{-1/2} \hat{A} \hat{D}^{-1/2} H^{(l)} W^{(l)}\right) </math>H(l+1)=σ(D^−1/2A^D^−1/2H(l)W(l))
其中:
-
<math xmlns="http://www.w3.org/1998/Math/MathML"> A ^ = A + I \hat{A} = A + I </math>A^=A+I:邻接矩阵加入自连接,防止节点自身信息丢失。
-
<math xmlns="http://www.w3.org/1998/Math/MathML"> D ^ \hat{D} </math>D^:度矩阵的对称归一化,解决节点度数差异导致的权重偏差。
-
<math xmlns="http://www.w3.org/1998/Math/MathML"> W ( l ) W^{(l)} </math>W(l):可学习的权重矩阵,用于特征变换,即卷积核。
-
<math xmlns="http://www.w3.org/1998/Math/MathML"> H ( l ) H^{(l)} </math>H(l):激活值,对于输入层可以理解成特征矩阵。
2. 关键设计:
-
归一化:通过 <math xmlns="http://www.w3.org/1998/Math/MathML"> D ^ − 1 / 2 A ^ D ^ − 1 / 2 \hat{D}^{-1/2} \hat{A} \hat{D}^{-1/2} </math>D^−1/2A^D^−1/2避免度数高的节点主导信息传播,使模型更稳定。
-
非线性激活:如ReLU函数,增强模型的表达能力。
5.1.2 数学视角:从拉普拉斯矩阵到频谱域卷积
GCN的理论基础源自图谱理论,通过将图信号转换到频域进行卷积操作,核心概念:
-
拉普拉斯矩阵:定义为 <math xmlns="http://www.w3.org/1998/Math/MathML"> L = D − A L = D - A </math>L=D−A,其特征分解 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( L = U Λ U T ) (L = U \Lambda U^T) </math>(L=UΛUT)将图结构映射到频域空间。
-
图傅里叶变换:利用特征向量矩阵 <math xmlns="http://www.w3.org/1998/Math/MathML"> U U </math>U对节点特征进行频域投影,卷积操作简化为频域的乘积。
a. 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即对于函数 <math xmlns="http://www.w3.org/1998/Math/MathML"> f ( t ) f(t) </math>f(t)与 <math xmlns="http://www.w3.org/1998/Math/MathML"> h ( t ) h(t) </math>h(t)两者的卷积是其函数傅里叶变换乘积的逆变换。
b. 图傅里叶变换把图上定义的任意向量,表示成了拉普拉斯矩阵特征向量的线性组合。
- 切比雪夫近似:为降低计算复杂度,GCN采用一阶近似(仅考虑直接邻居),公式退化为经典聚合形式。
第一代 GCN:将输入特征通过图傅里叶变换从空域映射到谱域,做卷积运算后再映射回空域。
<math xmlns="http://www.w3.org/1998/Math/MathML"> Y = U ⋅ g θ ( Λ ) ⋅ U T X Y = U \cdot g_\theta(\Lambda) \cdot U^T X </math>Y=U⋅gθ(Λ)⋅UTX
第二代GCN:利用切比雪夫多项式近似 <math xmlns="http://www.w3.org/1998/Math/MathML"> g θ ( Λ ) gθ(Λ) </math>gθ(Λ),避免 <math xmlns="http://www.w3.org/1998/Math/MathML"> O ( N 3 ) O(N^3) </math>O(N3)复杂度的拉普拉斯矩阵分解。
卷积核用 K阶段切比雪夫多项式展开:
<math xmlns="http://www.w3.org/1998/Math/MathML"> g θ ( Λ ) = ∑ k = 0 K θ k T k ( Λ ~ ) g_\theta(\Lambda) = \sum_{k=0}^K \theta_k T_k(\tilde{\Lambda}) </math>gθ(Λ)=∑k=0KθkTk(Λ~)
最终 GCN 公式:
<math xmlns="http://www.w3.org/1998/Math/MathML"> Y = ∑ k = 0 K θ k T k ( L ~ ) X Y = \sum_{k=0}^K \theta_k T_k(\tilde{L}) X </math>Y=∑k=0KθkTk(L~)X
第三代 GCN:只保留一阶切比雪夫多项式,并加入自环和归一化。
<math xmlns="http://www.w3.org/1998/Math/MathML"> H ( l + 1 ) = σ ( A ^ H ( l ) W ( l ) ) H^{(l+1)} = \sigma \left( \hat{A} H^{(l)} W^{(l)} \right) </math>H(l+1)=σ(A^H(l)W(l))
5.1.3 模型结构:轻量化与高效性
GCN的典型结构通常仅需2-4层即可完成高效学习,原因在于:
1. 层数限制 :过深的网络会导致过平滑(图中同一连通分量的节点特征趋同),因此实践中常用浅层架构。
2. 参数共享:每层共享权重矩阵,大幅减少参数量,适合处理大规模图数据。(相对于一个节点一个权重矩阵的全连接形式)
3. 应用场景:
-
节点分类(如电商刷单用户检测)
-
图分类(如分子属性判断)
-
链接预测(如推荐系统好友关系推断)
5.1.4 GCN的优缺点与改进方向
1. 优势:
-
天然融合图结构与节点特征,适合复杂关系建模。
-
计算高效,支持稀疏矩阵优化。
2. 局限:
-
过平滑问题:深层网络性能下降。
-
静态图假设:难以处理动态变化的图结构。
5.2 GCN模型应用
5.2.1 构图
利用订单作为节点、订单之间的属性关联关系构建同构图。特征上采用用户、 店铺等风险属性刻画订单,异常订单为正样本、正常订单为负样本。

5.2.2 风险订单挖掘
由于实际业务中有标签的风险订单、正常订单仅是全量订单的一小部分,因此我们采用了半监督的方式训练GCN模型,利用有标签的订单对无标签的订单进行推理。GCN模型设计上针对的是静态图,应用中我们采用了随着时间窗口滚动构图的方式来适应动态变化的数据,滚动过程中排除了GCN模型本身推理的标签,防止对模型自身结果过拟合。
这里解释下,为什么我们不采用一个训练好的模型在线上不断的推理,而是滚动的训练推理。这是因为GCN模型从原理上属于直推式模型,通常的训练好一个模型后不断的对新数据推理的模型是归纳式模型。GCN的直推式,本质上是因为卷积计算用到了图的拉普拉斯矩阵,图发生了变化,那么这个拉普拉斯矩阵也就发生变化,训练的模型也就失效了。
既然GCN是直推式的,这里又产生一个问题,为什么我们不使用归纳式模型呢?事实上,我们对比了GraphSage等模型在同样图结构、特征数据上的效果,在我们的场景中比GCN效果差,为了保证业务效果我们最终采用的是GCN。
06 总结和展望
在风控反作弊的业务中,我们落地了LPA、Fraudar、GCN等算法并取得了良好的效果,未来我们希望做的更多。
1. 多模态数据融合:从单一图谱到全域关联
未来风控需整合图数据、时序数据(如交易频率)、文本数据(如聊天记录)等多模态信息。例如,通过图嵌入技术将设备、IP、地理位置等实体统一表征,构建全域风险画像。
2. 动态图实时计算:应对黑产快速演化
当前黑产通过"少边构造"(刻意断开部分关联)绕过静态图检测,需引入动态图算法(如时序GNN)实时捕捉行为演变,并结合增量计算优化性能。
3. 可解释性与对抗防御:提升算法可信度
探索可视化工具(如子图归因分析)解释GCN决策逻辑,并研发对抗训练技术抵御黑产对模型的逆向攻击。
图算法正从"辅助工具"升级为风控系统的核心引擎,而未来的挑战在于如何平衡技术效能、业务合规与用户体验。