Louvain算法在反作弊上的应用

article/2025/9/27 20:33:08

图片

作者 | ANTI

一、概述

随着互联网技术的发展,人们享受互联网带来的红利的同时,也面临着黑产对整个互联网健康发展带来的危害,例如薅羊毛、刷单、刷流量/粉丝、品控、诈骗、快排等等,反作弊作为打击黑产的中坚力量,持续跟黑产对抗着,保证搜索/feed效果的客观公正,保证广告主的合法权益。近年来反作弊算法能力持续提升,黑产很难通过大规模机刷方式获利,已从大规模机刷转向更加隐蔽的小团伙作弊,因此,反作弊进行了团伙作弊挖掘的探索,Louvain就是比较经典的一个算法,下面详细介绍下。

二、Louvain简介

2.1 模块度定义

模块度是对社区划分好坏程度的一种度量,当社区内部的点之间连边越多,社区之间的点连边越少时,模块度越大,表示当前的社区划分情况越好,公式定义如下:

模块度是对社区划分好坏程度的一种度量,当社区内部的点之间连边越多,社区之间的点连边越少时,模块度越大,表示当前的社区划分情况越好,公式定义如下:

图片

其中图片表示所有边权和,图片表示节点 i 和 j 之间的权重,图片表示与 i 相连的所有边的权重和,图片表示节点 i所在的社区,图片表示 x 和 y 是否相同,是的话为 1,否则为 0。

公式并不好直接理解,进行一定的变换可得

图片

其中 c 表示社团,图片表示社区 c 中所有节点的之间的边权和,图片表示社区 c 中所有节点与其他节点的边权和。

模块度前一项描述的是社团内节点之间的边权,该值越大,模块度越大。第二项描述每个社团中所有节点的边权和平方,分母为常量,当所有节点(严格来说是节点的度,即边权)在不同社区中分布越均匀,第二项越小,模块度越大。(第二项重要程度与社团实际的分布情况有关,比如风控场景社团大小分布极不均匀,就会导致第二项结果偏大,模块度偏小,导致模块度的优化目标与实际场景冲突。)

2.2 算法

louvain 以最大化模块度为优化目标,根据模块度公式,整个社区的模块度可以以各个社区为单位计算后求和得到,louvain算法的流程如下:

初始化
将社团中每个节点都看做一个单独的社区。

阶段1:节点合并
遍历所有节点,计算当前节点脱离当前社区,且加入到邻居节点所在社区时,带来的模块度增益,把当前节点移动到增益最大的邻居节点社区中。

图片

每次计算节点 i 从社团 D 移动到社团 C 中时,根据模块度计算公式可知,此时产生的模块度变化只与当前C、D社区相关,不与其他社区相关,因此计算成本较低,将节点 i 从社区 D 转移到 C 中带来的模块度增益为:

ΔQ=ΔQ(D→i)+ΔQ(i→C)

直至节点移动不再产生增益,阶段1停止。

阶段2:社区聚合
将同一个社区的多个节点,融合为一个新的节点,社区内节点之前的权重后续不再使用,当前社区与其他社区之间的权重为两个社区所有节点的权重和,从而构建出新的图结构。
回到阶段1不断迭代,直至图结构不再产生改变。

louvain基于贪心算法实现,实际数据中的平均复杂度为 O(nlog(n)),当每一轮迭代中节点数量降低一半时,能达到平均复杂度。

整体流程如下:

图片

三、在反作弊应用

因黑产作弊的收益较大,作弊者就算冒着违法被抓的风险,也有充足的时间和动力与风控团队对抗,在实际业务场景中,过去作弊者最常使用的方式是低成本批量机器作弊被我们严格打击殆尽,目前也只能逐步迁移成了高成本小批量团伙人为作弊,这是黑产攻击方式的演化趋势,也是风控团队技术发展的必要趋势。
我们看一个电商风控的业务场景。少数店铺为了构造虚假的用户体验评分、更优的算法推荐,铤而走险组建团队做起了刷单套利、刷评分等非法操作。而商家获得的非法收益最终却由用户买单。为了还原真实的互联网、给用户带来最优质的体验 ,我们对作弊团伙进行了持续挖掘对抗。
我们基于经典的Louvain算法实现关系网络模型,将作弊数据中错综复杂的关系抽象成数学表达,我们得到层次化的社区发现结果,如下图所示。其中第一张图描述了风险账户的社区发现结果,第二张图描述了交易订单的社区发现结果,精准定位了作弊团伙,拦截作弊订单/交易,增强了风险防控能力,联合公司法务部对多个作弊黑产团伙也进行了数次抓捕。

社区发现示例图一

图片

社区发现示例图二

图片

四、优化

4.1优缺点

优点

1. 平均时间复杂度较低,计算速度相对较快;
2. 支持定义边权 ;
3. 包含层次结构的社团,可以依据社团大小、社团特殊属性来限制最后形成的社团。类似决策树中根据增益、叶子节点数量来限制节点分裂 。

缺点

1. 多轮迭代,不支持流式系统 ;
2. 最差时间复杂度较大,小概率遇到边界数据时,耗时较长;
3. 实际情况中数据分布不均匀时,模块度定义的第二项会产生一定负干扰。

4.2优化思路

模块度的最优求解本身是个 NP 问题,即时间复杂度为 O(M!),常规数据中无法在短时间内求到最优解。louvain就是利用贪心算法对求解过程做了一定优化,但在 louvain 的基础上,还可以做以下优化:

1. 利用边属性对社团中的边进行关于合并优先级的排序,能取消louvain的多轮迭代,适配流式计算系统。比如边介数:社团中任意两个点的最短路径通过该边的次数;
2. 实际数据中社团分布不均匀时,建议降低模块度中第二项的权重。

---------- END ----------

参考:

[1]原始paper:https://arxiv.org/abs/0803.0476 [2]stanford keynote:http://web.stanford.edu/class/cs224w/slides/14-communities.pdf [3]louvain:https://towardsdatascience.com/louvain-algorithm-93fde589f58c

推荐阅读【技术加油站】系列:

百度用户产品流批一体的实时数仓实践

ffplay视频播放原理分析

百度工程师眼中的云原生可观测性追踪技术

使用百度开发者工具 4.0 搭建专属的小程序 IDE

百度工程师教你玩转设计模式(观察者模式)

揭秘百度智能测试在测试自动执行领域实践

图片


http://chatgpt.dhexx.cn/article/iBHpRqM3.shtml

相关文章

community_louvain社群划分方法

第一、 这个方法是一个典型的EM算法。定义了一个“模块度”的量化评价指标,然后结合上优化方法,不断地优化模块度,最终得到社群划分的结果。 第二、模块度的定义,具体如下: 对于图中任意两个节点,i和j 1、…

Louvain 社团发现算法学习(我的java实现+数据用例)

为了大家方便,直接把数据放在github了: https://github.com/qq547276542/Louvain 算法介绍: Louvain 算法是基于模块度的社区发现算法,该算法在效率和效果上都表现较好,并且能够发现层次性的社区结构,其…

‘ network communites’(网络社区)(二)(louvain算法实现)

引言: 在(一)中我们学习到了什么是‘network communites’(网络社区)及其目标函数Q的求取,接下来我们要说明的是,我们要通过怎样的算法来实现将你的网络分成若干个集群。 一:louva…

neo4j实现Louvain算法

文章目录 例子一:创建一个属性图(无权)一、属性图如下二、实现算法1.stream模式执行Louvain算法(匿名图)2.结果如下 总结一:例子二:创建一个属性图(有权)一、属性图如下二…

社区发现系列03-Louvain算法分辨率

1、分辨率局限 louvain算法存在的问题:分辨率局限。就是说当通过优化模块度来发现社区结构时,网络在存在一个固有的分辨率局限,导致一些规模较小但是结构显著的社区淹没在大的社区中,无法被识别到。 造成这个问题的根本原因是模块…

(Leiden)From Louvain to Leiden:guaranteeing well-connected communities

Leiden算法 论文地址 Leiden算法是近几年的SOTA算法之一。 Louvain 算法有一个主要的缺陷:可能会产生任意的连接性不好的社区(甚至不连通)。为了解决这个问题,作者引入了Leiden算法。证明了该算法产生的社区保证是连通的。此外证明了当Leiden算法迭代应…

社区发现不得不了解的库,包含Louvain 算法、Girvan-Newman 算法等多种社区发现算法,还具有可视化功能

熟知社区发现算法,你不能错过这个 Python 库。它涵盖 Louvain 算法、Girvan-Newman 算法等多种社区发现算法,还具有可视化功能。 网络是由一些紧密相连的节点组成的,并且根据不同节点之间连接的紧密程度,网络也可视为由不同簇组成…

【积】有向图中的louvain社区检测(二)

有向图中的louvain社区检测 请学着自己长大,参考连接《无向louvain社团算法》 无向到有向的修改真的很简单。如果你连这个都做不到,建议不要用了。每个算法与数据匹配的时候,都会对数据或者算法小修。如果你连小修都做不到的话,…

Louvain算法实现

谢谢平台提供-http://bjbsair.com/2020-04-13/tech-info/65263.html 社区查找找的算法 Louvain是一种无监督算法(执行前不需要输入社区数量或社区大小),分为两个阶段:模块化优化和社区聚集[1]。 第一步完成后,接下来…

Louvain 算法原理 及设计实现

模块度: Louvain算法是一种基于图数据的社区发现算法。原始论文为:《Fast unfolding of communities in large networks》。 算法的优化目标为最大化整个数据的模块度,模块度的计算如下: 其中m为图中边的总数量,k_i表示所有指向节点i的连边权重之和,k_j同理。A_{i,j} 表…

Louvain算法介绍

Louvain算法 一种基于模块度的图算法模型,与普通的基于模块度和模块度增益不同的是,该算法速度很快,而且对一些点多边少的图,进行聚类效果特别明显。 算法流程: 1、初始时将每个顶点当作一个社区,社区个数与…

Python社区发现—Louvain—networkx和community

社区 如果一张图是对一片区域的描述的话,将这张图划分为很多个子图。当子图之内满足关联性尽可能大,而子图之间关联性尽可能低时,这样的子图可以称之为一个社区。 社区发现算法 社区发现算法有很多,例如LPA,HANP&am…

关于在networkx中使用louvain算法报错的问题

module ‘networkx.algorithms.community’ has no attribute ‘louvain_communities’ Networkx是复杂网络科学中常用的python包,louvain也是常用的社团发现算法之一。在networkx的文档中也有描述。louvain_communities — NetworkX 2.8.5 documentationhttps://n…

【知识图谱】Louvain、LPA等5类经典社区发现算法 Python 实战

一、社区发现概述 根据图论,加权网络表示为𝐺(𝑉,𝐸,𝑊),未加权网络表示为𝐺(𝑉,𝐸),其中𝑉和𝐸表示节点和边的集合,&…

社区发现算法之——Louvain

1、什么是社区 如果一张图是对一片区域的描述的话,我们将这张图划分为很多个子图。当子图之内满足关联性尽可能大,而子图之间关联性尽可能低时,这样的子图我们可以称之为一个社区。 2、社区发现算法及评价标准 社区发现算法有很多&#xf…

python-louvain

安装 louvain当前最新版本:0.14 pip install python-louvain由于是处理社区的数据,这里还是安装networkx pip install networkx使用 不妨来运行下一个案例: import community as community_louvain import matplotlib.cm as cm import m…

louvain算法

简介 louvain算法由比利时鲁汶大学的 Vincent D.Blondel 等人于 2008 年提出,因其能以较高的效率计算出令人满意的社区识别结果,是近年来最多被提及和使用的社区识别算法。 Louvain算法是一种基于模块度(模块度越大则表明社区划分效果越好。Q值的…

社区发现算法——Louvain 算法

Louvain 算法 原始论文为:《Fast unfolding of communities in large networks》。 所以又被称为Fast unfolding算法。 Louvain算法是一种基于模块度的社区发现算法。其基本思想是网络中节点尝试遍历所有邻居的社区标签,并选择最大化模块度增量的社区…

Win10系统导入证书私钥

一、Win10系统导入证书私钥 二、直接点击“下一步”即可 三、输入私钥密码,“导入选项”按下图所示选择,点击“下一步” 四、默认选择“自动选择证书存储”,点击“下一步” 五、点击“完成”,弹出“导入成功”窗户,则私…

解决Win10无法安装没有数字签名驱动的问题

建议按如下步骤操作后,手动安装没有数字签名的驱动,亲测可以使用,之前也为没办法安装没有数字签名的驱动烦躁的不行,修改完启动项后,就安装成功了。 1.第一步打开开始菜单,选择设置 2.第二步打开更新和安全…