社交网络分析在反欺诈中的应用
在社交网络分析中,不同的方法和算法可以帮助我们检测和预防欺诈行为。下面将详细介绍基于分数的方法和基于聚类的方法。
基于分数的方法
在社交网络分析中,通过查询可以发现一些有价值的信息。例如,查询结果显示列表中的人大多高度相关,他们要么是著名书籍的作者,要么为机器学习领域的许多开源项目做出贡献。在这种情况下,介数中心性比紧密中心性更能捕捉网络中人物的重要性,它代表的是一个人在整个网络中的影响力,而非仅仅在其朋友圈内的影响力。
练习 :在之前的查询中,仅考虑机器学习开发者来分析他们的影响力。现在可以运行查询来搜索顶级网页开发者,同时考虑介数中心性和紧密中心性,然后在 GitHub 上查看他们的资料。
接下来重点介绍 PageRank 算法,它是一种强大的集体推理算法。PageRank 是谷歌著名搜索引擎对网页进行排名的基础算法,如今也是计算声望最流行的技术之一。它为图中的每个节点 j 分配一个声望分数。直观地说,如果一个节点与许多重要节点相连,那么该节点的声望分数就会更高。在欺诈场景中,情况则相反。如果一个节点与许多著名的欺诈者(在半标记网络中被标记为欺诈者的节点)相连,那么该节点参与欺诈(无论是作为实施者还是受害者)的可能性就很高。
我们从一个半标记网络开始,其中有一些标记为合法和欺诈的节点,以及许多未标记的节点。假设节点 G 和 D 是欺诈者,我们来分析节点 A 是欺诈者或欺诈受害者的概率。
首先,假设节点是网页,冲浪者只能通过当前页面上的链接浏览其他页面。以网页 A 为例,它有七个入链。如果冲浪者当前正在查看网页 B,那么他接下来访问网页 A 的概率是 1/3(即 33%),因为网页 B 有三个指向其他网页的链接,其中一个是网页 A。同样,如果冲浪者当前正在查看网页 C 或 D,那么在这两种情况下,他们接下来访问网页 A 的概率都是 50%。网页被访问的概率称为该网页的页面排名。要确定网页 A 的页面排名,需要知道指向它的网页 B、C、D、F、G、L 和 O 的页面排名。
这个过程就是集体推理:一个网页的排名取决于指向它的其他网页的排名,其中一个网页排名的变化可能会以级联方式影响其他所有网页的排名。具体来说,重要的网页(出现在搜索结果顶部的网页)有许多来自其他重要网页的入链。以下是计算任何给定网页页面排名的基本方法:
- 指向该页面的网页的排名
- 该页面所链接的网页的出度
节点的初始页面排名值设置为随机冲浪者从该节点开始导航的概率,即 1 / <页面数量>。然后迭代直到满足某个停止条件,通常是每次迭代中排名的变化变得微不足道,或者达到某个定义的最大迭代次数。
在每次迭代 i 中,节点 A 的页面排名值 PR(i,A) 计算如下:
[PR(i,A)=\sum_{n\in N_A}\frac{PR(i - 1,n)}{outdegree(n)}]
其中:
- PR(i - 1,n) 是节点 n 在前一次迭代中的页面排名值。
- (N_A) 是 A 的所有邻居。
PR(0,n) 是每个节点的初始值,表示随机冲浪者从该节点开始导航的概率。然而,假设随机冲浪者仅通过当前网页上的随机链接访问页面并不现实,因为冲浪者的行为更随机,他们可能会随机访问其他页面。因此,更复杂的 PageRank 算法必须包含随机冲浪者模型,该模型假设冲浪者经常会感到厌烦并随意跳转到另一个网页。
假设 α 是冲浪者跟随当前网页上链接的概率,(1 - α) 是冲浪者访问随机其他网页的概率,更高级的公式为:
[PR(i,A)=\alpha\sum_{n\in N_A}\frac{PR(i - 1,n)}{outdegree(n)}+(1 - \alpha)e_A]
其中 (1 - α) 是重启概率,(e_A) 是网页 A 的重启值,通常在所有网页中均匀分布。
Page 等人在这个高级版本的基础上,通过将搜索个性化以适应用户,对 PageRank 算法进行了扩展。这种个性化是通过将重启值从所有节点的均匀分布改为适合用户搜索兴趣的版本来实现的。页面 X 的重启值越高,表明用户对该页面的兴趣越高。
这个最终版本非常适合推断欺诈者对未标记节点的影响(即我们不知道该节点所代表的人是欺诈者还是欺诈受害者)。在这种情况下,PageRank 算法可以看作是节点影响力通过标记网络的传播。我们通过重启值将欺诈注入网络:
[e_A=\begin{cases}0, & \text{如果 A 不是欺诈节点}\\frac{1}{\text{欺诈节点的数量}}, & \text{如果 A 是欺诈节点}\end{cases}]
在页面排名计算结束后,排名最高的节点是受欺诈影响最大的节点。可以将这些想法应用到图数据库中。有很多个性化 PageRank 的实现,Neo4j 也有自己的实现。以下查询计算所有用户的个性化页面排名,将机器学习开发者作为起始值(在源节点中指定):
MATCH (mlUser:MLDeveloper)
with collect(mlUser) as mlUsers #A
CALL gds.pageRank.write({
nodeProjection: 'GitHubUser', #B
relationshipProjection: 'FOLLOWS',
maxIterations: 20,
dampingFactor: 0.85,
sourceNodes: mlUsers,
writeConcurrency: 4,
writeProperty: 'pagerank'
})
YIELD ranIterations, didConverge
RETURN ranIterations, didConverge
#A 计算起始节点的列表,因为我们想考虑这些节点对网络的影响。
#B 页面排名是在所有 GitHub 用户上计算的
在这个查询中,
dampingFactor
就是我们的 α,
sourceNodes
是用于重启向量的节点。计算出分数后,可以使用以下查询按页面排名值从高到低对网页开发者进行排序:
MATCH (user:GitHubUser)
RETURN user.name, user.pagerank, labels(user)
ORDER BY user.pagerank desc
LIMIT 20
前一个查询返回的列表顶部是最有可能受到机器学习开发者影响的网页开发者。如果想进一步研究,可以使用以下查询计算特定机器学习开发者的追随者的页面排名值之和:
MATCH (user:GitHubUser {name: "dalinhuang99"})<-[:FOLLOWS]-(follower)
WITH user, follower, follower.machine_learning as machine_learning,
CASE follower.machine_learning = 0
WHEN true THEN 0
WHEN false THEN follower.pagerank
END as mlpagerank,
CASE follower.machine_learning = 1
WHEN true THEN 0
WHEN false THEN follower.pagerank
END as webpagerank
RETURN user.pagerank, count(follower), sum(machine_learning),
sum(mlpagerank), sum(webpagerank)
这个查询结果显示,该用户的 7000 多个追随者中有 1000 个是机器学习开发者,但这些开发者的 PageRank 值之和高于网页开发者的排名之和。这意味着机器学习开发者对该用户的影响大于网页开发者,证明 PageRank 算法可用于确定网络对某个主体的影响。回到欺诈场景,PageRank 值可以衡量节点(人)受欺诈影响(参与欺诈或成为欺诈目标)的概率。
练习 :再次运行最后两个查询,将机器学习开发者和网页开发者互换,然后探索结果。
基于聚类的方法
社交网络是通过网络中的链接揭示人与人之间关系的强大工具。之前的分析主要集中在逐个节点提取或计算特征,大多数情况下考虑的是直接连接的相邻节点或通过每个节点的路径。在这类分析中,每个节点都是单独考虑的,重点关注其在网络中的角色和紧密连接集。得到的指标很有用,但要全面理解社交网络对节点的影响(或者相反,节点对网络的影响),将节点视为一组节点的一部分而不是单独考虑是很重要的。
由于网络的动态性,行为相同或有相同观点、信仰的社区(网络内的节点组)可能比单个个体对网络有更大的影响,并且在信息交换方面更有影响力。在欺诈场景中,一群一起工作的欺诈者可能比单独行动的欺诈者有更大的影响力。
在图论中,社区是网络中的一个子图或集群,其节点之间的连接比与网络中任何其他随机子图中的节点之间的连接更强、更密集。社区的所有成员都可以通过同一社区的其他成员轻松到达(连通性)。同时,我们期望属于某个社区的节点与该社区的其他成员建立链接的概率高于与不属于该社区的节点建立链接的概率(局部密度)。因此,可以将社区更正式地定义为网络中局部密集连接的子图。例如,一个图可以被划分为三个社区,每个社区内的节点之间有很多连接,而与社区外的连接很少或没有。
欺诈者通常会作为一个团体一起工作,分享、强化和提供关于如何实施欺诈的互补想法。此外,属于欺诈者团体也会影响人们的行为,增加他们参与欺诈的风险(同伴压力起作用)。在这种情况下,社区挖掘旨在识别网络中的欺诈者团体,以确定比图的其他部分更可能发生欺诈的子图。这些信息有助于检测隐藏的欺诈结构。考虑到人们受整个社区影响而实施欺诈的可能性比受单个欺诈者影响的可能性更大,社区挖掘也是识别可能被卷入欺诈活动的人的有用方法,从而遏制欺诈团体的增长。
社区是识别共同行为模式的强大机制,即使节点在经典社交网络中没有连接。例如,一个二分图中节点是商店和信用卡,商店通过欺诈交易与信用卡相连。欺诈者倾向于坚持相同的行为模式,他们可能会反复在同一家商店使用被盗信用卡,可能是因为这些商店的员工参与了欺诈,也可能是因为之前在那里的尝试成功了。可以将这个二分图投影到一个商店图中,如果两个节点在二分图表示中与同一个信用卡节点相连,则它们在商店图中也相连。这样可以很容易地发现一些可疑的商店社区,这些社区经常被欺诈者使用。发现这些社区表明,一些商店比其他商店更容易成为欺诈的受害者,这也可能表明这些商店本身可能参与了欺诈,或者需要加强安全措施。
信用卡欺诈的一个已知模式是,被盗信用卡会在许多商店进行小额交易。在这种情况下,社区挖掘可以立即揭示哪些商店经常与同一张被盗信用卡相关联,而在单个商店层面实施欺诈检测实践则无法做到这一点。在一张被盗信用卡在多个这样的商店使用或在某些商店多次使用的情况下,可以将其作为信用卡信息被盗的相关信号。在许多应用和场景中,通过社交网络分析发现这样的社区有助于检测欺诈结构或遏制欺诈团伙。
社区挖掘的一种常用技术是图划分,也称为节点聚类。其目的是通过优化社区内和社区间边的比例,将图划分为预定数量的集群。可以使用不同的算法来确定划分图的最佳方法,其中有两种相反的方法:
-
自上而下或分裂法
:也称为划分或分裂,从所有节点被视为一个单一集群的初始情况开始。这个集群会迭代地分裂成多个部分,试图最小化集群间的连通性,直到达到一个稳定点,此时无法再获得显著的改进。
-
自下而上或聚合法
:操作方式相反,从将每个节点视为一个独立的集群开始,然后递归地尝试将最相似或连接最紧密的节点合并成集群。
为了达到我们的目的,将考虑第二种方法,它也适用于检测密集(高度互连)区域。具体来说,接下来的例子中使用的算法是 Louvain 方法。该方法通常用于在大型网络中检测社区,它会最大化每个社区的模块化分数,其中模块化量化了节点分配到社区的质量。这意味着评估社区内节点的连接密度与随机网络中节点连接密度的差异。Louvain 算法是一种分层聚类算法,它会递归地将社区合并成一个单一节点,并在压缩图上执行模块化聚类。
通常使用的是 Lu 等人在 2015 年引入的并行版本,该版本引入了一些启发式方法来打破内部顺序障碍。如果不是特别想自己实现这个算法,就不需要担心其实现细节,因为它在 Neo4j 和其他库中都可用。以下查询将在示例网络上执行 Louvain 社区检测:
CALL gds.louvain.write({
nodeProjection: 'GitHubUser',
relationshipProjection: {
FOLLOWS: {
type: 'FOLLOWS',
orientation: 'undirected',
aggregation: 'NONE'
}
},
writeProperty: 'community'
}) YIELD nodePropertiesWritten, communityCount, modularity
RETURN nodePropertiesWritten, communityCount, modularity
与之前的情况一样,该算法会在每个节点中存储一个名为
community
的新属性,其中包含该节点所属社区的 ID。以下查询可以让我们了解 Louvain 如何将网络划分为社区:
MATCH (g:GitHubUser)
RETURN g.community,
count(g) as communitySize,
sum(g.machine_learning) as mlDevCount
ORDER BY communitySize desc
LIMIT 5
综上所述,通过基于分数的方法和基于聚类的方法,可以更好地利用社交网络分析来检测和预防欺诈行为。不同的方法适用于不同的场景和需求,在实际应用中可以根据具体情况选择合适的方法。
社交网络分析在反欺诈中的应用(续)
方法总结与对比
为了更清晰地了解基于分数的方法(如 PageRank 算法)和基于聚类的方法(如 Louvain 方法)在反欺诈中的应用,下面通过表格进行对比总结:
| 方法类型 | 核心思想 | 应用场景 | 优点 | 缺点 |
| — | — | — | — | — |
| 基于分数的方法(PageRank) | 通过计算节点的声望分数,考虑节点间的链接关系,衡量节点受欺诈影响的概率 | 分析单个节点受欺诈影响的可能性,确定网络对某个主体的影响 | 能有效量化节点的影响力,考虑了节点间的相互作用 | 假设随机冲浪者行为可能与实际情况有偏差,计算复杂度较高 |
| 基于聚类的方法(Louvain) | 将图划分为社区,通过社区内节点的紧密连接发现欺诈者团体和共同行为模式 | 识别网络中的欺诈社区,检测隐藏的欺诈结构 | 能发现集体欺诈行为,揭示节点间的潜在关系 | 社区划分的结果可能受到初始条件和算法参数的影响 |
操作流程梳理
PageRank 算法操作流程
graph LR
A[初始化节点页面排名值] --> B[设置停止条件]
B --> C[迭代计算页面排名值]
C --> D{是否满足停止条件}
D -- 是 --> E[结束计算]
D -- 否 --> C
具体步骤如下:
1.
初始化节点页面排名值
:将每个节点的初始页面排名值设置为随机冲浪者从该节点开始导航的概率,即 1 / <页面数量>。
2.
设置停止条件
:可以是每次迭代中排名的变化变得微不足道,或者达到某个定义的最大迭代次数。
3.
迭代计算页面排名值
:根据公式 (PR(i,A)=\alpha\sum_{n\in N_A}\frac{PR(i - 1,n)}{outdegree(n)}+(1 - \alpha)e_A) 计算每个节点的页面排名值。
4.
判断是否满足停止条件
:如果满足则结束计算,否则继续迭代。
Louvain 方法操作流程
graph LR
A[初始化节点社区] --> B[计算模块化分数]
B --> C[尝试节点移动]
C --> D{模块化分数是否增加}
D -- 是 --> E[更新社区划分]
E --> B
D -- 否 --> F[合并社区]
F --> G{是否达到稳定状态}
G -- 是 --> H[结束计算]
G -- 否 --> B
具体步骤如下:
1.
初始化节点社区
:将每个节点分配到一个独立的社区。
2.
计算模块化分数
:评估当前社区划分的质量。
3.
尝试节点移动
:将节点从一个社区移动到另一个社区,计算模块化分数的变化。
4.
判断模块化分数是否增加
:如果增加则更新社区划分,否则不移动节点。
5.
合并社区
:将紧密连接的社区合并成一个新的节点。
6.
判断是否达到稳定状态
:如果达到则结束计算,否则继续迭代。
实际应用建议
在实际应用中,为了更好地利用社交网络分析进行反欺诈,可以参考以下建议:
-
数据准备
:确保数据的准确性和完整性,对数据进行清洗和预处理,去除噪声和异常值。
-
方法选择
:根据具体的应用场景和数据特点选择合适的方法。如果关注单个节点的影响力,可以选择基于分数的方法;如果想发现集体欺诈行为,可以选择基于聚类的方法。
-
参数调整
:对于 PageRank 算法和 Louvain 方法,需要根据实际情况调整参数,如
dampingFactor
、
maxIterations
等,以获得更准确的结果。
-
结果验证
:对分析结果进行验证和评估,可以使用交叉验证、混淆矩阵等方法,确保结果的可靠性。
未来发展趋势
随着社交网络的不断发展和欺诈手段的日益复杂,社交网络分析在反欺诈领域也将面临新的挑战和机遇。未来可能的发展趋势包括:
-
多源数据融合
:结合更多类型的数据,如社交媒体数据、交易数据等,提高反欺诈的准确性和全面性。
-
深度学习应用
:引入深度学习算法,如神经网络、图神经网络等,挖掘数据中的复杂模式和特征。
-
实时监测与预警
:实现实时的社交网络分析,及时发现和预警欺诈行为,减少损失。
通过不断探索和创新,社交网络分析将在反欺诈领域发挥越来越重要的作用,为保障网络安全和社会稳定做出贡献。
190

被折叠的 条评论
为什么被折叠?



