community 计算模块度_【转载】金融风控反欺诈之图算法

随着量化宽松和经济复苏,商业银行消费金融进一步发展,在移动支付、大数据、人工智能等技术快速发展的背景下,消费金融领域开展了诸多创新,金融借贷业务发展迅速。

先介绍下金融借贷业务流程:用户前来申请借贷,经过欺诈识别后,把欺诈团伙和主观欺诈的个人拒绝掉,然后对通过的人进行信用评估,最后根据额度模型,算出利润最大化时放款金额。

举个真实的团队欺诈的例子。宜人贷在他们的财报中公布的,他们被一个团伙成功撸走了2000多单,当时宜人贷的件均4w, 一下损失了8000w!

那么如何防范这种风险呢。这就是今天要分享的图算法。图可以将这些一个个有良好记录的个体关联起来,一网打尽。

Graph简介

G=(V,E)G=(V,E)V:vertex set

E:edge set (有向,无向,有权重和没有权重)举例,两个人之间的联系, A给B买了东西,A和B之间的通话次数时长多于A和C之间。度中心性(Degree Centrality) - 表示连接到某节点的边数。在有向图中,我们可以有2个度中心性度量:流入和流出。一个节点的节点度越大就意味着该节点在网络中就越重要。

接近中心性(Closeness Centrality) - 从某节点到所有其他节点的最短路径的平均长度。反映在网络中某一节点与其他节点之间的接近程度。

介中心性(Betweenness Centrality) - 某节点在多少对节点的最短路径上。介数中心性是比较能体现节点在图中桥梁作用的中心性度量方法。介数反映了相应的节点或者边在整个网络中的作用和影响力,具有很强的现实意义。例如,在交通网络中,介数较高的道路拥挤的概率很大;在电力网络中,介数较高的输电线路和节点容易发生危险。

社团发现算法一般有:最小割, 正则化割:通过计算图的最小割,即将网络划分为预定的分组数,并使连接各分组的边的条数最少。

非负矩阵分解:基本原理是将原始矩阵分解得到社区指示矩阵和基矩阵

基于模块度的社区划分

基于节点相似性的社区划分最小割算法广泛应用在分布式计算的负载均衡中,对集群节点的分组有利于减少不相关节点之间的通信。然而由于该算法限定了网络最终分组的个数,而不能通过算法“发现”节点间的内在联系并自然地构成若干个社区,因此最小割算法应用较为局限。

本文主要分享这两类的主要算法,基于模块度的 louvain和基于信息熵infomap,基于相似度的node2vec

模块度(Modularity)公式及简化

优化目标:一般认为社团内部的点之间的连接相对稠密,而不同社团的点之间的连接相对稀疏。

所以模块度也可以理解是社区内部边的权重减去所有与社区节点相连的边的权重和,对无向图更好理解,即社区内部边的度数(内部的连线数)减去社区内节点的总度数。

模块度公式的解释

节点i和节点j之间边的权重&#

### 回答1: Louvain算法是一种用于社区发现的图形分割算法,它的目标是将网络划分为具有较高内部连通性和较低相互连接的社区。在这个过程中,节点和社区之间建立了一个层次结构,从而使得社区级别的信息可视化和分析变得更加容易。 在Matlab中,可以使用Community_BGLL_M包来实现Louvain算法。该包是基于Boost Graph Library (BGL) 开发的,并提供了一组函数来加载、处理和可视化网络数据,并实现Louvain算法。 以下是使用Community_BGLL_M包实现Louvain算法的一些步骤: 1. 加载网络数据:Community_BGLL_M提供了loadNetwork函数来加载网络数据。例如,可以使用以下代码加载一个名为"network.txt"的网络数据文件。 ``` network = loadNetwork('network.txt'); ``` 2. 运行Louvain算法:可以使用blLouvain函数来运行Louvain算法,并得到社区分配结果。例如,可以使用以下代码运行Louvain算法,并将结果保存在一个名为"communities.txt"的文件中。 ``` communities = blLouvain(network); save('communities.txt', 'communities', '-ascii'); ``` 3. 可视化社区结构:Community_BGLL_M提供了plotCommunity函数来可视化社区结构。例如,可以使用以下代码将社区结构可视化并保存为一个名为"community_plot.png"的文件。 ``` plotCommunity(network, communities); saveas(gcf, 'community_plot.png'); ``` 需要注意的是,Community_BGLL_M包还提供了其他一些函数来处理网络数据和社区分配结果,可以根据具体需求进行使用。 ### 回答2: Louvain算法是一种用于社区发现的图聚类算法。它通过不断优化网络中的模块指标,将网络划分为多个社区。 Matlab是一种常用的科学计算和数据可视化软件,也支持Louvain算法的实现。 在Matlab中,可以使用Community_BGLL_M这个函数来执行Louvain算法Community_BGLL_M函数是基于图论库BGLL_M的实现,可以用于在Matlab中进行图聚类分析。它可以根据输入的网络图和相应的权重信息,自动进行社区划分,并返回每个节点所属的社区编号。 使用Community_BGLL_M函数进行社区发现的步骤大致如下: 1. 首先,准备好输入的网络图,可以使用Matlab提供的图论库或者其他第三方库进行创建。 2. 然后,根据网络图的节点之间的连接关系,计算出相应的权重信息。 3. 调用Community_BGLL_M函数,将网络图和权重信息作为参数传入。 4. 函数会自动执行Louvain算法,对网络图进行社区划分,并返回每个节点所属的社区编号。 5. 根据返回的社区编号,可以对网络中的节点进行可视化,以便更直观地观察社区结构。 总之,Louvain算法是一种用于社区发现的重要方法,Matlab提供了Community_BGLL_M函数来方便用户在Matlab环境中进行社区划分分析。通过使用这个函数,可以快速地对网络图进行社区发现,并进行进一步的研究和分析。 ### 回答3: louvain算法是一种用于社区检测的图形分割算法,它通过最大化模块来划分网络中的节点。在Matlab中,可以使用Community_BGLL_M工具箱来实现louvain算法Community_BGLL_M是一个基于Matlab的社区检测算法工具箱,其中包含了多种社区检测算法,包括louvain算法。使用Community_BGLL_M工具箱,我们可以通过以下步骤实现louvain算法: 1. 首先,我们需要准备网络数据。可以将网络表示为一个邻接矩阵或者边列表的形式。邻接矩阵表示网络中节点之间的连接关系,边列表则表示网络中的边及其权重。 2. 接下来,我们需要将数据导入Matlab环境中。可以使用Matlab内置的读取矩阵或者读取文本文件的函数将数据加载到工作空间中。 3. 在数据加载完成后,我们可以调用Community_BGLL_M工具箱中的函数来运行louvain算法。可以使用命令如下:`[S, Q] = louvain(A)`。其中A表示网络的邻接矩阵,S表示节点与社区的对应关系,Q表示模块的值。 4. 运行算法后,我们可以得到每个节点所属的社区标签以及网络的模块值。社区标签可以用来表示节点所属的社区,模块值可以用来评估划分的质量。 通过以上步骤,我们可以使用Community_BGLL_M工具箱中的louvain算法实现网络的社区检测。这是一种简单且高效的方法,可以帮助我们理解和研究复杂网络中的社区结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值