基于图的异常检测:GraphRAD

Posted bonelee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于图的异常检测:GraphRAD相关的知识,希望对你有一定的参考价值。

技术图片

基于图的异常检测(三):GraphRAD

论文:《GraphRAD: A Graph-based Risky Account Detection System》
作者:Jun Ma(Amazon),Danqing Zhang(Berkeley)
来源:MLG ‘ 18

本文介绍Amazon基于图的欺诈交易账户检测系统,相比LOCKINFER 和 OddBall,本文是面向实际业务设计的检测系统,并使用了标签数据。

早期做过十分类似的项目,在可视化关联分析的基础上,为案件调查人员提供智能风险团伙分析服务。所以个人还是比较认可的,在整个系统设计及社区发现模块比较有借鉴价值。

 

1.背景

应用场景:黑产通过窃取支付信息在Amazon的在线零售商户购买商品获利。

假设:在“欺诈社区”中欺诈账户间连接紧密,而与社区外的账户连接稀疏。

检测系统目标:给予账户之间关系图和一批黑种子,系统检测出有潜在风险的社区及账户供专家调查。并满足以下特性:

  • 检测需要做到准实时,以及时止损。
  • 返回的可疑社区不能太大和重叠,减少专家工作量。
  • 每个账户需要有风险评分,专家根据评分决定优先级。
  • 目标是对已有规则引擎的补充,额外发现未识别的欺诈账户。

2.系统框架

大概思路是:通过最近交易事件提取一批黑种子账户,构建账户之间关系网络,然后识别和过滤社区,然后为社区中节点打分,然后返回结果。

技术图片

流程介绍:

  1. Transaction Record:交易事件数据查询接口模块,交易事件字段包括交易时间、账户id、收货地址、决策引擎结果(Trusted、Fraud、Risky),提供一段时间查询交易事件的接口。
  2. Graph Generator:构建账户之间关系图“big-graph”模块,通过某些共享属性(如收货地址等)建立连边。
  3. Seeding:筛选黑种子模块,决策引擎中标记为Fraud 以及 部分Risky的账户(根据启发式规则)。
  4. Community Detection:局部社区发现模块,以黑种子账户为输入,识别出围绕种子的一个个局部社区。算法是Personal PageRank变种ACL,线性复杂度。
  5. Screen + Merge:过滤及合并:根据风险大小过滤一些局部社区,然后合并成这些局部社区成“big-comm”(局部社区之间会部分重叠,合并减少冗余)。
  6. Community Extractor:最终社区抽取,基于上面ACL算法得到的基于PPR向量,通过层次聚类得到最终的社区
  7. Feature Extractor:提取“big-comm”中节点特征,基于交易数据,特征使用决策引擎规则
  8. Scoring:基于图的惩罚项,训练半监督模型,为每个节点评分

最后给专家提供社区结构和节点评分以供调查使用。

3.核心模块

3.1 构建网络(Graph Generator)

数据来源:最近的交易事件

例如 有两个交易事件:

  • 交易事件1:账户A,收货地址为:杭州市西湖区蒋村花园23幢
  • 交易事件2:账户B,收货地址为:杭州市西湖区蒋村花园23幢

因为账户A和账户B共享同一个收货地址,故他们会有一条边,以此来建立账户与账户之间关系网络。

实践中如共享同一个设备、同一个IP都可以作为连边条件。

3.2 社区发现及过滤

该模块是本文的比较有意思的地方,不是对网络进行全局的划分,而是先以欺诈账户为种子节点,找到每一个种子节点所在的局部社区,然后对这一个个局部社区进行过滤和合并成一个大社区,最后对这大社区进行划分,得到一个个不重叠的社区。

这样做的优势是:

  1. 计算复杂度非常低,局部社区发现计算复杂度仅跟输出的结果线性相关。
  2. 个人认为还有个优势是降噪和考虑用户需求,通过加入黑种子、社区过滤等人为干预方式,降低数据噪声,控制社区规模和冗余,方便专家进行案件审查。

下图比较是直观的一个全局和局部社区发现的对比:

技术图片

 

3.2.1 局部社区发现(Community Detection)

以黑种子节点为输入,使用基于Personal Pagerank局部社区算法ACL,该算法比较经典, 复杂度仅取决于输出结果。

算法使用电阻率(conductance)作为评价指标(模块度是全局的):

技术图片

后面会补上对ACL的解读。

3.2.2 过滤和合并(Screen + Merge)

因为局部社区发现返回的结果是一个个围绕着黑种子的局部社区,必然会有冗余

另外局部社区规模非常小,可能是不存在是个体风险,而不是群体风险。

故需要对局部社区进行过滤,本文是先过滤掉规模较小的局部社区,然后对每个局部社区建一个风险评分模型,再过滤掉风险较低局部社区(y怎么定义用什么特征没仔细说)。

(个人觉得过滤环节不用做太多的操作,简单原则。另外对社区评分模型不好做的,考验泛化能力,还不如用规则)

过滤完后再对这一个个局部社区进行合并,组成一个“大社区“(其实就是将所有节点和边都放在一起)。

3.2.3 社区提取(Community Extractor)

因为局部社区发现用的是基于personal pagerank 的方法,可以得到每个节点的一个pagerank 向量,表示节点与其他节点的相似度。将该一个个向量转换成矩阵,并用层次聚类的方法得到最终的社区。 社区数量k的设置控制社区规模,方便专家分析。

3.3 节点评分(Scoring)

在“大社区”上为每个节点打上一个分数,方便专家分析时确定优先级及过滤低评分的节点。

本文对比了Node2vec、GCN和在基于图惩罚项的模型给节点评分,发现基于图惩罚项的模型效果是最好的(也许是样本量有限?按理说应该是GCN好)。

基于图惩罚项的模型即在有监督损失如交叉熵中加入图的惩罚项(相邻节点的预测结果是相近的),这样在训练时不仅考虑了有标签节点,也考虑了无标签的相邻节点,故称为半监督学习。

特征是用了决策引擎中的规则,标签y定义即是否欺诈。

3.4 例子

“大社区“

技术图片

最终返回的一个个社区

技术图片技术图片

4. 效果评估

该检测系统目标是 发现更多规则引擎没有发现的欺诈账户,而不是去跟规则引擎去PK,故评价标准是“missed bad” ——检测到的未发现的欺诈账户占比 (通过专家标注,用比例的原因是对于准确率的考量)

首先与随机抽样对比,系统每一个模块的missed bad情况,证明好的系统每一个模块检测比例应该是递增的:

  1. 随机抽样:0.017%
  2. 经过局部社区发现和过滤合并得到的大社区上:0.054%
  3. 经过社区提取后:1.51%
  4. 根据节点评分排序和过滤: 2.77%

上述模块中的missed bad 没有考虑,被决策引擎判为正常的欺诈账户,故真实结果应该会更高。

另外对比简单规则——欺诈节点直接相连的邻居认为是欺诈的对比,GraphRAD检测还是有比较大的增益的。

技术图片

 

 

基于图的异常检测(一):OddBall

基于图的异常检测(二):LOCKINFER

基于图的异常检测(三):GraphRAD

以上是关于基于图的异常检测:GraphRAD的主要内容,如果未能解决你的问题,请参考以下文章

Graph Anomaly Detection with Deep Learning——基于属性图的节点异常检测

Graph Anomaly Detection with Deep Learning——边检测

Graph Anomaly Detection with Deep Learning——边检测

Graph Anomaly Detection with Deep Learning——边检测

Graph Anomaly Detection with Deep Learning——子图检测

Graph Anomaly Detection with Deep Learning——子图检测