风控图算法之社群发现算法(小数据集Python版)

风控图算法之社群发现算法(小数据集Python版)

在风险控制领域,图算法扮演着日益重要的角色。(这方面的资料有很多,不再赘述)
图算法在风控场景的应用
图分析方法在业务风控中的应用

特别是社群发现算法,它通过揭示数据间的复杂网络结构,帮助我们识别潜在的风险模式和欺诈行为。从社交网络中的群体行为分析到金融市场的异常交易检测,社群发现算法以其独特的视角,为我们提供了理解和预测风险的新方法。本文将简单介绍几种常用的社群发现算法及其实现代码,主要是针对小数据集的Python版本,后续将更新针对大数据的基于SparkGraphX的实现方案。

文章目录

  • 风控图算法之社群发现算法(小数据集Python版)
  • 一、强连通分量/弱连通分量
  • 二、Louvain
  • 三、LPA
  • 四、Leading Eigenvector(主导特征向量算法)
  • 五、Leiden Algorithm(莱顿算法)
  • 六、Walktrap Algorithm (漫步陷阱算法)
  • 七、Spectral Clustering (谱聚类算法)
  • 八、GN算法


一、强连通分量/弱连通分量

强连通分量(SCC)的原理
强连通分量是指在有向图中,对于分量内的任意两个顶点,都存在从一个顶点到另一个顶点的有向路径。换句话说,每个顶点都可以直接或间接地影响分量中的其他顶点。
SCC特点
每个分量内部的顶点都是相互连通的。
如果分量中的一个顶点发生变化,这种变化可以通过路径传播到分量中的所有其他顶点。

弱连通分量(WCC)的原理
弱连通分量是指在无向图中,对于分量内的任意两个顶点,都存在一条连接它们的无向路径。弱连通分量关注的是顶点之间的可达性,而不考虑路径的方向。
WCC特点
每个分量内部的顶点在无向图中是相互可达的。
弱连通分量不考虑路径的方向,因此它们在无向图中识别相互连接的顶点集合。

二、Louvain

Louvain算法是一种流行的社区发现算法,用于在图中检测社区结构。它是一种基于贪心优化的模块度最大化方法,特别适用于大型图的社区划分。
Louvain算法原理

# pip install python-louvain
import networkx as nx
import community as community_louvain# 建图流程参考连通分量中的写法,但多个权重列
# 构建图
G = nx.Graph()# 添加节点和边
for index, row in data.iterrows():G.add_edge(row['src'], row['dest'], weights=row['weights'])# 调整分辨率系数,默认为1,越大越倾向于划分出比较小的分区
partition = community_louvain.best_partition(G, weight='weights', random_state=21, resolution=1)

上面实现的是最为传统的Louvain实现方案,即模块度优化策略,实际应用中往往会对其进行改造,如修改模块度计算公式以期其能够更加符合实际需求。腾讯金融就曾将模块度改为模块密度,使得其划分的社群更加精细。
在这里插入图片描述

三、LPA

图算法中的标签传播算法(Label Propagation Algorithm, LPA)是一种基于图的社区发现方法,其核心原理是利用节点之间的标签传播来识别图中的社区结构。

LPA算法的原理:

  • 初始化:为图中的每个节点分配一个唯一的标签,这些标签通常是一个整数或一个特定的标识符。
  • 迭代传播:在迭代过程中,每个节点会检查其邻居节点的标签。节点更新自己的标签为邻居节点中最常见的- 标签。如果一个节点有多个邻居拥有相同的最常见标签,它会随机选择其中一个标签。
  • 收敛条件:当在一次迭代中没有节点改变自己的标签时,算法达到收敛,即社区结构稳定下来。
  • 社区识别:最终,拥有相同标签的节点被认为属于同一个社区。
    LPA原理和连通分量类似,但是相比连通分量,多了一个“少数服从多数”的过程,并且可以结合权重进行计算。

四、Leading Eigenvector(主导特征向量算法)

在图算法中,Leading Eigenvector算法(也称为最大特征向量算法)是一种基于图谱理论的社区发现方法。这种算法的核心思想是通过分析图的邻接矩阵或拉普拉斯矩阵的特征向量来揭示图中的社区结构。(复杂度较高,在数据量较大的场景下其实用的较少)

Leading Eigenvector算法的原理

  • 模块度矩阵:算法首先定义了一个模块度矩阵(Modularity Matrix),该矩阵用于衡量社区划分的质量。模块度矩阵通常是基于图的邻接矩阵计算得到的。
  • 特征值分解:接着,算法对模块度矩阵进行特征值分解,以找到其最大正特征值对应的特征向量。这个特征向量被称为Leading Eigenvector。
  • 社区划分:根据Leading Eigenvector的特征值,可以将图中的节点划分为不同的社区。节点的归属通常由特征向量中的元素正负来决定,正负不同的元素可以表示属于不同的社区。
  • 层次聚类:Leading Eigenvector算法可以用于层次聚类,通过重复上述过程,每次将一个社区压缩为一个节点,然后对新生成的图再次应用算法,从而揭示更高层次的社区结构。

五、Leiden Algorithm(莱顿算法)

Leiden算法是一种先进的社区发现算法,专为解决大规模网络中的社区划分问题而设计。它基于模块度优化的概念,但与Louvain算法等传统算法相比,Leiden算法提供了几个关键的改进和优势,特别是在风控领域的社群发现中。

Leiden算法的原理:

  • 局部智能移动(Local Smart Move, LSM):Leiden算法通过局部智能移动来加速搜索过程。与传统的Louvain算法不同,Leiden算法只对已修改节点的邻居进行下一次迭代,从而进行了有效的剪枝。
  • 保证社区连通性:Leiden算法确保了社区内部的节点是连通的,解决了Louvain算法中可能出现的“badly connected”问题,即社区内部节点不连通但可以通过外部节点作为桥梁连通的问题。
  • 分辨率参数(Resolution Parameter, gamma):Leiden算法支持分辨率参数,允许用户控制社区的数量和大小。当gamma值较大时,倾向于生成更多的小社区;而较小的gamma值则倾向于生成数量较少的大社区。(分辨率参数其实在gephi和networkx实现的Louvain算也已经支持,本质就是修改模块度计算公式,多乘以一个分辨率参数)

三阶段迭代过程:Leiden算法包括三个阶段:局部节点移动、分区细化和基于细化分区的网络聚合。这个过程迭代进行,直到收敛。

优化模块度:Leiden算法优化模块度,即社区内部连接的密度与随机网络模型相比的超出程度。算法的目标是最大化模块度,从而得到更紧密的社区结构。

    整体来看,Leiden算法和Louvain算法类似,但计算效率要优于Louvain算法,并且相比Louvain,倾向于划分出更加紧密的社群结构。

本文中提到的所有算法涉及的代码见(如果可以,麻烦关注一下~)风控图算法之社群发现算法(小数据集Python版)

六、Walktrap Algorithm (漫步陷阱算法)

Walktrap算法是一种基于随机游走的社区发现方法,由Pons和Latapy于2005年提出。

  • Walktrap算法基于随机游走的概念,通过随机游走的相似性来识别社区结构。
  • 它首先对网络进行随机游走,然后基于游走结果计算节点间的相似度,并使用这些相似度进行层次聚类。
  • Walktrap算法在最坏情况下的时间复杂度是O(mn2),空间复杂度是O(n2),在大多数情况下是O(n^2log n)时间和O(n^2)空间,其中m是边的数量,n是节点的数量。

Walktrap算法关键点:

  • 随机游走:算法通过在网络中执行随机游走来识别社区。在随机游走过程中,游走者在每一步都会从当前节点移动到一个随机选择的邻居节点。

  • 转移矩阵:随机游走由网络的转移矩阵(transition matrix)P驱动,该矩阵可以从网络的邻接矩阵A中得到。转移矩阵的元素Pij表示从节点i到节点j的转移概率。

  • 相似性度量:Walktrap算法定义了一种基于随机游走的顶点之间相似性的度量,称为“®”度量。这个度量方法计算效率高,能够很好地捕捉社区结构的信息。

  • 社区结构识别:通过计算节点对之间的相似性,算法可以识别出密集连接的子图,即社区。相似性较高的节点对更有可能属于同一个社区。

  • 层次聚类:Walktrap算法使用层次聚类方法,通过合并相似性最高的节点对来逐步构建社区结构,并形成树状图(dendrogram)表示的分层社区结构。

  • 模块度优化:算法通过优化模块度(modularity)来评估图划分成社区的质量,模块度是社区内部连接密度与随机网络模型相比的超出程度。

      Walktrap相比Louvain在具有明显社区结构的网络上表现更好,同时社群划分的也更加精细,更倾向于划分出较小的社群,但同时在大数据量下计算效率也较差。
    

本文中提到的所有算法涉及的代码见(如果可以,麻烦关注一下~)风控图算法之社群发现算法(小数据集Python版)

七、Spectral Clustering (谱聚类算法)

谱聚类(Spectral Clustering)是一种基于图谱理论的社区发现算法,它利用图的特征向量和特征值来识别社区结构。谱聚类的核心思想是通过图的拉普拉斯矩阵(Laplacian Matrix)进行特征分解,进而实现数据的聚类。

谱聚类算法的原理

本文中提到的所有算法涉及的代码见(如果可以,麻烦关注一下~)风控图算法之社群发现算法(小数据集Python版)

八、GN算法

Girvan-Newman (GN) 算法是一种基于边介数中心性的社群发现算法,由 Michelle Girvan 和 Mark Newman 于2002年提出。该算法的主要思想是识别并移除连接不同社群的“桥梁”边,这些边的介数较高。通过不断移除这些边,图逐渐分解成多个社群。
GN算法原理

本文中提到的所有算法涉及的代码见(如果可以,麻烦关注一下~)风控图算法之社群发现算法(小数据集Python版)
欢迎关注公众号~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/38097.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于pytorch实现的 MobileViT 的图像识别(迁移学习)

1、介绍 MobileViT 轻量级的分类识别网络,结合了CNN卷积和Transformer 混合的网络架构 关于更多介绍可以自行百度,本文通过pytorchpython进行实现 更多基础的图像分类网络,参考:图像分类_听风吹等浪起的博客-CSDN博客 2、相关代…

SimpleService 一个简单的Windows Service定时服务

SimpleService 介绍 一个简单的Windows Service定时服务 SimpleService: 一个简单的Windows Service定时服务 使用说明

kimi AI,文生流程图,一句话kimi当场出图

kimi AI善于读长文、搜网页,主打功能包括整理资料、解读文件、辅助编程、文案写作等。 今天我们就让kimi帮我们一键生成流程图,再也不用自己画了: 不看广告看疗效: 告诉kimi使用Mermaid直接生成流程图,kimi直接生成…

AI是如何与快充技术结合的?

针对AI技术在快充领域的运用,我们可以进一步深入探讨AI如何与快充技术结合,提升充电效率和用户体验。以下是一些具体的AI技术在快充领域的应用场景: 一、智能充电算法 学习充电模式:AI算法可以学习用户的充电习惯,比…

容器技术-docker4

一、docker资源限制 在使用 docker 运行容器时,一台主机上可能会运行几百个容器,这些容器虽然互相隔离,但是底层却使用着相同的 CPU、内存和磁盘资源。如果不对容器使用的资源进行限制,那么容器之间会互相影响,小的来说…

gin 服务端无法使用sse流式nginx配置

我在本地使用 gin 可以流式的将大模型数据传递给前端。但是当我部署到服务器中时,会阻塞一段时间,然后显示一大段文本。 起初我怀疑是gin 没有及时将数据刷到管道中,但是经过测试,还是会阻塞。 c.Writer.(http.Flusher).Flush()最…

(超详细)数据结构——“栈”的深度解析

前言: 在前几章我们介绍了线性表的基本概念,也讲解了包括顺序表,单链表,双向链表等线性表,相信大家已经对线性表比较熟悉了,今天我们要实现线性表的另一种结构——栈。 1.栈的概念 栈:一种特殊…

【Docker】存储数据卷

目录 1、挂载数据卷到容器里 2、查询挂载文件 3、容器与主机之间映射共享卷 4、三个容器之间使用共享卷 5、卷数据的备份与恢复 5.1 备份 5.2 恢复 1、挂载数据卷到容器里 docker run -itd --name test02 -v /data nginx docker exec -it test02 bashls / docker inspe…

解决IDEA的Web项目右键无法创建Servlet问题

右键新建没有servlet? 在pom.xml文件中需要导入servlet依赖,很简单的,别担心,就20秒解决 看我操作!!! 1. 找到自动生成的pom.xml文件 只要你创建了maven项目,就会自动生成pom.xml文件&#xf…

qiankun微前端:qiankun+vite+vue3+ts(未完待续..)

目录 什么是微前端 目前现有的微前端 好处 使用 子应用的页面在主应用里显示 什么是微前端 微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略。 我的理解就是将一个大型的前端应用拆分成多个模块,每个微前端模块可以由…

Linux基础篇——目录结构

基本介绍 Linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录"/",然后在根目录下再创建其他的目录 在Linux中,有一句经典的话:在Linux世界里,一切皆文件 Linux中根目录下的目录 具体的…

木各力“GERRI”被“GREE”格力无效宣告成功

近日“GERRI”被“GREE”格力无效宣告成功,“GERRI”和“GREE”近似不,如果很近似当初就不会通过初审和下商标注册证,但是如果涉及知名商标和驰名商标,人家就可以异议和无效。 “GERRI”在被无效宣告时,引用了6个相关的…

深入剖析C++多态的实现与原理-详解 (三万字)

100编程书屋_孔夫子旧书网 目录 一、多态基础 虚函数 虚函数的继承虚类/虚基类重写/覆盖 条件:概念:多态的条件 其他的多态行为 多态中子类可以不写virtual协变 代码举例继承遗留问题解决 析构函数 具体解决方式:题目1 答案:解析:题目2 答案:C11 override和final final 功能1…

web渗透-反序列化漏洞

一、简介 就是把一个对象变成可以传输的字符串,目的就是为了方便传输。假设,我们写了一个class,这个class里面存有一些变量。当这个class被实例化了之后,在使用过程中里面的一些变量值发生了改变。以后在某些时候还会用到这个变量&#xff0…

ctfshow sqli-libs web541--web551

web541 and和or 被替换为空格 # 还有 1 也是不能生效的?id-1 union select 1,2,3-- 双写绕过 ?id-1 union select 1,(select group_concat(table_name) from infoorrmation_schema.tables where table_schemactfshow),3 -- flags?id-1 union select 1,(select group_con…

【Linux】Linux系统配置,linux的交互方式

1.Linux系统环境安装 有三种方式 裸机安装或者双系统 -- 不推荐虚拟机安装 --- 不推荐云服务器/安装简单, 维护成本低——推荐, 未来学习效果好 我们借助云服务器 云服务器(Elastic Compute Service,ECS)的标准定义…

以太网交换机原理

没有配置,比较枯燥,二可以认识线缆, 三比较重要,慢慢理解,事半功倍。 各位老少爷们,在下给大家说段以太网交换机原理,说得不好大家多多包涵,说得好呢,大家叫个好&#x…

【面试系列】数据分析师高频面试题及详细解答

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、…

使用slenium对不同元素进行定位实战篇~

单选框Radio定位: 单选框只能点击一个,并且点击之后并不会被取消,而多选框,能够点击多个,并且点击之后可以取消 import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; imp…

FastAPI教程III

本文参考FastAPI教程https://fastapi.tiangolo.com/zh/tutorial 这部分暂无需求的没有记录,仅放置标题。 依赖项 安全性 中间件 你可以向FastAPI应用添加中间件。 ”中间件“是一个函数,它在每个请求被特定的路径操作处理之前,以及在每个…