不同时刻相似(族内)图之间的异常检测

2024-09-28 22:00:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近看了Homin Lee"Detecting outliers and anomalies in realtime at Datadog"上的OSCON Austin 2016 talk,并找到了提出以下问题的适当动机。在

基本上,我要做的是在图中找到不一定同时开始的异常(t),但形状非常相似(在家族中)

分开:

enter image description here

enter image description here

合并:

enter image description here

如我的(粗略)概念图所示,给定两个相似的频率(f)时间函数,我想根据它们每个拐点的位置将它们排在一起。其中一个频率图从t=-2开始,另一个t=5开始。它们都有拐点在t_1=8.5t_2=1.5附近。我想把他们排成一行。从本质上说,所绘制的图像应该是我的算法的最终输出,并列出任何触发的异常,比如绿色曲线,如果f=0.2att_1=12,那么这应该是一个异常,因为它不在家族中。正如homi-Lee所说,图表不会“在训练过的信封内”

现在我想展示一下我的特定方法,看看你是否有同样的想法或者有更好的方法来开发这个算法。在选择使用哪种异常检测算法之前,我们需要讨论如何准备这些数据。我们将继续使用频率与时间数据作为示例。为了准备数据,我们需要(1)找到拐点,(2)缩放数据,使所有数据具有相同的时域持续时间(即,12-5=7=7=5-(-2)),以及(3)找到匹配(排列)每个图的时间(即5到-2,6到-1,依此类推)。在

  1. 找到拐点并不难,因为我们所要做的就是检测每个图上凹度变化的位置。在我们的例子中,在t_1=7.5t_2=1.5时。这个算法写的here似乎有潜力。在
  2. 为了缩放数据,我们需要将拐点放在图的中间,因此| t|min-t|=|t_max-t|,其中t_I是拐点出现的时间。频率会调整到一个相当大的范围。我假设这种缩放方式类似于this方法。在
  3. 找到一种方法来匹配(排列)每一张图的时间将是这三个目标中最困难的一个,我不确定如何做到这一点,但我将提出我的建议。我在想也许我们可以使用已经讨论过的here或为数据集定义{a10},以便为这两个图确定一个公共的数据域。这个部分是非常未知的,我想打开它征求建议。在

一旦数据准备好,现在就进入算法。对于(健壮的)异常检测,我正在考虑使用one-class/multi-class支持向量机(SVM),因为我们将训练一组巨大的图来形成“包络线”。本节也开放供建议。在

正如一个登月者所想的那样,我希望最终能够把所有的图表放到一个巨大的图上,并从中指出异常。问题是会有很多不同的时间间隔。因此,一个解决方案是创建一个单一的通用(u)时间间隔,这样您就不必处理不同的间隔(例如,t_1=5,9将变成t_=1,5,同样的情况也适用于t_2)。在

所以,为了重述一下,我希望分析不同时间间隔的相似图形,以发现异常。找出关键点/关键点(不一定是拐点)、比例、绘制图表,并检查异常情况。在

我已经漫谈了很长时间,但如果有些事情没有意义,你希望我澄清或详细说明,让我知道,我会的。请随意提出建议,向我提交一些代码,然后或者我以前没有必要想到的其他想法或方法。在

谢谢。在

另外,关于图纸的事我很抱歉,我已经尽力了。:P


Tags: 数据方法算法间隔here图表时间绘制