风控图算法之社群发现算法(小数据集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.mfbz.cn/a/749292.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件测试必看!5分钟掌握sql查询的聚合函数

数据查询操作之排序 语法格式: select * from 表名 order by 字段名 asc| desc 重点: 1 字段名可以有多个,如果字段名1 相同,再按照字段名2排序 2 默认情况下按照从小到大去排列 3 asc 就是从小到大排列 desc 从大到小排列 …

每个 Node.js 开发人员都应该知道的13个库(上)

1. Sequelize Sequelize是一个基于promise的Node.js对象关系映射器(ORM),它使开发人员更容易使用关系数据库。 支持PostgreSQL,MySQL,MariaDB,SQLite和更多数据库。 Sequelize使用JavaScript对象对数据库…

二叉树——二叉树的构建及遍历

目录 1:题目分析和思路 1:分析 2:思路 2:代码实现及分析 1:构建结构体 2:主函数 2:创建二叉树 3:中序遍历 3:总代码 1:题目分析和思路 1&#xff1…

Web应用安全测试-专项漏洞(一)

Web应用安全测试-专项漏洞(一) 专项漏洞部分注重测试方法论,每个专项仅列举一个例子。实际测试过程中,需视情况而定。 文章目录 Web应用安全测试-专项漏洞(一)Web组件(SSL/WebDAV)漏…

力扣爆刷第155天之TOP100五连刷41-45(下一个排列、正序数组中位数、归并排序链表)

力扣爆刷第155天之TOP100五连刷41-45(下一个排列、正序数组中位数、归并排序链表) 文章目录 力扣爆刷第155天之TOP100五连刷41-45(下一个排列、正序数组中位数、归并排序链表)一、31. 下一个排列二、4. 寻找两个正序数组的中位数三…

明明设置允许跨域,为什么还会出现跨域请求的问题

一、问题 在微服务项目中,明明已经设置允许跨域访问: 为什么还会出现跨域请求问题? 二、为什么 仔细查看错误提示信息:When allowCredentials is true, allowedOrigins cannot contain the special value "*" since t…

单元测试,一直转圈,既不报错也不运行结束(ssm junit4 test )

修改dataSource.properties文件 然后把mysql.version的版本修改为8.x.x 如果没有效果,再看看连接数据库的用户名和密码是否正确,一般是连接数据库出了错,单元测试才回一直转圈,我是检查了一上午才发现,用户名错了。 检…

性能测试 —— Jmeter日志查看与分析

一、Jmeter日志概览 Jmeter日志文件保存在bin目录中,名称为jmeter.log。我们可以在面板中直接察看日志,点击右上角黄色标志物可以打开日志面板,再次点击收起 另外,Jmeter可以很方便地设置日志输出级别: 通过这种方式修…

工业制造业怎样进行进行智能、高效的机台文件管控?

对于工业制造业而言,机台是极为关键的基础设施,是正常生产经营的前提。工业制造业的机台包括很多种类,数控机床、防静电工作台、旋转工作台、机床工作台、车床等。 工业制造业机台产生的文件类型也有很多种类,如: 工艺…

NUC 14 Pro+:超越想象,夏日必备神机

夏日最让打工人意难平的大概是呼呼作响的主机风扇,即使在凉爽的空调房中,轰响的主机也让人心浮气躁。要怎样才能与它和平共处?它怎么就不明白,安安静静的陪伴真的很重要! 这时候NUC 14 Pro 就是你最佳的伙伴 &#xff…

【专业性强】地球科学SCI期刊,中科院2区,学术影响力大

一、期刊名称 GIScience & Remote Sensing 二、期刊简介概况 期刊类型:SCI 学科领域:地球科学 影响因子:6.7 中科院分区:2区 三、期刊征稿范围 GIScience & Remote Sensing是一本完全开放获取的期刊,发表…

音视频开发30 FFmpeg 视频编码- 流程以及重要API,H264编码原理说明,该章节使用h264编码说明

一.H264编码原理 1 视频为什么需要进行编码压缩 ◼ 一张为 720x480 的图像,用 YUV420P 的格式来表示,其大小为: 720*480*1.5 约等于 0.5MB 。 ◼ 如果是 25 帧, 10 分钟的数据量 0.5M*10*60*25 7500MB -> 7GB 多 ◼ …

RestTemplate修改默认转换器,使用FastJsonConverter

问题描述: 在使用RestTemplate发送POST请求时,发现发送的数据并未按配置的JSONField转换,导致服务方一直收不到参数 排查过程: 将itemList改成Items传输即可 原因分析: RestTemplate有默认的转换器,所以…

引入基于图的增强框架实现大模型的可控文本生成

尽管LLMs能够生成丰富多样的文本,但它们在生成特定属性文本时仍面临挑战。例如,如何确保生成的文本不仅语言流畅、语义准确,同时还具有所需的情感色彩或避免包含不当内容,是一个亟待解决的问题。传统的可控文本生成(CT…

2. jenkins发布java项目

jenkins发布java项目 一、环境描述二、部署tomcat业务服务器三、部署git服务器,上传测试代码1、部署git服务器2、上传测试代码 四、jenkins对接组件1、安装必要的插件2、对接git客户端3、对接maven工具4、配置maven需要的jdk5、配置gitlab服务器的连接6、在jenkins上…

windows下载jdk并安装步骤(保姆级教程)

一、下载jdk 下载地址: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 二、双击下载好的jdk 更改安装目录然后点击下一步 然后会弹出jre的安装,需要选择路径(注意:这里的路径必须跟前面的jdk在…

如何在Java中使用Levenshtein距离实现字符串相似度匹配

在许多应用中,我们需要根据用户输入的问题找到最匹配的已知问题。Levenshtein距离(编辑距离)是一个强大的工具,可以帮助我们衡量两个字符串之间的差异,并进一步计算它们的相似度。本文将使用一个具体的例子来展示如何在…

ESXI存储设备已经分区,无法创建数据存储。

问题:ESXi 存储设备已经分区完成,并且有 VMFS 文件系统,无法创建数据存储,选项是灰色。 解决办法:通过命令行工具 在现有的 VMFS 分区上创建数据存储。 在现有的 VMFS 分区上创建数据存储 1.ESXI开SSH2.windows自带CMD登入ESXI。&…

创意学生木工工具——木工锯床

开展创意木工课程丰富了学校的课程多样性,强化了实践教育,并实现了跨学科的融合,在教育理念方面,创意木工课程强调了学生的主体地位,注重了学生的全面发展,并倡导了实践育人的理念,培养学生的综…

NGINX配置web文件服务

一、需求描述 系统需要提供文件(pdf、图片)等上传后支持预览功能。 二、实现方式 2.1 文件权限配置 chmod arwx -R public/chmod 是更改文件权限的命令。-R 是递归选项,表示更改目录及其所有子目录和文件的权限。arwx 是权限设置&#xf…