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

devtools/2024/10/17 22:16:58/

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

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

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

文章目录

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


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

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

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

二、Louvain

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

python"># 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.ppmy.cn/devtools/56481.html

相关文章

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

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

横穿自动驾驶

如果有一条线,可以穿起来所有自动驾驶的核心模块,那么我感觉它就是最优化,选择优化变量、构造优化问题、求解优化问题,这几个步骤贯穿了自动驾驶的始终。 先从我的自身接触顺序写起。最开始做个一点深度学习,那还是20…

Go interface{}类型转换

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

深入理解链地址法(Separate Chaining)在哈希表中的应用

在计算机科学中,哈希表是一种常用的数据结构,用于在平均 O(1) 的时间复杂度下进行插入、删除和查找操作。哈希表通过哈希函数将键映射到表中的位置,但当多个键映射到相同位置时,就会产生哈希冲突。解决哈希冲突的常用方法之一是链…

探索 TensorFlow 模型的秘密:TensorBoard 详解与实战

简介 TensorBoard 是 TensorFlow 提供的可视化工具,帮助开发者监控和调试机器学习模型。它提供了多种功能,包括查看损失和精度曲线、可视化计算图、检查数据分布等。下面将介绍如何使用 TensorBoard。 1. 安装 TensorBoard 如果尚未安装 TensorBoard&…

【LinuxC语言】UDP数据广播

文章目录 前言广播是什么广播的类型UDP广播实例——DHCPDHCP是什么工作图setsockopt函数getsockopt函数示例代码总结前言 在计算机网络中,UDP(用户数据报协议)是一种无连接的传输层协议,它允许应用程序快速地发送短的消息或数据报。UDP的一个重要特性是它支持数据的广播发…

八爪鱼现金流-031,宽带到期记一笔负债

到期了,新弄的网络,记录一下负债包。 八爪鱼现金流 八爪鱼

【C++】哈希表

哈希表 1. 关联式容器的对比2. 哈希结构2.1 概念2.2 哈希冲突2.3 哈希函数2.3.1 哈希函数设计原则2.3.2 常见的哈希函数 2.4 解决哈希冲突的方法2.4.1 闭散列2.4.1.1 线性探测2.4.1.2 二次探测 2.4.2 开散列2.4.3 负载因子2.4.4 开散列与闭散列的比较 2.5 模拟实现2.5.1 非整形…