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

news2024/11/24 12:03:19

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

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

相关文章

Linux 设置中文语言环境(ubuntu)

1. 查看当前默认 2.下载中文语言包 apt-get install language-pack-zh-hans 3. 更新语言环境并重启 update-locale LANGzh_CN.UTF-8 sudo reboot

将 Cohere 与 Elasticsearch 结合使用

本教程中的说明向你展示了如何使用推理 API 使用 Cohere 计算嵌入并将其存储起来,以便在 Elasticsearch 中进行高效的向量或混合搜索。本教程将使用 Python Elasticsearch 客户端执行操作。 你将学习如何: 使用 Cohere 服务为文本嵌入创建推理端点&…

Java技术栈中的核心组件:Spring框架的魔力

Java作为一门成熟的编程语言,其生态系统拥有众多强大的组件和框架,其中Spring框架无疑是Java技术栈中最闪耀的明星之一。Spring框架为Java开发者提供了一套全面的编程和配置模型,极大地简化了企业级应用的开发流程。本文将探讨Spring框架的核…

RK3588芯片介绍

RK3588是一款低功耗、高性能处理器,适用于基于ARM的PC和边缘计算设备、个人移动互联网设备和其他数字多媒体应用,集成四核Cortex-A76和四核Cortex-A55,并分别带有NEON协处理器。支持8K视频编解码器。许多强大的嵌入式硬件引擎为高端应用提供了…

ATA-7025:高压放大器的原理是怎样的

高压放大器是一种电子器件,主要用于将输入信号的电压放大到更高的水平。它在许多领域中都有重要的应用,包括医学影像设备、科学研究装置、激光系统等。高压放大器的原理涉及到放大器的工作原理、电路结构、工作特性等多个方面。下面将从这些方面对高压放…

用心选择,用爱呵护《米小圈上学记》和孩子一起热爱校园生活

作为家长,我们时常为孩子的教育和成长担忧,尤其是在选择适合他们阅读的书籍时更是如此。一本好的儿童读物不仅要有趣,还应该能够激发孩子的想象力,培养他们的品格与勇气。在这个过程中,我发现了一本特别适合孩子们的书…

【Redis一】Redis配置与优化

目录 一.关系型数据库与非关系型数据库 1.关系型数据库 2.非关系型数据库 3.二者区别 4.非关系型数据库产生背景 5.NoSQL与SQL数据记录对比 关系型数据库 非关系型数据库 二.Redis相关概述 1.简介 2.五大数据类型 3.优缺点 3.1.优点 3.2.缺点 4.使用场景 5.采用…

服务治理怎么做:降级、熔断、全链路压测

服务降级的常见场景 系统负载过高:在高峰期或者流量激增的情况下,为了防止系统崩溃,可以暂时关闭或降低某些非关键服务的质量。 依赖服务故障:当某个依赖服务不可用时,通过服务降级可以提供替代方案或者简化的功能&am…

Java鲜花下单预约系统源码小程序源码

让美好触手可及 🌸一、开启鲜花新篇章 在繁忙的都市生活中,我们总是渴望那一抹清新与美好。鲜花,作为大自然的馈赠,总能给我们带来无尽的惊喜与愉悦。但你是否曾因为工作繁忙、时间紧张而错过了亲自挑选鲜花的机会?今…

基于Boost和平均电流控制方法的APFC电路设计

通过学习无线充电相关知识,为更快熟悉APFC工作原理,通过实验得以掌握 技术要求: 1)输入电压:AC 85V~265V; 2)输出电压:400V1%; 3)输出额定电流…

grpc学习golang版( 五、多proto文件示例)

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 文章目录 一、前言二、定义proto文件2.1 公共proto文件2.2 语音唤醒proto文件2.3 人脸唤醒proto文件2.4 生成go代码2.…

MapStruct-JavaBean映射工具使用指南

在软件开发中,对象之间的转换是一项常见的任务,尤其是在处理数据模型间的映射时。传统的做法,如使用JavaBeanUtils,可能会导致性能下降,而手动编写转换代码则效率低下且易出错。为了解决这些问题,MapStruct…

GPU_Gems-物理模型的水模拟

创建一个多网格的平面 void GraphicsWindowBase::RenderPlane() {constexpr int width 150;constexpr int depth 150;constexpr int vertNum width * depth;float length 60.f;if (quadVAO 0){float planeVert[vertNum * 5];float offsetX length / (width - 1.f);float…

低空经济再获新动能!沃飞长空完成新一轮数亿元融资

当下,作为中国"新质生产力"代表的低空经济正在成为新的发展“风口”,全国各地开足马力加速入场。 低空经济有多“火”?政策方面,据不完全统计,已有26个省份的政府工作报告对发展低空经济作出部署&#xff1…

Mysql需要知道的点

目录 一、数据库的三范式是什么 二、Mysql数据库引擎有哪些 三、说说Innodb与MYISAM的区别 四、数据库的事务 五、索引是什么 六、优化手段有哪些 七、简单说一说 drop,delete与truncate的区别 八、什么是视图 九、什么是内连接、左外连接、右外连接&#x…

mysql中in参数过多优化

优化方式概述 未优化前 SELECT * FROM rb_product rb where sku in(1022044,1009786)方案2示例 public static void main(String[] args) {//往list里面设置3000个值List<String> list new ArrayList<>();for (int i 0; i < 3000; i) {list.add(""…

知识图谱介绍及其应用领域分析

1.知识图谱 知识图谱(Knowledge Graph)乃一种精心设计的技术,旨在储存并整合交织的描述性知识信息。此技术通过构建由实体及其相互关系所组成的网络结构,实现对知识的有序组织与呈现。这些实体涵盖广泛的范畴,包括但不限于具体的物体、事件或抽象概念,它们经由多样化的关…

​​植物大战僵尸杂交版直装版v2.1 安卓版:全新策略塔防体验

《植物大战僵尸杂交版直装版》v2.1是由B站UP主“潜艇伟伟迷”精心制作的同人游戏&#xff0c;为策略塔防手游带来了全新的活力。游戏中引入了众多创新的杂交植物&#xff0c;例如结合了向日葵的阳光生成能力和豌豆射手的攻击特性的向日葵豌豆射手&#xff0c;以及拥有寒冰豌豆射…

2024平价蓝牙耳机推荐哪款?百元左右平价蓝牙耳机推荐

在2024的无线耳机市场中&#xff0c;蓝牙耳机已经成为了主流。无论是对于音乐爱好者还是普通消费者&#xff0c;选择一款音质出色、舒适度高且功能齐全的蓝牙耳机还是很重要的。一款好的蓝牙耳机不仅戴在耳朵上很舒服&#xff0c;而且音质还没有任何的杂音&#xff0c;但现在的…

uniapp字体ttf在小程序报错,解决方法

文章目录 导文解决方法1&#xff1a;把字体改成base64格式解决方法2&#xff1a;改成线上模式 导文 报错1&#xff1a; uniapp 小程序报错&#xff1a;app.js错误: Error: Module build failed (from ./node_modules/mini-css-extract-plugin/dist/loader.js): ModuleBuildErro…