使用Python进行时间序列异常检测


10

我需要对几个时间序列数据集执行异常检测。我以前从未做过此事,希望能得到一些建议。我对python非常满意,因此我希望在其中实现解决方案(我的大部分代码在其他工作中都是python)。

数据描述:在过去的两年左右(即只有24-36个时间段)才刚刚开始收集每月的时间序列数据。从本质上讲,每月有多个指标被多个客户监视。

time_period    client    metric    score
01-2013        client1   metric1   100
02-2013        client1   metric1   119
01-2013        client2   metric1   50
02-2013        client2   metric2   500
...

这就是我的想法:将数据放入数据框(熊猫),然后为每个客户/指标对计算6个月的滚动平均值。如果当前时间段的值超过了基于6个月平均值的某个阈值,则升旗。这个问题似乎很简单。我只想确保我采取可靠的方法。

任何建议,以充实这一想法,将不胜感激。我知道这个问题有点抽象,对此我深表歉意。


我不知道蟒蛇的方式,但这个问题是充满创意有关的一般方法:stats.stackexchange.com/questions/26688/...
rapaio

pypi.org/project/anomaly-detection这是在库中构建的,用于在python中进行异常检测,这类似于twitter异常检测。由于twitter异常检测代码是R语言。您的问题是上下文异常。Auto.arima模型也是如此
saravanan saminathan

Answers:


1

我认为类似于统计过程控制,控制图等的方法在这里可能有用。


我会读的。此方法适用于数据量少的时间序列(即24个月)吗?
埃里克·米勒

阅读完大部分内容。根据这种方法,我应该计算时间序列的第三标准偏差,并在这些极限上绘制一条线。如果值曾经超过这些限制,请对其进行标记。这是我考虑过的一种方法。
埃里克·米勒

1

异常检测有很多选择,从使用Pandas std偏差函数的标准偏差到贝叶斯方法以及介于两者之间的许多机器学习方法,例如:聚类,SVM,高斯过程,神经网络。

看看本教程:https : //www.datascience.com/blog/python-anomaly-detection

从贝叶斯角度,我推荐Facebook Prophet。它可以提供非常先进的结果,而无需成为时间序列专家。它具有处理月,日等工作的选项,“不确定性间隔”可帮助解决异常情况。

最后,我推荐这个关于使用神经网络(LSTM)进行异常检测的Uber博客,它具有非常深入的见解:https : //eng.uber.com/neural-networks/


0

如果您愿意假设您的数据集是正态分布的,那么您可以估算此分布的分位数,并查看其是否超出了例如95%,80%等分位数。我对Python库不是很熟悉,但是我确定已经为它建立了函数。


大多数客户都有上升的趋势。我不确定您可以随机调用数据。
埃里克·米勒

2
在这种情况下,则为否。我相信,在这种情况下,我和您下面的方法会很好用。之前我做过类似的事情:滚动X周期移动平均值,从移动平均值中减去当前指标值。找到这些残差的标准偏差范围(如果您确实知道这种情况,请使用主观输入),并且高于或低于这些范围的任何内容都可以视为异常。如果客户突然看到分数增加,则此方法会很好用。
Kevin Pei)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.