图计算思维与实践 项目实践

Posted Mr-Bruce

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图计算思维与实践 项目实践相关的知识,希望对你有一定的参考价值。

前言

在前文《图计算思维与实践 (一)概览》中,我们介绍了以知识图谱、网络分析为主的图计算的应用,阐述了图思维的方式;在《图计算思维与实践 (二)核心概念与算法》中,我们介绍了图相关的核心概念与算法。本文我们将进入第三部分:项目实践。文中的示例来自我们在网络数据分析项目中的一小块,并不复杂,主要用来阐述使用图计算解决相关业务问题的基本思路。

背景

业务背景是这样的:在我们的应用网关产品中,有多个不同的引擎从不同的角度对网络流量进行安全扫描。其中有一些增强型引擎,可以更早的帮助用户发现网络威胁,但是通常只有一部分用户会打开功能,因为打开后会带来两个问题:性能下降、误报率上升。那么我们能否依靠大数据关联分析,帮助没有打开功能的用户也能在早期防御住相关网络威胁?

以某个邮件扫描的引擎为例,假设有100个用户打开了扫描功能,发现了1000封存在威胁的邮件。通过对这1000封邮件的数据进行关联分析,找出在多个用户都出现过的相似的攻击,然后我们就可以利用这些攻击的特征来分析另外200个没有打开功能的用户是否遭受了同样的攻击。如何发现一批用户在遭受相似的攻击,就是我们在这里要解决的问题。

解决方法

针对上述的业务问题,我们尝试从图计算的视角来解决。当然,这并非是解决此问题的唯一途径,我们也有尝试过其他的聚类分析方法,这里不再赘述。

研究工具

工欲善其事必先利其器,我们先来看看常用的图计算工具:Neo4j、Spark GraphX、NetworkX。我们主要使用了前两者,Neo4j用来对数据进行人工分析,寻找规律和方法;Spark GraphX用于最后的实现,因为我们只需要离线计算产出结果即可,不需要存储图数据。

  • Neo4j,是一个图数据库,提供了自有的查询语法、丰富的图算法库、图数据可视化功能,分社区版和商业版,社区版部分功能受限,比如只能创建一个DB。
  • Spark GraphX,基于Spark RDD来实现图计算的并行执行,目前官方库只有Scala版本,但是有一个准官方库GraphFrame是基于Python的,提供的算法较少,需要自己来实现。
  • NetworkX,一个Python库,提供了图数据分析常用的函数和算法,具有可视化功能。
基本分析

我们从邮件网络数据中提取出每封邮件的发件人、邮件主题和接收用户的信息,将其灌入Neo4j中进行研究。下图所示,右侧为某一天数据的一部分,左侧为放大的一块信息。可以看到,共有三种节点:红色表示发件人,棕色表示邮件主题,绿色表示接收用户;共有两种关系:发件人跟邮件主题之间是WROTE关系,邮件主题跟接收用户之间是SENT关系。

我们观察Neo4j中的可视化图形,可以发现一天的数据所构成的图是非连通的,由多个连通组件构成,而我们的目标是寻找“一群用户”,因此需要首先来分析连通性,找到符合条件的连通组件。下图所示,在Neo4j中运行Connected Component算法,再查找有超过5个用户的连通组件,发现符合条件的有5个。

社区发现

我们选择第一个连通组件来继续分析。一个连通组件里,可能包含了多个不同的攻击模式。比如下图中,通过观察发现,这里面包含3个社区。如何通过算法自动进行社区发现呢?

在社区发现算法中,都是针对同一类节点进行计算的,而这里有3种节点,因此需要对这些节点进行合并。通过分析数据发现,整体的攻击手法分两种:一种是用一个发件人发送不同的邮件主题给不同的人,另一种是用不同的发件人发送同一个邮件主题给不同的人。基于这样的模式,我们对上述的连通子图进行了合并。

下图所示,为合并后的连通子图,蓝色表示接收用户,粉色表示有相同特征的邮件组。到这里,还是没法对某一类的节点来运行社区发现算法,因为这里面还有两种节点。Neo4j提供了relationQuery的方法,支持根据关系动态构建一个子图,然后再执行社区发现算法。

下图所示,就是利用Neo4j来执行Louvain社区发现算法。阅读下面的执行语句,会发现中间动态构建了一个子图,这个图是基于邮件接收用户之间的关系来构建的,然后在此图上运行Louvain算法,最后得到了下图右侧所示两个社区,跟我们人工观察的结果是一致的(有1个社区在合并节点时因为不符合业务条件被过滤掉了)。

至此,我们通过图分析和社区发现,得到了多个分组,每个分组表示一批用户在遭受相似的攻击。基于分组信息,我们可以进一步执行其他业务动作。

小结

本文通过截取业务中的一小块,示例了如何通过图计算来解决业务问题。中间依次涉及了:提取数据构建图、连通组件分析、业务分析与过滤、节点合并、社区发现算法,在分析数据时使用了Neo4j图数据库,在实现时采用了Spark GraphX。



(全文完,本文地址:https://bruce.blog.csdn.net/article/details/112757802

版权声明:本人拒绝不规范转载,所有转载需征得本人同意,并且不得更改文字与图片内容。大家相互尊重,谢谢!

Bruce
2021/02/27 晚

以上是关于图计算思维与实践 项目实践的主要内容,如果未能解决你的问题,请参考以下文章

图计算思维与实践 项目实践

图计算思维与实践 概览

图计算思维与实践 概览

图计算思维与实践 概览

图计算思维与实践 核心概念与算法

图计算思维与实践 核心概念与算法