一、异常检测的进展
anomaly:偏离标准、正常或预期的东西。
Something that deviates from what is standard, normal, or expected.
实时检测异常的能力是非常有价值的。想象一下:
-注意大型涡轮机故障的早期预警信号。
-看心跳的细微变化表示疾病。
-在股市数据中发现重大异常。
-确认员工行为的变化,这是安全漏洞的信号。
-发现偏离典型的路线,提供绑架的早期预警信号。
异常情况并不总是不好的,也不意味着失败。例如,发现消费者购买习惯的微妙变化可以提供一个发现新趋势的机会。在当今世界,收集的数据量呈爆炸式增长,探测异常的机会也随之激增。
然而,准确地探测异常是非常困难的。首先,所谓的异常现象是不断变化的。随着软件的更新或行为的改变,系统会随着时间的推移而演进。因此,有效的异常检测需要一个系统不断的学习。其次,为了发现异常,我们不能等待一个指标明显超出范围。早期检测需要能够检测不明显或容易检测到的模式的细微变化。此外,由于异常的性质是出乎意料的,一个有效的检测系统必须能够确定新事件是否异常,而不依赖预先设定的阈值。
在Numenta,我们对这个问题采取了新的方法,并创造了我们认为是世界上最强大的异常检测技术。这种方法来源于我们对新大脑皮层的理解,它本身就是一个强大的预测和异常检测系统。我们的一系列应用程序利用了这种理解,在两个维度上推动了最先进的突破:1)我们如何利用大脑的过程来建模数据,以及2)我们如何基于该模型来检测异常。本文将通过说明Numenta的应用程序如何在不同类型的流数据中检测异常情况来描述这些进展。
二、数据流中的异常检测
流数据的早期异常检测在许多领域都非常有价值,比如IT安全、金融、车辆跟踪、医疗、能源网格监控、电子商务——在任何应用中,都有传感器产生重要的数据随时间变化。基于HTM的应用程序大大改进了现有的流数据异常检测方法:
容易使用性:基于htm的方法不需要训练数据或单独的训练步骤。自动模型构建和学习消除了手动定义和维护模型和数据集的需要。这大大减少了用户的时间和精力。
可伸缩性:每一个被监视的指标都会自动建立独特的模型。
灵活性:持续学习使应用程序能够不断更新其模型,以识别每一个指标的新或变化的行为,而无需人工干预。
通用性:相同的HTM学习算法在很多不同领域中工作,在这些领域流式数据分析非常重要。
基于htm的应用程序擅长快速学习模式,并在指标数据流中检测异常。下面的图1总结了Numenta用于建模指标和识别异常的关键步骤。对于IT,Numenta的基于HTM的IT分析应用程序将在接下来的章节中作为一个例子,我们将进一步详细讨论这些步骤。
三、建立模型
HTM是用于IT度量的基于htms的异常检测应用程序。HTM为它自动构建一个单独的模型,用于监视每一个指标。度量值被发送到HTM,或者HTM可以请求度量数据。度量值与时间戳结合在一起,可以帮助HTM学习与时间或工作日相关的模式。度量值和时间被输入到一个编码器中,该编码器将它们转换为稀疏分布表示(SDR)。SDRs支持多个有用的属性,比如跨数据流类型的一般化、对噪声的强烈抗性以及对数据点的语义含义的附件。
接下来,一组sdr被输入到HTM学习算法中。这些算法本质上是对新大脑皮层一小部分的模拟,负责在服务器度量数据流中学习时间序列。时间序列就像旋律;它们是随时间变化的模式。HTM学习算法学习他们在数据中看到的时间模式;他们不断学习,所以新的模式取代旧的模式,就像你记住最近的事件比旧的事件更好。如果一种新的模式与之前学习的模式不同,那么HTM学习算法将做出一个适当的预测,就像你第一次听到新旋律时的预测一样。
四、异常检测
当你的大脑试图在一个旋律中预测下一个音符时,HTM的HTM学习算法会不断地预测在度量数据流中接下来可能发生的事情。这些复杂的算法往往同时预测多个事件,并为每个预测提供一个可能的分数。当每个新的度量数据点到达时,HTM学习算法将它们的预测与新的输入进行比较,以确定预测是否正确。其结果不是简单的“是或否”。每一个预测加上新的数据点都会带来一个标量值的错误。
然而,在单个时间点预测某个指标的错误通常不足以探测异常,因为几乎所有的数据流都有一些不可预测性或噪声。即使是最好的模型,也只有80%的时间能够正确预测下一个值。如果我们把每一个不正确的预测都报告为异常,那就会有太多的误报。
因此,对于减少假阳性来说,下一步是至关重要的。它创建了错误分数的运行平均值(在过去的一个小时内),然后将当前的运行平均误差与过去几周平均误差的分布进行比较。通过这种方式,HTM可以精确地确定当前运行的平均错误得分的可能性。如果HTM能够说话,它会说,“根据我在数据中发现的过去三周的时间模式,最近的度量值会出现X%的可能性。”(这类似于你听了几天音乐家的音乐。你学习她演奏的音乐,她犯了多少错误,她即兴发挥了多少。当你听她继续演奏时,你会发现她的风格是否改变了,如果她演奏的音乐类型改变了,或者她开始犯更多的错误。这些变化不能通过阈值来检测。我们把这个分析转换成一个异常的分数来显示。异常值表示最近的度量输入将基于过去几周数据的可预测性而发生的概率。
五、与其他异常检测方法的比较
异常检测是一个广泛的领域;许多不同的领域都使用了许多异常检测方法。这一节并不是要对所有这些领域和方法进行详尽的讨论(尽管有一些很好的全面的调查)。相反,下面的讨论主要局限于适用于流数据的方法,尤其是它的分析。
“没有免费的午餐”理论假设,在所有可能的问题中,没有一个算法能比其他的算法做得更好;换句话说,算法必须针对特定的问题或领域进行优化,以使其工作“更好”。这一特性在很大程度上解释了为什么会有如此多的异常检测方法——没有一种方法在所有可能的领域都有效。但即使是在一个领域,也不可能建立一个完美的异常检测系统,任何系统都不可能始终如一地指出你所关心的异常,并避免那些你不关心的异常。然而,HTM已经在异常检测方面取得了进展,因为它提供了比以前可能更好的性能数据流数据。HTM理论还向我们展示了HTM的优越性能,它可以在其他领域使用相同的底层算法复制。
六、异常检测方法的分类
6.1 监督与非监督
异常检测方法可以在监督下或无监督模式下运行。监督模式需要一组被标记的训练数据,因此异常探测器可以将数据“真相”与输入数据进行比较,以确定异常情况。无监督模式(基于htm的方法操作)不需要标记训练集,这种模式中的异常检测技术更加灵活和易于使用,因为它们不需要预先进行人工干预和训练。在监督模式下运行的异常检测方法包括基于规则的方法,以及基于模型的方法,如复制器神经网络、贝叶斯或无监督支持向量机。
6.2点与统计
许多异常检测方法被设计用来检测简单的“点”异常(一个单独的数据实例,相对于其他数据点来说是异常的)。由于数据变得更加复杂和难以预测,异常的重要在于数据的上下文,无论上下文是空间的、时间的还是语义的。基于htm的方法根据数据流的可预测性自动进行调整;他们可以在高度常规的数据中检测到点异常,但会根据需要使用尽可能多的上下文来保证数据在嘈杂的数据中是异常的。
在接下来的章节中,我们讨论了几种常见的异常检测方法,这些方法都是由点异常检测器进行修改的,以及一些针对时间序列分析的异常检测方法。
七、异常检测方法的比较
下面的表1显示了早期“HTM检测到的异常的例子”中描述的异常(图2 - 5,从容易检测到高度细微的异常),将会被各种异常检测方法捕获。尽管此表仅局限于异常检测方法的子集,但它说明了方法范围的局限性和能力。这些异常检测方法和它们的权衡在接下来的章节中有更详细的描述。
a,简单统计方法,很多被应用于商业应用程序中。需要手工配置。随着模式随时间的变化,需要手工进行调整。
b,某些统计方法将会捕获异常。
c,Holt-Winters,ARIMA,SVR。
d,需要手动设置的周期,以匹配数据的周期。
e,由于较高的计算要求,通常不会在商业IT应用程序中使用;非监督的方法也不能很好地推广。
f,依赖于具体算法。
g,监督方法(如基于规则的方法、复制器神经网络、贝叶斯网络、支持向量机)需要标记训练数据,因此不能很容易地与无监督的流数据方法进行比较。
八 简单阈值
“简单阈值”方法是最简单的统计异常检测器之一,是当今商业it分析应用中最常用的方法之一。一个简单的阈值方法将数据标记为异常,当它位于特定值范围内或外部时,就会发现异常。简单的阈值非常快,而且几乎不需要CPU或内存来计算,只需简单的阈值,就可以很好地适用于有数千个度量的情况。
简单的阈值在应用程序分析中有这些缺点:
-它们通常是由用户设置的,而不是学习的,在监视许多数据流时,这可能是一个耗时且困难的过程。此外,由于环境的变化,需要对它们进行调整,因此需要手动的实时维护。
-他们可以产生很多假阳性。例如,如果IT操作员在服务器上增加内存,那么使用的内存百分比可能会低于阈值。在手动更改之前,阈值将持续提供假阳性,因为它不会自动学习新的行为。
-由于它们不考虑时间序列,简单的阈值不能识别发生在范围内的模式变化。举个例子,假设有一个规则的正弦波模式,它突然变成了中心的直线。这种变化不会触发一个临界值,但将是一个巨大的变化,而且将是一个错误的负面例子。
在上一节中,我们展示了由HTM确定的步骤变化(图a)的示例。在这里,除了在底层数据流的每个步骤变化中发送警报,一个简单的阈值将在发生变化后生成连续的假阳性警报。
九 更复杂的统计方法
统计方法通过测量特定的随时间变化的变量来监控用户或系统的行为,基本模型保持这些变量的平均值并检测阈值是否超出了变量的标准偏差。更高级的统计模型也比较了长期和短期用户活动的概况。
有各种统计方法用于标记异常。技术包括基于标准偏差的动态阈值、移动平均值、与数据的最小二乘模型的比较、最近数据与旧数据的统计比较和直方图分析。
特定的统计方法通常针对数据中的非常特定的行为,因此单个方法不会捕获各种类型的异常。如果能很好地了解一种异常情况,这些有针对性的统计方法就能很好地工作。统计技术通常是非常快的计算,并且可以组合在一起,以捕获更广泛的异常,大大减少了假阴性的数量与简单的阈值。例如,开源的天际线项目利用了统计函数的集合来发现异常。
动态阈值法用于商业应用,是一个有趣的比较点。动态阈值超越了简单的阈值,考虑到数据的变化,以寻找异常。本质上,这些系统做的是一种简单的学习方式。例如,动态阈值可能会查看最近30天的数据,创建实际数据的平均值,并根据这些数据调整阈值。这种计算有助于动态阈值捕捉更广泛的异常,同时还能很便宜地计算大量的指标。
统计方法,特别是动态阈值,在应用程序分析中有这些缺点:
-统计方法不学习模式,然后寻找这些模式的变化。相反,它们预先决定了要寻找的异常类型。因此,他们通常没有发现新的异常类型,或“未知的未知”。
-标准统计方法不学习时态模式。如果你打乱最后几个数据点,统计度量,例如平均值和标准偏差是不变的。即使人类的行为看起来完全不同,也不会发现异常。在现实世界中,有大量显著的行为变化不会导致显著的统计变化。
-具体的统计方法不容易推广。因此,由服务器度量创建的复杂的、真实的世界数据流需要一个复杂的模型和额外的手动调优。
—动态阈值:
o虽然动态阈值比简单的阈值执行得稍微好一些,但它们并没有检测到模式中细微或缓慢的变化。
o动态阈值需要手动设置,包括平均的因素。
o像简单的阈值一样,它们不能识别在动态范围内发生的模式变化。
十时间序列分析
时间序列分析:这是一种用于"时间序列"数据的统计模型((数据流,或非平稳数据))以便更好地预测序列的未来点。
holt - winters、自回归积分移动平均(ARIMA)和支持向量回归(SVR)是考虑到了季节性的统计模型的例子。这些模型可以作为异常检测的时间序列动态阈值。
时间序列分析方法在应用程序分析中有这些缺点:
-虽然这些方法更好地捕获了数据中的季节性,但它们也表现出与动态阈值相同的缺点。例如,它们不会捕获在周期内动态范围内发生的模式或模式变化的细微或缓慢变化。
-动态阈值的模型需要明确的时间来指定,这限制了模型在那个时期只学习季节性。
-它们不能处理没有明显模式(例如负载平衡器场景)的异常嘈杂的行为。
十一基于距离的方法
基于距离的方法试图克服统计异常检测方法的局限性,并通过计算点之间的距离来检测离群值。
这里有许多基于距离的方法用于检测不同领域的异常,包括基于最近邻的和基于集群的。虽然在今天的商业IT分析中没有经常使用,但是这些技术最近已经被提出用于检测网络异常,并且这些方法的版本可以在无监督模式下运行,所以我们在这里介绍它们。
基于距离的方法在应用程序分析中有这些缺点:
基于距离的方法不能捕获时间行为。
-算法对距离计算非常敏感,因此对噪声非常敏感(异常之间距离的变化)
-对于无监督的技术,如果数据有正常的实例,没有足够的近邻,或者数据有足够的近邻的异常,那么该技术就不能正确地标注它们,从而导致遗漏的异常。
十二监督机器学习方法
正如前面提到的,监督机器学习是一种依赖于标记训练集的方法。该训练数据包括指定数据点是否为异常的标签。这些标签用于构建一个模型,可以区分两类数据。虽然受监督的算法对于细微的、特定于领域的更改非常有效,但它们通常不适合异常检测场景,在这种情况下,模式随时间而变化,比如IT分析。由于受监督的方法与这里讨论的非监督方法在完全不同的模式下运行,因此我们将这整个类别标记为“不适用”在比较表中。
监督机器学习技术在应用程序分析中有这些缺点:
-受监督的模型不会随着模式的变化而自动调整。要学习新的模式,必须使用有标记的数据构建新的模型。因此,这些模型不适用于动态高速数据。
-标记过程可以非常手工密集,必须定期重复,以学习新的模式。
-标签过程容易出错,标签上的错误会导致模型表现不佳。
——用监督的方法捕捉“未知的未知”是很难的,甚至是不可能的。
十三应用于IT的HTM(基于HTM)
HTM使用的技术是新大脑皮层的一个模型。它展示了我们在大脑中发现的许多功能,使它最适合于流数据应用程序,在这些应用程序中,数据的底层模式不断变化。
下面的属性区分了HTM的机器学习技术和其他异常检测方法:
它是一个基于记忆的系统;它了解数据中的模式。像线性回归这样的技术使用公式来建模数据。公式化的系统可以快速学习,但只适用于特定类型的模式。基于内存的系统(如HTM)可能需要更多的数据来训练,但它们可以学习任何模式,包括那些不容易适应数学表达式的模式。服务器和基于服务器的应用程序生成需要基于内存的模型的数据。
HTM是一个在线学习系统。在线系统不断学习,因此更适合于数据随时间变化的应用程序。它不断学习,所以新的模式替换旧的模式,就像你记住最近的事件比旧的事件更好。
HTM用于学习基于时间的模式。通过标准的机器学习技术,许多基于时间的模式是不容易学习的。有些技术可以处理时间序列数据,比如ARIMA或ARMA,但是它们基于平均,对服务器和其他快速变化数据源所显示的模式类型的适用性是有限的。HTM可以学习高阶的基于时间的模式。这种能力极大地提高了它的预测和异常检测能力,因为它自动地使用尽可能多的时间上下文来改进预测。
HTM使用稀疏分布表示(SDRs)来表示数据。SDRs允许HTM处理几乎任何类型的数据,而一些机器学习技术则被限制在可以使用或预测的数据类型中。sdr是一种普遍的表达方式。你不必告诉HTM你发送的数据代表什么。sdr还为HTM提供了在不同但相似的模式下推广的能力。