异常检测的N种方法,阿里工程师都盘出来了

阿里妹导读:互联网黑产盛行,其作弊手段层出不穷,导致广告效果降低,APP推广成本暴增。精准识别作弊是互联网公司和广告主的殷切期望。今天我们将从时间序列、统计、距离、线性方法、分布、树、图、行为序列、有监督机器学习和深度学习模型等多个角度探讨异常检测。

背景

异常点检测(Outlier detection),又称为离群点检测,是找出与预期对象的行为差异较大的对象的一个检测过程。这些被检测出的对象被称为异常点或者离群点。异常点检测在生产生活中有着广泛应用,比如信用卡反欺诈、工业损毁检测、广告点击反作弊等。

异常点(outlier)是一个数据对象,它明显不同于其他的数据对象。如下图1所示,N1、N2区域内的点是正常数据。而离N1、N2较远的O1、O2、O3区域内的点是异常点。

图1.异常点示例

异常检测的一大难点是缺少ground truth。常见的方法是先用无监督方法挖掘异常样本,再用有监督模型融合多个特征挖掘更多作弊。

近期使用多种算法挖掘异常点,下面从不同视角介绍异常检测算法的原理及其适用场景,考虑到业务特殊性,本文不涉及特征细节。

1.时间序列

1.1 移动平均(Moving Average,MA)

移动平均是一种分析时间序列的常用工具,它可过滤高频噪声和检测异常点。根据计算方法的不同,常用的移动平均算法包括简单移动平均、加权移动平均、指数移动平均。假设移动平均的时间窗口为T,有一个时间序列:

1.1.1 简单移动平均(Simple Moving Average,SMA)

从上面的公式容易看出可以用历史的值的均值作为当前值的预测值,在序列取值随时间波动较小的场景中,上述移动均值与该时刻的真实值的差值超过一定阈值则判定该时间的值异常。

适用于:

a.对噪声数据进行平滑处理,即用移动均值替代当前时刻取值以过滤噪声;

b.预测未来的取值。

1.1.2 加权移动平均(Weighted Moving Average, WMA)

由于简单移动平均对窗口内所有的数据点都给予相同的权重,对近期的最新数据不够敏感,预测值存在滞后性。按着这个思路延伸,自然的想法就是在计算移动平均时,给近期的数据更高的权重,而给窗口内较远的数据更低的权重,以更快的捕捉近期的变化。由此便得到了加权移动平均和指数移动平均。

加权移动平均比简单移动平均对近期的变化更加敏感,加权移动平均的滞后性小于简单移动平均。但由于仅采用线性权重衰减,加权移动平均仍然存在一定的滞后性。

1.1.3 指数移动平均(Exponential Moving Average, EMA)

指数移动平均(Exponential Moving Average, EMA)和加权移动平均类似,但不同之处是各数值的加权按指数递减,而非线性递减。此外,在指数衰减中,无论往前看多远的数据,该期数据的系数都不会衰减到 0,而仅仅是向 0 逼近。因此,指数移动平均实际上是一个无穷级数,即无论多久远的数据都会在计算当期的指数移动平均数值时,起到一定的作用,只不过离当前太远的数据的权重非常低。在实际应用中,可以按如下方法得到t时刻的指数移动平均:

其中image表示权重的衰减程度,取值在0和1之间。image越大,过去的观测值衰减得越快。

1.2 同比和环比

图2.同比和环比

同比和环比计算公式如图2所示。适合数据呈周期性规律的场景中。如:1.监控APP的DAU的环比和同比,以及时发现DAU上涨或者下跌;2.监控实时广告点击、消耗的环比和同比,以及时发现变化。当上述比值超过一定阈值(阈值参考第10部分)则判定出现异常。

1.3 时序指标异常检测(STL+GESD)

STL是一种单维度时间指标异常检测算法。大致思路是:

(1)先将指标做STL时序分解,得到seasonal,trend,residual成分,如图3所示;
(2)用GESD (generalized extreme studentized deviate)算法对trend+residual成分进行异常检测;
(3)为增强对异常点的鲁棒性,将GESD算法中的mean,std等统计量用median, MAD(median absolute deviation)替换;
(4)异常分输出:abnorm_score = (value - median)/MAD, value为当前值,median为序列的中位数。负分表示异常下跌,正分表示异常上升。

图3.STL分解示例

2.统计

2.1 单特征且符合高斯分布

如果变量x服从高斯分布:image,则其概率密度函数为:

我们可以使用已有的样本数据image来预测总体中的image,计算方法如下:

2.2 多个不相关特征且均符合高斯分布

假设n维的数据集合形如:

且每一个变量均符合高斯分布,那么可以计算每个维度的均值和方差

image,具体来说,对于image,可以计算:

如果有一个新的数据image,可以计算概率image如下:

2.3 多个特征相关,且符合多元高斯分布

2.4 马氏距离(Mahalanobis distance)

对于一个多维列向量的数据集合D,假设image是均值向量,那么对于数据集D中的任意对象image,从imageimage的马氏距离是:

其中image是协方差矩阵。可以对数值image进行排序,如果数值过大,那么就可以认为点是离群点。

2.5 箱线图

箱线图算法不需要数据服从特定分布,比如数据分布不符合高斯分布时可以使用该方法。该方法需要先计算第一四分位数Q1(25%)和第三四分位数Q3(75%)。令IQR=Q3-Q1,然后算出异常值边界点Q3+λIQR和Q1- λIQR,通常λ取1.5(类似于正态分布中的image,如下图4所示:

图4.箱线图算法示意图

3.距离

3.1、基于角度的异常点检测

图5.点集和角度

如上图5所示,现在有三个点X,Y,Z,和两个向量image,如果对任意不同的点Y,Z,角度image变化都较小,则点X是异常点。通过余弦夹角公式易得角度:

D是点集,则对于任意不同的点image,点X的所有角度的方差为:

异常点的上述方差较小。该算法的时间复杂度是image,适合数据量N较小的场景。

3.2 基于KNN的异常点检测

D是点集,则对于任意点image,计算其K近邻的距离之和Dist(K,X)。Dist(K,X)越大的点越异常。时间复杂度是image,其中N是数据量的大小。

4.线性方法(矩阵分解和PCA降维)

基于矩阵分解的异常点检测方法的主要思想是利用主成分分析(PCA)去寻找那些违反了数据之间相关性的异常点。为了找到这些异常点,基于主成分分析的算法会把数据从原始空间投影到主成分空间,然后再从主成分空间投影回原始空间。对于大多数的数据而言,如果只使用第一主成分来进行投影和重构,重构之后的误差是较小的;但是对于异常点而言,重构之后的误差相对较大。这是因为第一主成分反映了正常点的方差,最后一个主成分反映了异常点的方差。

假设X是一个p维的数据集合,有N个样本,它的协方差矩阵是image。那么协方差矩阵就可以分解为:

其中P是一个image维正交矩阵,它的每一列image都是的特征向量。D是一个image维对角矩阵,包含了特征值image。在图形上,一个特征向量可以看成2维平面上的一条线,或者高维空间里面的一个平面。特征向量所对应的特征值反映了这批数据在这个方向上的拉伸程度。通常情况下,将特征值矩阵D中的特征值从大到小的排序,特征向量矩阵P的每一列也进行相应的调整。

数据集X在主成分空间的投影可以写成Y=XP,注意可以只在部分的维度上做投影,使用top-j的主成分投影之后的矩阵为:

其中image是矩阵P的前j列,也就是说image是一个image维的矩阵。image是矩阵Y的前j列,image是一个image维的矩阵。按同样的方式从主成分空间映射到原始空间,重构之后的数据集合是 。

其中是使用top-j的主成分重构之后的数据集,是一个维的矩阵。如图6所示:

图6.矩阵变换示意图

定义数据image
的异常值分为:

其中image表示的是top-j主成分占所有主成分的比例,特征值是按照从大到小的顺序排列的。因此image是递增的,这就意味着j越大,越多的方差就会被算到image中,因为是从 1 到 j 的求和。在这个定义下,偏差最大的第一个主成分获得最小的权重,偏差最小的最后一个主成分获得了最大的权重1。根据 PCA 的性质,异常点在最后一个主成分上有着较大的偏差,因此会有更大的异常分。

5.分布

即对比基准流量和待检测流量的某个特征的分布。

5.1 相对熵(KL散度)

相对熵(KL散度)可以衡量两个随机分布之间的距离,当两个随机分布相同时,它们的相对熵为零,当两个随机分布的差别增大时,它们的相对熵也会增大。所以相对熵可以用于比较两个分布的相似度。设image是两个概率分布的取值,则对应相对熵为

5.2 卡方检验

卡方检验通过检验统计量image来比较期望结果和实际结果之间的差别,然后得出实际结果发生的概率。其中O代表观察值,E代表期望值。这个检验统计量提供了一种期望值与观察值之间差异的度量办法。最后根据设定的显著性水平查找卡方概率表来判定。

6.树(孤立森林)

图7.iForest检测结果

孤立森林(Isolation Forest)假设我们用一个随机超平面来切割数据空间, 每切一次便可以生成两个子空间。接着继续用一个随机超平面来切割每个子空间,循环下去,直到每个子空间里面只有一个数据点为止。那些密度很高的簇是需要被切很多次才能让子空间中只有一个数据点,但是那些密度很低的点的子空间则很快就被切割成只有一个数据点。如图7所示,黑色的点是异常点,被切几次就停到一个子空间;白色点为正常点,白色点聚焦在一个簇中。孤立森林检测到的异常边界为图7中红色线条,它能正确地检测到所有黑色异常点。

如图8所示,用iForest切割4个数据,b和c的高度为3,a的高度为2,d的高度为1,d最先被孤立,它最有可能异常。

图8.iForest切割过程

7.图

7.1 最大联通图

在无向图G中,若从顶点A到顶点B有路径相连,则称A和B是连通的;在图G中存在若干子图,其中每个子图中所有顶点之间都是连通的,但不同子图间不存在顶点连通,那么称图G的这些子图为最大连通子图。

如图9所示,device是设备id,mbr是会员id,节点之间有边表示设备上有对应的会员登录过,容易看出device_1、device_2、device_3、device_4是同人,可以根据场景用于判断作弊,常用于挖掘团伙作弊。

图9.最大联通图结果

最大联通图的前提条件是每条边必须置信。适用场景:找所有连通关系。当数据中存在不太置信的边时,需要先剔除脏数据,否则会影响最大联通图的效果。

7.2 标签传播聚类

标签传播图聚类算法是根据图的拓扑结构,进行子图的划分,使得子图内部节点的连接较多,子图之间的连接较少。标签传播算法的基本思路是节点的标签依赖其邻居节点的标签信息,影响程度由节点相似度决定,通过传播迭代更新达到稳定。图10中的节点经标签传播聚类后将得2个子图,其中节点1、2、3、4属于一个子图,节点5、6、7、8属于一个子图。

图10.标签传播聚类算法的图结构

标签传播聚类的子图间可以有少量连接。适用场景:节点之间“高内聚低耦合”。图10用最大联通图得1个子图,用标签传播聚类得2个子图。

8.行为序列(马尔科夫链)

如图11所示,用户在搜索引擎上有5个行为状态:页面请求(P),搜索(S),自然搜索结果(W),广告点击(O),翻页(N)。状态之间有转移概率,由若干行为状态组成的一条链可以看做一条马尔科夫链。

图11.用户行为状态图

统计正常行为序列中任意两个相邻的状态,然后计算每个状态转移到其他任意状态的概率,得状态转移矩阵。针对每一个待检测用户行为序列,易得该序列的概率值,概率值越大,越像正常用户行为。

9.有监督模型

上述方法都是无监督方法,实现和理解相对简单。但是由于部分方法每次使用较少的特征,为了全方位拦截作弊,需要维护较多策略;另外上述部分方法组合多特征的效果取决于人工经验。而有监督模型能自动组合较多特征,具备更强的泛化能力。

9.1 机器学习模型GBDT

样本:使用前面的无监督方法挖掘的作弊样本作为训练样本。如果作弊样本仍然较少,用SMOTE或者GAN生成作弊样本。然后训练GBDT模型,用转化数据评估模型的效果。

9.2 深度学习模型Wide&Deep

Wide&Deep通过分别提取wide特征和deep特征,再将其融合在一起训练,模型结构如图12所示。wide是指高维特征和特征组合的LR。LR高效、容易规模化(scalable)、可解释性强。出现的特征组合如果被不断加强,对模型的判断起到记忆作用。但是相反的泛化性弱。

deep则是利用神经网络自由组合映射特征,泛化性强。deep部分本质上挖掘一些样本特征的更通用的特点然后用于判断,但是有过度泛化的风险。

算法通过两种特征的组合去平衡记忆(memorization)和泛化( generalization)。

为了进一步增加模型的泛化能力,可以使用前面的无监督方法挖掘的作弊样本作为训练样本,训练Wide&Deep模型识别作弊。

图12.Wide&Deep模型

10.其他问题

10.1 常用选择阈值的思路

上述各种方法都需要计算异常阈值,可以用下述思路先选阈值,再用转化数据验证该阈值的合理性。

a.无监督方法:使用分位点定阈值、找历史数据的分布曲线的拐点;

b.有监督模型:看验证集的准召曲线

10.2 非高斯分布转高斯分布

有些特征不符合高斯分布,那么可以通过一些函数变换使其符合高斯分布,以便于使用上述统计方法。常用的变换函数:,其中c为非负常数;,c为0-1之间的一个分数。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TalkingData的Spark On Kubernetes实践

众所周知,Spark是一个快速、通用的大规模数据处理平台,和Hadoop的MapReduce计算框架类似。但是相对于MapReduce,Spark凭借其可伸缩、基于内存计算等特点,以及可以直接读写Hadoop上任何格式数据的优势,使批处理更加高效…

ORACLE使用批量插入100万测试数据

CREATE TABLE test_data (ID varchar2(32),NAME1 varchar2(9),NAME2 varchar2(100),NAME3 varchar2(100) ); COMMENT ON TABLE test_data IS 测试表;beginfor i in 1 .. 1000000 loopINSERT INTO "DCA"."TEST_DATA" ("ID", "NAME1", &…

阿里技术男的成长史:越想证明自己死得越快……

在上海工作8年后,身为部门经理的钱磊,管理着一家ERP公司的百十来号员工,“再往上爬就是老板和他儿子了……从这个领域的技术角度来讲算是做到了顶。”05年,钱磊就开始关注一家名字奇怪,做事也奇怪的公司。 要不要折腾…

程序员1w5以下的,2020年就要面对现实了...

BOSS直聘最近发布,“互联网行业30%新增岗位,全都是技术岗!各公司开启了新一轮抢人计划”。大家在这个春招一定有很多目标,找到理想工作,换个大房子住,给爸妈多寄点钱,给女朋友换个新手机……CSD…

对话亲历者|鲁肃:我在支付宝“拧螺丝“的日子

对话亲历者:他是支付宝技术平台的奠基人之一,但是他总说“这还不是我心中最完美的架构”;他行事低调但却有着“此时此地,非我莫属”的豪气;他曾无数次充当救火大队长,但自评只是“没有掉队的那个人”。 在2…

Flutter高内聚组件怎么做?阿里闲鱼打造开源高效方案!

fish_redux是闲鱼技术团队打造的flutter应用开发框架,旨在解决页面内组件间的高内聚、低耦合问题。开源地址:https://github.com/alibaba/fish-redux 从react_redux说起 redux对于前端的同学来说是一个比较熟悉的框架了,fish_redux借鉴了re…

AI赋能红外测温助力精准防控疫情……

文章来源:北京领邦智能装备股份公司 疫情发生以来,全国上下倾力奋战得到有效控制,科技抗疫逐渐成为有效抓手,而AI红外热成像测温仪无疑将成为抗疫一线的一把利剑,斩断疫情传播的途径。 需求引领技术变革 2003年非典后…

阿里巴巴中间件在 Serverless 技术领域的探索

Serverless 话题涉及范围极广,几乎包含了代码管理、测试、发布、运维和扩容等与应用生命周期关联的所有环节。AWS Lambda 是 Serverless 领域的标志性产品,但如果将其应用于核心业务,可能会遇到以下难题:(仅代表作者个…

从零单排HBase 02:全面认识HBase架构(建议收藏)

作者 | 阿丸笔记责编 | 徐威龙封图| CSDN 下载于视觉中国在网上看过很多HBaes架构相关的文章,内容深浅不一,直到发现了一篇MapR官网的文章,写得实在太生动了。https://mapr.com/blog/in-depth-look-hbase-architecture/#.VdMxvWSqqko&#xf…

开发函数计算的正确姿势 —— 移植 next.js 服务端渲染框架

首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源&#xff…

SpringBoot xml层SQL update之foreach循环的坑

在做二级分类批量删除置父级目录一级分类num-1时,发现数组里放了一样的pid,但是循环里只默认一个pid 145,所以只成功执行了一次num-1 可以选择在mapper接口层执行循环

Zookeeper UI管理界面安装

文章目录1. 安装java环境2. 安装maven打包环境3. 在线安装Git4. 安装zookeeper服务5. 安装zkui6. 开放防火墙7. 浏览器访问1. 安装java环境 下载 略 环境变量 export JAVA_HOME/app/jdk1.8.0_202 export PATH$PATH:$GOROOT/bin export CLASSPATH.:${JAVA_HOME}/jre/lib/rt.j…

虎牙在全球 DNS 秒级生效上的实践

本文整理自虎牙中间件团队在 Nacos Meetup 的现场分享,阿里巴巴中间件受权发布。 这次分享的是全球 DNS 秒级生效在虎牙的实践,以及由此产生的一些思考,整体上,分为以下5各部分: 背景介绍;方案设计和对比…

MySQL 狠甩 Oracle 稳居 Top1,私有云最受重用,大数据人才匮乏! | 中国大数据应用年度报告...

整理 | 屠敏出品 | CSDN(ID:CSDNnews)科技长河,顺之者昌,错失者亡。在这个技术百态之中,中国专业的 IT 社区CSDN 创始人&董事长蒋涛曾多次在公开活动中表示,开发者是对技术变革最敏感的人群。这不仅源于…

JS中split对多个分隔符的处理

关于JavaScript split() 方法,菜鸟教程是这样介绍的: split() 方法用于把一个字符串分割成字符串数组。 提示: 如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。 注意&#xff1…

分布式6大核心专题_分布式ID

文章目录一、号段模式1. 拉取项目源码编译2. springboot集成Leaf3. 配置leaf.properties4. 创建数据库5. 初始化表结构和数据6. 测试案例7. 浏览器测试美团Leaf的号段模式和雪花算法模式生成分布式全局唯一id方式2种 一、号段模式 目前jar在maven仓库中没有上传 1. 拉取项目源…

现代编程语言大 PK,2020 年开发者关心的七大编程语言!

【CSDN 编者按】“如果我们把人类文明想象成汽车的话,那么软件开发行业就相当于汽车的引擎,编程语言就像引擎的燃料。”作为一名开发者,需跟随技术潮流的发展来学习新技术。2020年,你有计划新学一门编程语言吗?本文作者…

一文读懂深度学习:从神经元到BERT

阿里妹导读:自然语言处理领域的殿堂标志 BERT 并非横空出世,背后有它的发展原理。今天,蚂蚁金服财富对话算法团队整理对比了深度学习模型在自然语言处理领域的发展历程。从简易的神经元到当前最复杂的BERT模型,深入浅出地介绍了深…

启动redis闪退/失败

问题:正常启动redis-server.exe时,项目出现闪退情况 解决方式:按照下图完整流程输出即能正常启动

阿里开发者招聘节 | 2019阿里巴巴技术面试题分享:20位专家28道题

为帮助开发者们提升面试技能、有机会入职阿里,云栖社区特别制作了这个专辑——阿里巴巴资深技术专家们结合多年的工作、面试经验总结提炼而成的面试真题这一次将陆续放出(面试题官方参考答案将在专辑结束后统一汇总分享,点此进入答题并围观他…