AD方法概述应用

1. 背景

        异常(异常值、离群点)一般指的是与标准值或期待值有偏离的样本,即与绝大部分数据“长得不一样”。

2. 异常检测(Anomaly Detection)

2.1 AD的一些特点

1. 异常不一定代表是“坏”的事情,但往往是“有价值”的事情,要对异常的成因感兴趣;

2. AD往往是在无监督模式下完成的,我们并不知道哪些数据是异常。

2.2 AD的应用

1. 金融反欺诈、信用卡诈骗检测(把欺诈或金融风险当作异常);

2. 罕见病检测:检测早发的阿兹海默症;

3. 网络流量入侵检测;

4. 机器故障检测:实时监测发现或预测机械故障;

5. 图结构、群体检测:如检测疫情的爆发点。

2.3 AD的挑战与难点

1. 大部分情况下是无监督学习,没有标签信息可以使用;

2. 数据是极端不平衡的(异常点仅占总体的一小部分),建模难度大;

3. 检测方法往往涉及到密度估计,需要进行大量距离/相似度计算,运算开销大

4. 在实际场景中往往需要实时检测,比离线检测难度更高;

5. 在实际场景中常常需要同时处理很多案例,运算开销大;

6. 可解释性比较差,一般很难给出AD的原因,尤其是在高维数据上(但业务方需要了解成因);

7. 在实际场景中往往有一些检测的历史规则,如何与学习模型进行整合。

2.4 AD工具汇总

语言框架备注链接
pythonPyOD

Python Outlier Detection Toolbox,

30多种模型算法,和sklearn用法一致

https://github.com/yzhao062/pyod

https://zhuanlan.zhihu.com/p/58313521

Scikit-Learn包含4种常见算法,简单易用
TODS与PyOD类似,包含多种时间序列检测
Routliers package
AnomalyDetection
JavaELKI
RapidMinerAD扩展

2.5 AD算法汇总

主要模型备注
线性模型PCA
基于相似度的度量算法KNN,LOF,HBOS
基于概率的算法COPOD
集成检测算法孤立森林、XGBOD
NN算法AutoEncoder(自编码器)

2.6 评估方法

因数据极端不平衡,不能简单使用准确度(accuracy)进行评估。

备注
ROC-AUC曲线
Precision @ Rank KtopK 的精准
Average Precision平均精准度

3. 主流模型介绍

3.1 k-近邻检测

1. 思想:计算每个点距离第k个近邻的距离,如果这个距离越大,就越可能是异常点。

2. 调用方法:from pyod.models.knn import KNN

3. 优点:简单易懂、实现简单;

4. 缺点:需要计算距离,运算开销大、不适合高维大数据。

3.2 LOF

1. 思想:计算每个点在局部区域上的密度和其邻域点的密度来判断异常程度。

2. 调用方法:from pyod.models.lof import LOF

3. 优点:简单易懂、实现简单;

4. 缺点:需要计算距离,运算开销大、不适合高维、大量数据。

3.3 HBOS

1. 思想:假设每个维度间都是独立的,分别计算一个样本在不同维度上所处的密度空间,并叠加结果。

2. 调用方法:from pyod.models.hbos import HBOS

3. 优点:简单、开销小,可并行计算,适用于大量数据;

4. 缺点:无法考虑不同特征间的关系,虽然在实际使用中效果很好。

3.4 COPOD

1. 思想:计算一个(多维)样本在每个维度上是异常点的可能性,再合并所有维度上的结果结果。

      传统的统计方法会把特征空间上的每个维度单独建模,然后估算一个样本在这个维度上的“异常程度”(如2sigma以外),但这样忽略了不同维度间并不独立(特征点并非是完全独立的)。而通过copula函数(一种概率模型),我们可以对所有的特征一并联合建模,估算出“经验累积分布函数”,以此来估计每个样本在不同维度上有多么异常。

2. 调用方法:from pyod.models.copod import COPOD

3. 优点:运行快、无需调参,有一定的可解释性;

4. 缺点:决策边界比较复杂。

参考:https://zhuanlan.zhihu.com/p/338189299

3.5 Isolation Forest

1. 思想:利用DT的特点,多次对特征空间进行划分,然后观察孤立一个点的难易程度,异常点往往在密度比较低的地方,更容易被隔离出来(DT深度比较低)。

决策过程是不断对特征空间进行划分,异常点一般处于树的上面(离root更近)。

2. 调用方法:from pyod.models.iforest import IForest

3. 优点:运行快、效果好,适用于大量数据,容易并行;

4. 缺点:需要调的参数比较多,结果有一定的随机性。

3.6 PCA

1. 思想:对全部数据计算特征向量,异常样本距离特征向量的距离比较远,因此该距离可以被用作异常值。

2. 调用方法:from pyod.models.pca import PCA

3. 优点:直觉上简单,运算开销适中;

4. 缺点:作为一种线性模型,效果往往有一定的局限性。

3.7 Autoencoder

1. 思想:通过自编码器的先压缩encoder,再还原decoder,异常点会有更大的重建误差。

类似PCA,但扩展到了非线形模型上。

2. 调用方法:from pyod.models.auto_encoder import AutoEncoder

3. 优点:理解简单,是PCA类模型的非线形扩展;数据量大、特征多的时候适用;

4. 缺点:NN模型往往有一定的随机性,运算开销比较大。

3.8 XGBOD -- 监督学习

1. 思想:如果数据有标签,那么是否可以结合xgb与无监督的检测方法(把无监督的方法当作强特征空间的方法)。从数据增强和提升的角度对原始数据集进行提升:使用各种无监督学习的异常值来作为新的特征。

ML的目标是得到好的数据表示,使得下游的分类任务变得容易。

2. 调用方法:from pyod.models.xgbod import XGBOD

3. 优点:可以同时利用数据中自带的标签,以及无监督学习带来的更好的表达;

4. 缺点:需要标签信息,运算开销比较大。

4. AD模型选择与合并

无监督AD往往需要训练多个异常检测模型,再去合并(如平均),其局限性如下:

(1)不存在选择的过程,因此只能得到平庸的结果;

(2)忽视了AD的局部性特征。

缺乏选择过程的全局性合并过程会使得合并的价值有所降低,得到稳定却中庸的结果。

4.1 AD模型选择与合并:LSCP

        提出一种新的合并框架,来“选择”适合于每个测试点的基础异常检测模型。

1. 解决方案:每当我们获得一个新的样本X进行预测时,先评估哪些检测模型在这个点邻近的区域上表现良好,那我们就可以相信它会在X上表现良好。所以最简单的就是对于X,找到在它附近的训练数据上表现最好的模型C_{i},然后输出C_{i}(X)作为X的结果即可。

2. 流程:

(1)训练多个基础AD器;

(2)生成伪标签用于评估;

(3)对于每个测试点生成局部空间,即近邻;

(4)模型选择与合并,即对所有的基模型在我们找到的局部空间上用生产的伪标签进行评估,和伪标签在局部空间上Pearson大的被选作最终输出模型。

3. 调用方法:from pyod.models.lscp import LSCP

4.2 AD模型选择:MetaOD(under review)

1. 背景:拿到一个新的数据集想做AD,该怎么选择最合适的AD模型?

2. 挑战:如何在无监督前提下对任意数据集选择合适的AD模型。

3. 思路:把无监督的模型选择问题转化为”冷启动下的推荐问题“,给数据集选择模型就像给新用户推荐电影。可以借用RS的方法,如矩阵分解进行模型选择。

4. 训练与学习方法:首先需要得到大量的数据(有标签)在各种AD模型下的表现,即模型表现矩阵P,之后对P进行矩阵分解。

5. 具体流程:

(1)得到历史数据在不同模型上的表现矩阵P;

(2)对其进行分解成U和V矩阵;

(3)得到数据的表示embedding,并训练一个回归模型f,使得数据表示回归到矩阵U上;

(4)当拿到新数据时,先得到其数据表示X^{'},并使用f得到对应的U^{'},最终得到预测的模型表现P^{'}=<f(X^{'}),V>

6. 调用方法:

from metaod.models.predict_metaod import select_model

4.3 AD训练加速: SUOD

在高维度、大数据上训练多个无监督AD模型,运算开销会很大,可以在不同层面上进行加速:

1. 数据层面:进行降维,SUOD使用JL(Johnson-Lindenstrauss) projection,可以保证数据多样性的前提下降维。

2. 模型层面:利用知识蒸馏的思想(用小的NN去模拟大的NN输出),使用监督模型来学习(高开销的)无监督模型的训练结果。(无监督的密度估计开销很大)

3. 系统层面:每个模型的开销各不相同,在做分布式学习时可能每个worker上的负载不同,导致先完成的worker需要等待还未完成的worker。为此尝试去预测不同模型学习所需的时间,并根据预测值进行合理调度。

调用方法:from suod.models.base import SUOD

参考:https://zhaunlan.zhihu.com/p/112588169

5. 一些技巧

1. 假设数据是有标签的,优先使用监督学习(如xgb),如果数据量不是非常大,也可尝试xgbod;

2. 不知道如何选择合适的AD模型时,优先选择IF,也可以使用MetaOD进行自动模型选择;

3. 如果手动选择模型,需要考虑数据量和数据结构。当数据量比较大(data:10w+,fea:100+),优先选择可扩展性强的算法,如IF、COPOD、HBOS,其中IF、COPOD可解释性比较好;

4.  如果训练和预测过程比较缓慢、开销大的话,可以使用SUOD进行加速;

5. 如果数据量大、特征多,可以尝试基于NN的方法,并用GPU并行等;如果数据量不大,且追求精度比较高的结果,可以尝试随机训练多个检测模型,并使用LSCP进行合并。

6. AD落地中的考量和研究方向

6.1 考量

1. 不要尝试ML模型全部取代传统模型,应该尝试合并ML模型和基于规则的模型;

2. 可以尝试用已有的规则模型去解释AD模型。

6.2 研究方向

6.2.1 模型选择与调参

        无监督学习缺乏有效的评估与反馈,可否使用伪监督的方法,如把多个模型的结果取平均当伪标签。

6.2.2 大规模异常检测

1. 并行化:现在缺少基于spark的AD工具,在大数据上AD很难发力;

2. 如何应对evolving feature(特征是变化的)以及在线检测covariate shift;

3. 模型压缩与优化:

(1)知识蒸馏:SUDO文章中尝试使用监督模型(RF)来替代无监督模型(kNN、LOF);

(2)Quantization: 降低精度。

6.2.3 边缘计算

1. 移动端上的AD:

        如何在手机、智能手表上部署AD模型,主要还是依靠模型压缩;但测试成本比较高,比如android端需要使用java来部署和simulate。

6.2.4 AD中的公平性 -- FairOD

      是否特定的特征(性别、年龄、种族等)会导致某一类群体更容易被认为是异常。

参考:https://arxiv.org/abs/2012.03063

6.2.5 基于DL的AD工具库

1. 越来越多的检测方法走向了DL(如基于GAN和VAE),但相关的工具库是缺失的;

2. 开发PyOD V2 for DL

参考:https://www.zhihu.com/question/324999831/answer/716118043

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

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

相关文章

贝锐蒲公英企业路由器双机热备,保障异地组网可靠、不中断

对于关键业务&#xff0c;比如&#xff1a;在线支付系统、远程医疗监控系统、重要数据中心等&#xff0c;一旦网络发生故障&#xff0c;可能导致巨大的损失或影响&#xff0c;因此需确保网络拥有极高的可靠性、稳定性和容错能力。 面对此类场景和需求&#xff0c;贝锐蒲公英异…

【数据结构与算法】归并排序(详解:递归与非递归的归并排序 | 赠:冒泡排序和选择排序)

前言 本篇博客会对排序做一个收尾&#xff0c;将最经典的七大排序介绍完毕。 这次的重点正如标题&#xff0c;主要讲的是归并排序&#xff0c;还会带过相对简单很多的冒泡排序和选择排序。在最后还会给这七大排序做出一个时间复杂度和稳定性展示的总结收尾。同时&#xff0c;这…

(4)(4.6) Triducer

文章目录 前言 1 安装triducer 2 故障排除 3 参数说明 前言 Triducer 集速度、温度和深度传感器于一体。埃文在这篇 ardupilot.org 博文底部提供了这些说明(Evan at the bottom of this ardupilot.org blog post)。 1 安装triducer 下面的示例提供了在 Pixhawk 上安装 tri…

C语言中的数组与函数指针:深入解析与应用

文章目录 一、引言二、数组的定义1、数组的定义与初始化2、char*与char[]的区别1. 存储与表示2. 修改内容3. 作为函数参数 三、字符串指针数组1. 定义与概念2. 使用示例3. 内存管理 四、从字符串指针数组到函数指针的过渡1、字符串指针数组的应用场景2、函数指针的基本概念3、如…

【管理咨询宝藏48】AA银行信息科技提升分析报告

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏48】AA银行信息科技提升分析报告 【格式】PPT版本&#xff0c;可编辑 【关键词】战略规划、商业分析、管理咨询 【强烈推荐】这是一套市面上非常…

【代码篇】事件监听函数的内存泄漏,都给我退散吧!

前言 内存泄漏是个很严肃的问题&#xff0c;可是迄今也没有一个非常有效的排查方案&#xff0c;本方案就是针对性的单点突破。 工作中&#xff0c;我们会对window, DOM节点&#xff0c;WebSoket, 或者单纯的事件中心等注册事件监听函数, 添加了&#xff0c;没有移除&#xff…

开源软件技术社区方案

开源软件技术社区是一个由开发者、贡献者、用户和维护者组成的共享平台&#xff0c;主要目的是打造技术、软件产品良性互动、开源技术安全可控的软件生态环境&#xff0c;实现可复用应用或服务的快速部署与使用、完成资源与能力的高度共享、促进社区成员的共建共赢&#xff0c;…

c语言--枚举类型(声明、使用、优点)

目录 一、枚举类型的声明二、 枚举类型的优点三、 枚举类型的使用 一、枚举类型的声明 枚举顾名思义就是一一列举。 把可能的取值⼀⼀列举。 比如我们现实生活中&#xff1a; ⼀周的星期⼀到星期日是有限的7天&#xff0c;可以⼀⼀列举 性别有&#xff1a;男、女、保密&#x…

渐进式图片解决前端在页面中使用大图,图片体积过大导致页面出现白屏现象

1、演示 可以看到&#xff0c;图片还在拼命加载的时候&#xff0c; 页面上就已经有内容了 2、什么渐进式图片 图片一开始是模糊的&#xff0c;然后逐渐的开始变的清晰。如果页面上有一些大图&#xff0c;如果直接扔给浏览器的话那么图片的传输时间就会比较长&#xff0c;用户就…

软考高级架构师:校验码概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

【STM32】ST-LINK 下载时遇到的问题

如果出现“ST-Link USB communication error”ST-Link USB通信错误&#xff0c;则需要启动STM32 ST-LINK Utility&#xff0c;点击【ST-LINK】->【Firmaware】更新固件&#xff0c;然后打开Kei&#xff0c;点击魔术棒->->Debug->Settings&#xff0c;开到出现类似“…

电磁兼容故障整改-静电放电抗扰度不合格

电磁兼容故障整改-静电放电抗扰度不合格 ESD干扰机理不合格的主要原因 静电放电对设备的影响有下面几种安装滤波器也对静电放电有所帮助通过良好的搭接与接地防止ESD ESD干扰机理 ESD干扰电流其实是一种共模电流&#xff0c;因为ESD电压总是以参考接地板为基准的。如空击穿放电…

从redux的基本概念渐进式理解redux/toolkit的用法

概念 Redux toolkit是帮助提高redux开发效率的一个库 React-redux 是将React和Redux toolkit绑定在一起的一个库 action 是一个对象,里面有一个type属性 action creator是一个函数,这个函数可以返回上面的action对象。 reducer 是一个函数,接受两个参数(initilastate, acti…

微软邮箱被锁住,该如何解除限制?

ChatGPT账号是微软邮箱注册的&#xff0c;我们在登陆微软邮箱时&#xff0c;http://www.outlook.com&#xff0c;不需要开魔法工具&#xff0c;直接就可以登陆&#xff0c;否则会出现安全验证&#xff0c;限制登陆。 那么如果账号被锁&#xff0c;我们该如何解除限制呢&#x…

mongoDB 优化(2)索引

执行计划 语法&#xff1a; db.collection_xxx_t.find({"param":"xxxxxxx"}).explain(executionStats) 感觉这篇文章写得很好&#xff0c;可以参考 MongoDB——索引&#xff08;单索引&#xff0c;复合索引&#xff0c;索引创建、使用&#xff09;_mongo …

asf是什么格式的文件?用手机怎么打开?

由于手机操作系统和硬件的限制&#xff0c;大部分手机并不直接支持asf文件的播放。因此&#xff0c;如果你想在手机上打开asf文件&#xff0c;你可能需要先将文件转换为手机支持的格式&#xff0c;如MP4。可以通过使用一些视频转换软件来实现&#xff0c;比如野葱视频转换器。 …

【VSCode】修改插件地址

不想放在原始C盘下面C:\Users\{用户}\.vscode\extensions为了后续存储空间考虑&#xff0c;想通过添加环境变量创建名为VSCODE_EXTENSIONS的环境变量&#xff0c;内容指向vs Code扩展所在目录即可 直接配置环境变量&#xff0c;不要在有空格的文件夹下面 变量名称&#xff1a;…

TCP的十个重要的机制

注&#xff1a;TCP不是只有十个机制 TCP 可靠传输是tcp最为重要的核心&#xff08;初心&#xff09; 可靠传输&#xff0c;并不是发送方把数据能够100%的传输给接收方 而是退而求其次 让发送方发送出去数据之后&#xff0c;能够知道接收方是否收到数据。 一但发现对方没有…

CVE-2021-30517:Type confusion bug in LoadSuperIC

前言 这个漏洞是一个比较老的洞&#xff0c;之所以分析这个漏洞&#xff0c;只要是想再学习一下 ICs 相关的知识。并该漏洞的利用是利用与 String/Function 之间的混淆&#xff0c;比较有意思。 环境搭建 sudo apt install python git checkout 7d5e5f6c62c3f38acee12dc4114…

vite.config.js

Vue3vite vite和webpack区别&#xff1f; 1.vite服务器启动速度比webpack快&#xff0c;由于vite启动的时候不需要打包&#xff0c;也就无需分析模块依赖、编译&#xff0c;所以启动速度非常快。当浏览器请求需要的模块时&#xff0c;再对模块进行编译&#xff0c;这种按需动态…