基于的图的异常检测算法OddBall

OddBall异常检测算法出自2010年的论文《OddBall: Spotting Anomalies in Weighted Graphs》,它是一个在加权图(weighted graph)上检测异常点的算法,基本思路为计算每一个点的一度邻域特征,然后在整个图上用这些特征拟合出一个函数,再根据拟合出来的参数计算每个点的异常分数,所以它可以用于无监督场景。

OddBall检测的异常情况如论文图1所示的四种情况:

  • Near-cliques: 节点的邻居之间紧密联系,典型的情况可能是恐怖组织或者成员之间非常活跃的讨论组。(clique是图里的团,一个clique里的节点两两之间都有一条边)
  • Near-starts: 星状结构,节点的邻居之间几乎没有什么联系,典型的情况有中介、电话销售、机器营销号码等。
  • Heavy vicinities: 节点的邻居个数固定,但是这些边对应的权重之和异常地大。比如在一个电话网络里,一个节点只有有限的n个联系人,但是总的呼叫次数非常大,与n不成比例,说明可能存在强制重拨的异常设备,或者在伪造通话记录等。
  • Dominant heavy links: 图里有某一条边的权重占主导地位。比如在一个电话网络里,一个stalker可能会在短时间内不停地给某个联系人打非常多的电话。

论文借用社交网络分析(social network analysis, SNA)的术语,将图中每一个节点称为’ego’,将一个节点与其1-step邻居节点组成的网络称为egonet。一个节点k-step邻居即从节点出发k步能到达的邻居节点集合,这些邻居节点之间组成了一个子图。关于k的选择,论文推荐使用k=1,有之前的论文表明现实中的图有比较小的直径,论文实验时也发现k>1没有提供更多的信息。(不过在想随着这些年社交媒体和移动互联网的快速发展,现在的数据来说k>1在一些场景下是可能提供更多信息的)

对一个egonet,选择什么特征来描述它呢?比如很容易能想到的特征有:节点个数、边个数、特征值、三角形个数、度为1的邻居的个数等。论文经过试验,最终选择了如下4个特征来刻画egonet:

  • N i N_i Ni: ego i对应的邻居个数,即节点i的度。
  • E i E_i Ei:egonet i包含的边的数目。
  • W i W_i Wi:egonet i的总权重。
  • λ w , i \lambda_{w,i} λw,i:egonet i的带权邻接矩阵的主要特征值。

接着,论文用这4个特征组成特征对来检测前面提到的几种异常:

  • E E E vs N N N: 用来检测near-cliques和near-stars。
  • W W W vs E E E: 用来检测Heavy Vicinity。
  • λ w \lambda_w λw vs W W W: 用来检测Dominant heavy links。

在检测异常时,自然地就会问一个正常的邻居节点是什么样子的呢?基于上述特征对,Oddball作者们总结了下文的一些模式。对于一个给定的图 G \mathcal{G} G,其节点i i ∈ V ( G ) i \in \mathcal{V(G)} iV(G), 节点的i的egonet记为 G i \mathcal{G}_i Gi。(注:如果只想知道Oddball是如何计算异常分数的,下面这些模式可先略过不看,不过这些模式有助于理解Oddball的异常分数计算思路)

观察1 (EDPL: Egonet Density Power Law) : G i \mathcal{G}_i Gi的邻居个数 N i N_i Ni和边的条数 E i E_i Ei满足幂率:
E i ∝ N i α ,   1 ≤ α ≤ 2 E_i \propto N^{\alpha}_i, \ 1 \le \alpha \le 2 EiNiα, 1α2
在论文实验时的指数 α \alpha α大小为1.10到1.66。论文图2示意了这个观察(图是在对数维度画的),当斜率为2时,代表图为一个clique,而斜率为1,代表图为star。

WeChatWorkScreenshot_f247325c-5239-4c23-bdee-10052db54770

观察2 (EWPL: Egonet Weight Power Law): G i \mathcal{G}_i Gi的总权重 W i W_i Wi和边的条数 E i E_i Ei满足幂率:
W i ∝ E i β ,   β ≥ 1 W_i \propto E^{\beta}_i, \ \beta \ge 1 WiEiβ, β1

论文图3展示了数据集的EWPL示意, β \beta β最大达到了1.29, β > 1 \beta>1 β>1表明随着边的增加,权重之和的增加有超线性的增长。

观察3 (ELWPL: Egonet λ w \lambda_w λw Power Law): G i \mathcal{G}_i Gi的带权邻接矩阵的主要特征值 λ w , i \lambda_{w,i} λw,i和总权重 W i W_i Wi满足幂率:
λ w , i ∝ W i γ ,   0.5 ≤ γ ≤ 1 \lambda_{w,i} \propto W^{\gamma}_i, \ 0.5 \le \gamma \le 1 λw,iWiγ, 0.5γ1

论文图4示意了数据集的ELWPL,实验中 λ \lambda λ范围为0.53至0.98。 γ = 0.5 \gamma=0.5 γ=0.5表示均匀的权重分布, γ ∼ 1 \gamma \sim 1 γ1表示在egonet中有显著权重边。 γ = 1 \gamma=1 γ=1表示egonet只有一条边。

观察4 (ERPL: Egonet Rank Power Law): G i \mathcal{G}_i Gi中的边j的排序 R i , j R_{i,j} Ri,j和权重 W i , j W_{i,j} Wi,j满足幂率:
W i , j ∝ R i , j θ ,   θ ≤ 0 W_{i,j} \propto R^{\theta}_{i,j}, \ \theta \le 0 Wi,jRi,jθ, θ0

R i , j R_{i,j} Ri,j是边j按照边权重排序之后的排名。ERPL表明在egonet中边的权重分布是倾斜的。这个是符合直觉的,比如在一个朋友网络中,一个人会有许多不亲近的朋友,但只有少数几个亲近的朋友。接着论文证明了如果ERPL成立,则EWPL也成立。

有了前面这些铺垫,现在让我们看看Oddball是如何计算异常分数的。对于前面提到的特征对(根据检测异常类型选择特征对),设节点i的对应的y值记为 y i y_i yi,对应的x值为 x i x_i xi,假设对于数据集可以拟合得到一个幂率方程 y = C x θ y = C x^{\theta} y=Cxθ,定义节点i的异常分数为:

out-line ( i ) = max ⁡ ( y i , C x θ ) min ⁡ ( y i , C x θ ) ∗ log ⁡ ( ∣ y i − C x θ ∣ + 1 ) \text{out-line}(i) = \frac{\max(y_i, C x^{\theta})}{\min(y_i, C x^{\theta})} * \log(|y_i - C x^{\theta}| + 1) out-line(i)=min(yi,Cxθ)max(yi,Cxθ)log(yiCxθ+1)

直观上,Oddball的异常分数度量“偏离拟合曲线的距离”,当真实值 y i y_i yi与期望值 C x θ C x^{\theta} Cxθ相等时,异常分数为最小值0。

作者发现Oddball有时候检测不到一些异常点,比如在图2(a)中的左三角标记的点,它们与其他点隔的很远但是几乎就在拟合线上。所以作者提出将Oddball异常分数与基于密度的异常检测方法一起结合使用。在论文中,使用的基于密度的异常检测方法是LOF方法,将Oddball分数和LOF分数进行归一化后(通过除以最大值的方式)求和得到最终的异常分数,即 out-score ( i ) = out-line ( i ) + out-lof ( i ) \text{out-score}(i) = \text{out-line}(i) + \text{out-lof}(i) out-score(i)=out-line(i)+out-lof(i)

实践经验:1. 在计算一个egonet里的边的数目时,可以通过计算egonet里三角形个数和其度之和来得到。因为现有的工具比如Spark GraphX里已经有三角形个数和度计算的现成接口。2. 计算LOF时,在图里怎么算距离呢? 把选定的特征对数据作为LOF的特征再计算距离。

参考资料

  1. OddBall: Spotting Anomalies in Weighted Graphs
  2. 实现: oddball 作者主页上的matlab代码, github上的python实现:1, 2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/918553.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于AOA算术优化的KNN数据聚类算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于AOA算术优化的KNN数据聚类算法matlab仿真。通过AOA优化算法,搜索最优的几个特征数据,进行KNN聚类,同时对比不同个数特征下…

【模块一】kubernetes容器编排进阶实战之CoreDNS的介绍与使用

CoreDNS进阶 CoreDNS进阶-简介 DNS组件历史版本有skydns、kube-dns和coredns三个,k8s 1.3版本之前使用skydns,之后的版本到1.17及之间的版本使用kube-dns, 1.18开始目前主要使用coredns,DNS组件用于解析k8s集群中service name所对…

栈Stack和队列Queue

目录 一、栈 (1)用数组实现 (2)用单链表实现 (3)用标注尾结点的单链表实现 (4)用双向链表实现 2、栈的实际应用 (1)改变元素的序列 (2&am…

ES6标准-Promise对象

目录 Promise对象的含义 Promise对象的特点 Promise对象的缺点 Promise对象的基本用法 Promise对象的简单例子 Promise新建后就会立即执行 Promise对象回调函数的参数 Promise参数不会中断运行 Promise对象的then方法 Promise对象的catch()方法 Promise状态为resolv…

【隐私计算】隐私计算的应用场景探索(大模型隐私计算、隐私数据存储计算、Web3、隐私物联网等)

1. 背景分析 隐私计算作为一种实现“原始数据不出域,可用不可见”的数据流通价值的关键技术,经历了2020-2023年的高光时刻,却在2024年骤然走向低谷。从各种渠道了解到一些业内曾经风光无两的隐私计算公司都有不同程度的裁员。几乎一夜之间&am…

【大数据学习 | flume】flume的概述与组件的介绍

1. flume概述 Flume是cloudera(CDH版本的hadoop) 开发的一个分布式、可靠、高可用的海量日志收集系统。它将各个服务器中的数据收集起来并送到指定的地方去,比如说送到HDFS、Hbase,简单来说flume就是收集日志的。 Flume两个版本区别: ​ 1&…

【大语言模型】ACL2024论文-16 基于地图制图的罗马尼亚自然语言推理语料库的新型课程学习方法

【大语言模型】ACL2024论文-16 基于地图制图的罗马尼亚自然语言推理语料库的新型课程学习方法 目录 文章目录 【大语言模型】ACL2024论文-16 基于地图制图的罗马尼亚自然语言推理语料库的新型课程学习方法目录摘要:研究背景:问题与挑战:如何解…

数据库审计工具--Yearning 3.1.9普民的使用指南

1 页面登录 登录地址:18000 (不要勾选LDAP) 2 修改用户密码 3 DML/DDL工单申请及审批 工单申请 根据需要选择【DML/DDL/查询】中的一种进行工单申请 填写工单信息提交SQL检测报错修改sql语句重新进行SQL检测,如检测失败可以进行SQL美化后…

Day44 | 动态规划 :状态机DP 买卖股票的最佳时机IV买卖股票的最佳时机III

Day44 | 动态规划 :状态机DP 买卖股票的最佳时机IV&&买卖股票的最佳时机III&&309.买卖股票的最佳时机含冷冻期 动态规划应该如何学习?-CSDN博客 本次题解参考自灵神的做法,大家也多多支持灵神的题解 买卖股票的最佳时机【…

Windows配置域名映射IP

一、找到 hosts 文件 打开 C:\Windows\System32\drivers\etc 二、添加hosts文件修改、写入权限 右击hosts文件,点击属性 -> 安全 -> Users -> 编辑 -> Users -> 添加修改、写入权限 -> 确定 -> 确定 进入常规,将只读属性关闭 三、…

sapiens推理的安装与使用

文章目录 1、安装1.1 克隆代码库1.2 设置 Sapiens-Lite 的代码路径1.3 创建 Conda 环境并安装必要的依赖1.4 下载模型检查点 2、推理 sapiens,是meta发布的以人为中心的视觉大模型,"sapiens"这个词来源于拉丁语,意为“智慧的”或“…

黑马智数Day10

项目背景说明 后台管理部分使用的技术栈是Vue2,前台可视化部分使用的技术栈是Vue3 前台可视化项目不是独立存在,而是和后台管理项目共享同一个登录页面 微前端的好处 微前端是一种前端架构模式,它将大型单体应用程序分解为小的、松散耦合的…

A3超级计算机虚拟机,为大型语言模型LLM和AIGC提供强大算力支持

热门大语言模型项目地址:www.suanjiayun.com/mirrorDetails?id66ac7d478099315577961758 近几个月来,我们目睹了大型语言模型(LLMs)和生成式人工智能强势闯入我们的视野,显然,这些模型在训练和运行时需要…

乐维网管平台(七):网络稳定与高效的“安全锦囊”

试想一下,你给电脑升级了一个软件,升级完成后发现有BUG,经常无故卡死,这时候想回退或重新安装旧版本…相对地,一家企业的网络管理员,在对公司的核心交换机进行复杂的配置调整时,一个小小的疏忽&…

基于Python的图片信息推荐系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

没钱买KEGG怎么办?REACTOME开源通路更强大

之前搜集免费生物AI插图时简单提到了通路数据库Reactome(https://reactome.org/), 那些精美的生物插图只能算是该数据库附赠的小礼品,他的主要功能还是作为一个开源的通路数据库,为相关领域的研究者提供直观的可视化生…

spi 回环

///tx 极性0 (sclk信号线空闲时为低电平) /// 相位0 (在sclk信号线第一个跳变沿进行采样) timescale 1ns / 1ps//两个从机 8d01 8d02 module top(input clk ,input rst_n,input [7:0] addr ,input …

Lc70--319.两个数组的交集(二分查找)---Java版

1.题目描述 2.思路 用集合求交集,因为集合里面的元素要满足不重复、无序、唯一。使得集合在去重、查找和集合操作(如交集、并集、差集等)中非常高效和方便。 3.代码实现 class Solution {public int[] intersection(int[] nums1, int[] nu…

项目2:简易随机数生成器 --- 《跟着小王学Python·新手》

项目2:简易随机数生成器 — 《跟着小王学Python新手》 《跟着小王学Python》 是一套精心设计的Python学习教程,适合各个层次的学习者。本教程从基础语法入手,逐步深入到高级应用,以实例驱动的方式,帮助学习者逐步掌握P…

qml绘制折线图

参考链接 qml绘制折线图 在QML(Qt Modeling Language)中绘制折线图可以通过使用Canvas元素或ChartView元素来实现。以下是两种方法的示例: 方法一:使用Canvas元素 Canvas元素允许你在QML中绘制自定义图形。你可以通过JavaScrip…