异常检测方法综述
异常检测作为数据挖掘和机器学习领域中一个重要的方向,用于识别数据集中不符合预期模式的数据点(异常点)或模式。
它有广泛的应用场景,其中包括金融场景欺诈识别、网络安全场景网络异常流量识别、电商场景基于交易数据的羊毛党/恶意刷评等识别,监控预警类的包括生态灾难的预警(基于风速、降雨、气温等指标预测未来极端异常)、互联网平台的系统异常智能化识别预警。
除此之外,还有很多行业都在使用异常检测技术来帮助企业降低风险,并为业务提供指导建议。
那异常检测都有哪些方法和难点呢,不同场景和条件下如何选择合适的方法?
本文将较为全面、系统地介绍异常检测方法,重点对基于机器学习的方法展开阐述。
同时,会分析异常检测中的难点,对各方法进行比较,并探讨适用场景的选择。
1.异常检测概述
异常检测(Anomaly Detection 或 Outlier Detection)指的是通过数据挖掘手段识别数据中的“异常点”
1.1 定义
What is anomaly detection?
什么是异常检测?
Anomaly detection (aka outlier analysis) is a step in data mining that identifies data points, events, and/or observations that deviate from a dataset’s normal behavior. Anomalous data can indicate critical incidents, such as a technical glitch, or potential opportunities, for instance a change in consumer behavior. Machine learning is progressively being used to automate anomaly detection.
异常检测(也称为离群值分析)是数据挖掘中的一个步骤,它可以识别偏离数据集正常行为的数据点、事件和 / 或观察结果。异常数据可以指示关键事件,例如技术故障,或者潜在的机会,例如消费者行为的变化。机器学习正逐渐被用于实现异常检测的自动化。
1.2 异常点
目前比较公认的分类方式为是那种:
1.单点异常(参数异常等): 也称为全局异常, 即某个点与 全局大多数点都不一样,那么这个点构成了单点异常。
2.上下文异常(一个用户的多个行为):这一类异常多为 时间序列数据 中的异常, 即某个时间点的表现与前后时间段内存中较大的差异,那么该异常为一个上下文异常点。例如,在某个温带城市 夏天的气温的时序数据中,其中有一天温度为10度,而前后的气温都在25-35度。
3.集体异常(一个群体、批量):是由多个对象组合构成的,即单独看 某个个体可能并不存在异常,但个体同时出现,则构成了一种异常。
集体异常可能存在多种组成方式,可能是由若干个 单点组成,也可能是由几个序列组成。
1.3 问题难点
- 有监督学习:很多实际场景中,数据是没有标签的,或者有标签的标签可信度很低。这就导致很难使用很多成熟的有监督学习方法
- 数据噪音问题:噪音和异常点混杂在一起,难以区分
- 业务风险分类问题:很多场景的不同类型风险的数据混在一起,没有区分类型,不了解每周风险类型的定义。以致于没有更准确的标签。
由于没有准确的标签、没有对风险类型的准确理解,就会导致陷入鸡生蛋 or 蛋生鸡的循环中。 因此需要(人和系统)准确的理解风险类型,准确的定义风险和对风险数据打标,或者通过无监督方法结合专家经验反复迭代模型。
那具体的技术手段是将无监督学习方法和专家经验相结合。基于无监督学习得到检测结果, 并让领域专家基于检测结果给出反馈,以便我们及时调整模型,反复进行迭代,最终得到一个越来越准确的模型。
1.4 检测方法
检测方法主要分4大类:基于统计的方法、基于距离的方法、基于密度的方法、基于机器学习的方法。
方法 | - | 说明 | |
---|---|---|---|
统计检验 | 原理 | 假设数据符合某种统计分布(如正态分布、泊松分布等) 通过对正常数据的统计分析来确定数据的分布参数,如均值、方差等 |
|
条件和优势 | 在数据分布相对简单且符合已知统计分布的情况下非常有效。 优势在于计算简单、易于理解,并且在数据量较大且分布较为稳定的情况下能够快速有效地发现异常 |
||
局限性 | 对数据的分布假设要求较高 如果实际数据的分布不符合假设的分布,或者数据受到噪声、离群点的干扰,检测效果可能会很差 例如,在网络流量数据中,流量模式复杂多变,很难用简单的统计分布来描述 |
||
基于距离 | 原理 | 主要考虑数据点之间的距离关系 计算每个数据点与其他数据点之间的距离(如欧几里得距离、曼哈顿距离等),并根据距离来判断异常 |
|
条件和优势 | 不需要对数据的分布做过多假设,适用于各种类型的数据 在聚类分析场景中,如果数据点明显偏离已有的聚类中心,就可以通过基于距离的方法将其检测为异常。 优势在于能够处理复杂形状的数据分布,并且对数据的局部异常比较敏感。 |
||
局限性 | 计算复杂度较高,尤其是在处理大规模数据集时,需要计算大量的数据点之间的距离。 距离阈值的选择比较困难,如果阈值设置不当,可能会导致过多的误报或漏报。 |
||
基于密度 | 原理 | 主要关注数据点周围的密度情况 正常数据点通常处于高密度区域,而异常点则处于低密度区域 局部离群因子(LOF)算法是一种典型的基于密度的方法 |
|
条件/优势 | 在发现数据集中的局部异常方面表现出色 势在于能够有效地处理具有不同密度区域的数据,并且可以发现各种形状和大小的异常模式 |
||
局限性 | 计算密度的过程比较复杂,尤其是对于高维数据,计算成本较高 | ||
机器学习方法 | 监督学习方法 | 原理 | 数据打标,正常数据和异常数据都有明确的标签 利用分类算法(如支持向量机、决策树、神经网络等)来训练模型,使模型能够根据输入的数据特征预测数据是否异常 |
条件/优势 | 有足够多的标记数据时,监督学习方法能够达到较高的准确性 | ||
局限性 | 获取足够的标记数据往往比较困难,尤其是对于异常数据,因为异常事件通常是罕见的 模型的泛化能力可能受到训练数据的限制,对于新出现的异常模式与训练数据差异较大时可能无法有效识别 |
||
无监督学习 | 原理 | 不需要标记数据,而是通过对数据的内在结构进行挖掘来发现异常 聚类算法:可以将数据分为不同的簇,那些不属于任何簇或者与各个簇中心距离较远的数据点可能就是异常点 主成分分析(PCA):将数据投影到低维空间,观察数据在新空间中的分布情况来发现异常, 如果某个数据点在低维空间中的投影偏离了正常数据的分布范围,就可以判定为异常。 |
|
条件/优势 | 由于无序标记数据,在实际应用中更容易实施 可以处理大规模的、未标记的数据,并且自动发现数据中的潜在模式和异常 |
||
局限性 | 对数据的质量和数据的内在结构假设比较敏感 如果数据的噪声较大或者数据的结构不符合假设,可能会导致误判 无监督学习方法通常难以解释检测结果,即难以确定为什么某个数据点被判定为异常 |
||
半监督学习 | 原理 | 结合了监督学习和无监督学习的特点。通常利用少量的标记数据和大量的未标记数据来进行学习 通过两个或多个不同的学习器分别对标记数据和未标记数据进行学习,然后相互补充和修正,以提高异常检测的性能 例如,在医疗数据异常检测中,少量的已确诊病例数据作为标记数据,结合大量的未确诊病例数据, 通过半监督学习方法可以更准确地发现异常的医疗指标 |
|
局限性 | 依赖于标记数据的质量和未标记数据分布情况 如果数据的分布差异较大、标记数据的质量不高,会影响模型学习效果 半监督学习方法的模型设计和训练过程相对复杂,需要合理地选择学习策略和算法 |
另外异常检测算法依据数据特性和输出形式等从4个角度划分为:时序相关、时序独立;全局检测、局部检测;标签、异常分数的输出形式。
除以上主要的四种,还包括基于深度、基于偏差的方法。现在很多流行的算法借鉴了这些思想,如孤立森林等。
如今 用于异常检测的算法已经非常多了,但万变不离其宗,无论优化到什么程度,他们都是由一些原始的模型和思想衍生出来的。
2.应用场景概览
本文开头介绍的,应用场景包括金融场景欺诈识别、网络安全场景网络异常流量识别、电商场景基于交易数据的羊毛党/恶意刷评等识别,监控预警类的包括生态灾难的预警(基于风速、降雨、气温等指标预测未来极端异常)、互联网平台的系统异常智能化识别预警。
除此之外,还有很多行业都在使用异常检测技术来帮助企业降低风险,并为业务提供指导建议。
2.1 网络安全
另外着重在网络安全领域,包括
(1)网络入侵检测:网络系统中会产生大量的网络流量数据,包括数据包的源地址、目的地址、协议类型、流量大小等信息。(自编码器等)异常检测可以对正常的网络流量模式进行学习,当出现与正常模式不同的异常流量时,如大量的恶意扫描、DDoS 攻击等,能够检测到这种异常,及时发出警报并采取相应的防护措施,保护网络系统的安全。
(2)用户行为异常检测:对于企业的内部网络系统或在线服务平台,(自编码器等)异常检测可以分析用户的行为数据,如登录时间、访问的页面、操作行为等,检测出异常的用户行为,例如异常的频繁登录失败、异常的大量数据下载等,可能是用户账号被盗用或内部员工的违规操作等情况。
2.2 其它领域
其他领域包括:
工业制造领域:设备故障预测与诊断、产品质量检测;金融领域:信用卡欺诈检测、金融市场异常检测;医疗健康领域:疾病早起预警、医疗影像异常检测;智慧交通领域:交通流量异常检测、车辆故障检测;能源领域:电力系统异常检测、能源消耗异常检测
2.3 应用案例
一些典型的应用案例(自编码器异常检测技术在网络安全、用户行为分析上的应用):
1.网络入侵检测:基于堆叠自编码器的入侵检测、结合深度学习模型的入侵检测
2.用户行为异常检测:在线服务平台用户行为检测、企业内部网络用户行为分析
3.恶意软件检测:基于行为特征的恶意软件检测、恶意软件变种检测
4.网络流量异常检测:异常流量模式识别、流量特征异常检测
这些典型的案例(异常流量模式识别、流量特征异常检测、结合深度学习模型的入侵检测、在线服务平台用户行为检测)如何做呢?
当前主流的做法主要是通过机器学习、数据挖掘技术来实现数据集中的异常点或模式。
2.4 发展趋势
Autoencoder-based anomaly detection
与其它技术的融合 - 与深度学习其它模型结合:实时性和适应性的增强:实时检测、动态使用。
实时检测:随着网络攻击的速度和复杂性不断增加,对异常检测的实时性要求越来越高。未来,自编码异常检测技术将不断优化算法和模型结构,提高检测的速度和效率,以满足实时检测的需求。例如,采用硬件加速技术,如使用 GPU、FPGA 等硬件设备来加速自编码器的计算,减少检测的时间延迟;或者开发轻量级的自编码器模型,在保证检测准确性的前提下,降低模型的计算复杂度,提高实时性。
3.机器学习方法
关于异常检测,首先 从数据类型角度,异常检测可以基于以下几种类型的数据: 数值类型(非时间序列)、序列类、图像类、文本类.
而图像和文本类在安全领域更多的是存在于网络舆情、内容类风控场景,另外其它领域包括医学影响等场景。
所以安全领域(流量、反作弊、交易、营销等场景),我们更多的是基于 数值类、序列类数据。
那从识别的算法角度,主要有以下几类:机器学习类(孤立森林、SVM、xgb); 深度学习算法(自编码器、长短期记忆网络);统计方法(正态分布);聚类等.
另外,除了安全领域的异常检测,其它一些场景的基于序列类的异常检测都可以基于自编码器和以下算法去做.
3.1 方法概览
这些方法的优缺点如下(AD指对anomaly detection的适用性),其中深度学习算法包括:Autoencoder、LSTM或RNN、GAN、CNN.
算法 | 优点 | 缺点 | 序列数据 | 可解释性 | 计算资源 | 数据适应性 | 数据质量要求 | AD |
---|---|---|---|---|---|---|---|---|
XGBoost | 高效性:训练和推理速度快;灵活性好;可解释性好 | 对序列数据的特殊性考虑不足; 特征工程的依赖性(模型性能好很大程度上依赖特征工程的质量);超参数调整复杂 | 较差:无法有效处理时间依赖关系和顺序信息 | 优:可以通过特征重要性分析和理解模型决策过程 | 适中: 树集成算法,可并行计算, 效率高 | 支持各种类型数据(数值、文本等);适合结构化数据 | 较灵活: 对异常值和噪声有一定的容忍度。通过集成多个弱学习器,在一定程度上可以减轻个别数据点的不良影响;同时支持缺失值处理策略。 | 适用性好 |
Autoencoder | 强大的特征提取能力;无监督学习 | 训练难度较大; 解释性较差;信息丢失问题;对异常值敏感。异常数据比例较低时,效果可能不佳 | 较好:对复杂时间依赖关系的捕获有限 | 较差:学习到的低维表示通常难以直观解释,难以理解模型是如何识别序列数据中的模式的 | 适中:结构相对简单,不需要特别强大的计算能力 | 较好:序列数据、图像数据、文本数据等都可以支持,在不同领域发挥作用 | 要求较低:算法具有一定的鲁棒性,能够从含有噪声的数据中学习潜在特征表示。无监督对数据的标注要求不高;即使存在异常值或缺失值,也可能学到相对稳定的特征表示 | 很好 |
LSTM | 处理序列数据(专业的,能够捕捉长期依赖关系和时间动态性);适应性强;学习能力强 | 计算复杂度高;超参数调整困难;对数据的质量要求高 | 优:专门设计用于处理序列数据 | 较弱:通过一些方法可以提升模型理解和解释能力 | 较高:内部结构复杂,包含多个门控单元 | 较好:支持时间序列、文本数据、音频数据 | 较高:受到数据量和数据分布的影响,如果量小或者分布不均衡,可能会导致过拟合或欠拟合;噪声过大影响性能 | 一般 |
Isolation Forest (隔离森林) |
基于决策树的无监督算法,尤其适用于异常检测任务;速度快 | 对局部异常不敏感、不适合高噪声数据、数据不平衡的性能下降 | - | - | 较低:树模型,并行计算优势、内存需求量低 | - | - | 很好 |
GAN | 思路类似自编码,学习到正常流量的模式;学习能力好 | 训练不稳定、模式坍塌、可解释性差 | - | - | 较低:树模型,并行计算优势、内存需求量低 | - | 较高:数据多样性要求较高、数据准确性 | - |
Seq2Seq | 能够处理长期依赖,扩展性好; | 训练难度大,对数据质量要求高,推理速度相对较慢 | - | - | 较高:推理速度相对较慢 | - | 较高:需要大量高质量标注数据来训练;存在噪音、错误标注或者数据不均匀等,影响模型性能 | - |
GRU(门控循环单元) | - | |||||||
Hidden Markov Model(HMM-隐马尔可夫模型) | - | |||||||
LOF(局部离群因子) | - | |||||||
One-Class SVM | - | |||||||
多模态 | - |
识别的效果往往依赖于特征工程,选择一些好的特征尤为重要. 例如:在滑块的人机识别场景中,滑动速度的变化、滑块的停顿和抖动、路径中的微小偏移、点击和按下的时间等
3.2 如何选择
如何选择合适的模型
主要从以下几个方向考虑:数据特点、异常的性质和定义、模型的性能和资源限制。
方向 | 子项 | 原定义公式 |
---|---|---|
数据特点 | 数据类型 | 结构化数据(表格数据):(如交易记录、传感器数值等)传统统计 / 机器学习 / 深度学习 非结构化数据(图像、音频、文本):特定深度学习(图像 - CNN、音频 - RNN、文本 - NLP) |
数据分布 | 已知分布的数据(如正态分布):已知 - 基于分布假设的统计 复杂或未知分布的(如多峰、偏态):当数据分布未知或具有复杂的形态,如网络流量数据、金融市场数据等。无监督学习模型(如聚类模型、自动编码器系列)/ 非参数统计模型(如核密度估计)更能适应这种情况,它们可以在不依赖于特定分布假设的情况下,挖掘数据中的异常模式。 |
|
数据量 | 小数据量:简单统计 / 距离法 大数据量(样本数量多)深度学习 / 集成学习。能够处理大规模的数据,挖掘数据中的复杂模式和关系,从而更有效地检测异常。不过,在使用深度学习模型时,需要考虑计算资源和训练时间等因素。 |
|
异常特征 | 比例 | 高 - 监督学习;如果异常数据在总体数据中占比较高,那么可以考虑使用监督学习模型,将异常检测作为一个分类问题来处理 低 - 不平衡处理模型 / 无监督(孤立森林)。需要考虑模型对少数类(异常类)的识别能力,可以选择对不平衡数据处理效果较好的模型,如带有平衡数据机制的集成学习模型(如 SMOTE + 随机森林),或者专门用于异常检测的无监督模型(如孤立森林,它对少数异常数据敏感)。 |
定义/形式 | 规则可定义 - 规则 / 阈值法;复杂 - 深度学习 / 复杂无监督(聚类):对于复杂的异常情况,如数据的整体模式发生变化(如时间序列数据的趋势改变)或语义上的异常(如文本中的语义不符合正常语境),深度学习模型(如 VAE 用于学习数据模式、基于 Transformer 的模型用于文本语义理解)或复杂的无监督模型(如基于聚类的模型用于发现模式变化)更适合用来检测这种复杂的异常。 | |
模型性能 | 高准优先 (低误报率) |
考虑基于规则的模型(因为规则明确)或具有良好可解释性的模型(如决策树),这样可以通过调整规则或参数来控制准确性。同时,一些异常检测模型提供了调整阈值的功能,通过合理设置阈值也可以提高准确性。 |
高召优先 (低漏报率) |
为尽可能多地检测出异常。对异常数据敏感的模型(如孤立森林,它倾向于将与众不同的数据点识别为异常)或具有强大学习能力的深度学习模型(如自动编码器系列)。但在实际应用中,需要结合后续的验证和过滤机制来平衡召回率和准确性 | |
资源方面 | 计算资源 | 有限的计算资源(如内存、CPU、GPU):选择计算复杂度较低的模型。xgb、自编码器.. |
时间限制 | 实时性要求(快速检测):需要实时进行异常检测的场景,如工业监控系统、网络入侵检测系统等。选择简单快速的模型(如基于阈值的快速判断方法、轻量级的机器学习模型经过优化后)或通过模型压缩和加速技术(如量化、剪枝后的深度学习模型)来满足实时性需求 |
3.3 自编码器
What is Autoencoder?
自编码器尽可能地学习产生与输入相同的输出。通过这个学习过程,输入的表示可以在潜在空间中被有效地压缩。换句话说,它压缩了维度并将输入的表示存储在潜在空间中。
自编码器的目标是学习如何将输入数据编码为低维表示,然后再将这个低维表示解码回尽可能接近原始输入的数据。所以在训练自编码器时,输入数据既是期
4.参考资料
- 企业安全领域异常检测,算法包括xgboost、自编码器、GAN。 实施和比较 有监督和无监督学习技术。 [很好的课程]
其实有很多官方的资料都很先进,重要的是如何快速吸收,达到目的。如何有效的获取信息(比如找到关键的高质量的内容)。 第二点是 也是重要的是如何应用这些新技术和新知识,我理解是一个怎么提出问题的事。
4.1 项目实践
kaggle:IsolationForest方法识别信用卡欺诈
kaggle的话题:基于时间序列数据的异常检测
其中很有意思或者insightful的观点是:不相信95%的时间序列异常检测的论文。相关是youtube视频见:https://www.youtube.com/watch?v=Vg1p3DouX8w
原因分析。其中主要的一个是 机器学习方法的复杂性和过拟合:像LSTM复杂性比较高,不一定适合所有的应用场景,并且往往缺乏可解释性和有较高的计算成本。
LSTM对于序列数据的捕获能力或者效果比较高,但由于其模型的复杂度较高,不具有普适性。
对于一些简单的时间序列问题,使用LSTM可能显得“杀鸡用牛刀”,导致复杂度增加而未显著提升效果。
此外,LSTM对数据特性较为敏感,在数据具有高噪声或非线性模式时,表现可能较差。
对于实时性要求较高的应用场景,如在线监测和实时异常检测,LSTM的计算效率难以满足需求。
模型可解释性差了将影响 难以建立信任、针对错误和改进、影响最终正确决策。
RNN Autoencoder、VAE 「循环自编码器、变分自编码器」: 能够捕获时间序列中的时间依赖性。
循环自编码器、VAE 在实时场景可以用吗。对计算资源要求高吗。相比较 标准的自编码器?
它们对计算资源的要求通常较高,但可以通过适当的优化方法来降低对资源的消耗。
优化方案:
分批处理:可以通过对数据进行分批处理(batching)来提高计算效率,尽量减少延迟。
模型压缩:通过量化、剪枝、权重共享等方法压缩模型,减少计算资源消耗。
硬件加速:使用GPU、TPU等硬件加速设备来提高计算效率。
近似推理:通过使用更高效的推理算法(如重要性采样等)来减少计算负担。
简化模型:通过减少网络层数、隐藏单元数,或者使用轻量化的变种(如β-VAE)来降低计算资源需求。
增量学习:在实时场景中,可以使用增量学习方法,使得模型在新的数据到来时逐步更新,而不需要完全重新训练。
VAE是一个平衡推理时间和建模能力的选择