图算法系列二 网络诈骗检测

为了方便,本文的算法展示采用networkx, 接下来的文章主要以networkx为基础,说明图算法的应用
Page Rank is a well-known algorithm developed by Larry Page and Sergey Brin in 1996.
声明:由于原文写的比较好,本文基本ref[1]的文章翻译

1. 基本假设及其定义

1.1 random walk

  1. 某个人会从图中任意一个节点开始行走
  2. 在任意一次迭代中,行走者有可能走向他指向的某个节点(概率是p),也可能跳转到其他节点(概率1-p)
  3. random walk 假设行走者在某个时刻会停止;也就是找到了他想要的网页。假设行走者在任意一个step时
    刻停止的概率是α,称之为阻尼系数。

1.2 数学定义

  1. Page Rank中的random walk 是时不变马尔可夫链(stationary measure of the Markov Chain )
图算法系列二 网络诈骗检测_第1张图片

2. networkx 模拟诈骗网站

2.1 Page Rank现实意义

  • . 实际上,Page Rank 的结果表达了节点在网络节点中的重要程度。个性化的网页排名提供了一组特定节点的角度观察图形。
  • 这种操作实际上给网络诈骗(风险网页)提供了便利

2.2 规则

  • 为了实现诈骗,random walk需要满足:
    • walker 只能从一组特定的节点集(F)开始
    • walker 发生跳跃时,只能跳到特定的一组节点集(F)中

例如下图中的a,e 组成的F集

图算法系列二 网络诈骗检测_第2张图片

对上图进行 Page Rank得到结果每个节点的重要程度如下

图算法系列二 网络诈骗检测_第3张图片

2.3 networkx 代码

import itertools	
import pprint	
import random	

import networkx as nx	
import pandas as pd	
from matplotlib import pyplot as plt	


fraud = pd.DataFrame({	
    'individual': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'],	
    'fraudster': [1, 0, 0, 0, 1, 0, 0, 0]	
})	

# Generate Networkx Graph	
G = nx.Graph()	
G.add_nodes_from(fraud['individual'])	

# randomly determine vertices	
for (node1, node2) in itertools.combinations(fraud['individual'], 2):	
    if random.random() < 0.5:	
        G.add_edge(node1, node2)	

# Draw generated graph	
nx.draw_networkx(G, pos=nx.circular_layout(G), with_labels=True)	

# Compute Personalized Page Rank	
personalization = fraud.set_index('individual')['fraudster'].to_dict()
ppr = nx.pagerank(G, alpha=0.85, personalization=personalization)
pprint.pprint(ppr)
plt.show()

无论如何变换转移矩阵(random),这些“at-risk” individuals 的Page Rank都是比较高的,因此可以被检测出来。

ref:
[1] https://blog.sicara.com/fraud-detection-personalized-page-rank-networkx-15bd52ba2bf6

你可能感兴趣的:(Algorithm,python)