从不同时间开始的类似(家庭)图表之间的异常检测

时间:2017-07-04 21:28:39

标签: python python-3.x machine-learning anomaly-detection

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

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

分居:

enter image description here

enter image description here

合并:

enter image description here

如我的(粗略)概念图所示,给定两个相似频率( f )的时间函数,我想根据每个人的位置将它们排列在彼此之上拐点是。其中一个频率图从 t = -2 开始,另一个 t = 5 。它们都有 t_1 = 8.5 t_2 = 1.5 周围的拐点。这是我想要排队的地方。基本上,绘制的图像应该是我的算法的最终输出,并列出任何触发绿色曲线的异常,如果 f = 0.2 t_1 = 12 ,那么这应该是一个异常现象,因为它不属于家庭。正如Homin Lee所说,图表不会“在训练有素的信封内”。

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

  1. 找到拐点并不会太难,因为我们所要做的就是检测每个图形上凹陷发生变化的位置。在我们的示例中, t_1 = 7.5 t_2 = 1.5 。编写here的算法似乎有潜力。
  2. 为了缩放数据,我们希望将拐点放在图的中间,这样 | t_min-t_I | = | t_max-t_I | 其中 t_I 是拐点发生的时候。频率将缩放到一些相当大的范围。我假设这种缩放类似于this方法。
  3. 找到匹配(排队)每个图表的时间的方法将是三个中最困难的目标,我不确定如何做到这一点,但我会提出我的建议。我想也许我们可以使用讨论here或定义discrete Fourier Transforms的数据集来确定两个图的公共数据域。这部分非常不为人知,我想打开这些建议。
  4. 准备好数据后,现在它就在算法上了。对于(强大的)异常检测,我正在考虑使用one-class / multi-class支持向量机(SVM),因为我们将训练一组巨大的图形来形成“包络”。本节也可以提供建议。

    作为一个moonshot思想,我希望最终能够将所有图表放在一个巨大的情节上,并指出那里的异常。问题是会有这么多不同的时间间隔。因此,一种解决方案是创建一个单一的通用( u )时间间隔,这样您就不必处理不同的间隔(例如, t_1 = 5,9 会变成 t_u = 1,5 t_2 也是如此。

    所以回顾一下,我希望在异常的不同时间间隔内分析类似的图表。找到关键点/关键点(不一定是拐点),比例,绘图和检查异常。

    我已经漫步了很长时间,但如果事情没有意义,你希望我澄清或详细说明,请告诉我,我会。随意提出建议,向我提交一些代码,和/或之前我没有必要考虑的任何其他想法或方法。

    谢谢。

    P.S。抱歉图纸;我已经尽力了。 :P

0 个答案:

没有答案