时间序列异常检测

数据挖掘 机器学习 Python 时间序列 无监督学习 异常检测
2021-09-21 14:55:06

我刚刚开始在 Python 中进行异常检测开发。

我的数据集是时间序列的集合。更详细地说,数据来自一些传感器/仪表,这些传感器/仪表记录和收集锅炉或其他设备的数据。

正如我之前所说,我必须使用的数据是时间序列,因此是时间戳和传感器检测到的相对值;当一个值大于或小于它附近的其他值时,它是异常的;基本上是一个高峰。

我需要开发一个无监督的分类模型,因为我没有标记所有数据。

另一个重要方面是这些数据是“季节相关的”;事实上,锅炉在冬天应该比夏天消耗更多。这些值不能被视为异常。

由于我没有这方面的经验,所以我在这里问你,解决这个问题的最佳算法/方法是什么。

此外,你知道一些书籍或链接建议吗?

3个回答

您可以在这里查看,其中收集了许多专门用于时间序列数据(例如指标)异常检测的开源算法,用于在线或离线设置。

几乎所有这些都是无监督的方法,不需要标签来检测异常。

他们还会自动处理您提到的一些问题,例如季节性

为了理解时间序列数据的季节性,我将从 Holt-Winters 方法或 ARIMA 开始。了解这些算法将有助于了解时间序列预测的工作原理。 时间序列预测

对于无监督分类,我会从 k-means 聚类之类的异常检测开始。
使用 K-Means 聚类进行异常检测

这些链接应该是一个很好的起点,我希望这会有所帮助。

关于异常检测,您有很多方法。在行话中它们被称为异常值,维基百科的异常值文章是一个非常好的开始。

来自时间序列的大多数答案都建议使用指数平滑(在 Holt-Winters 版本中处理季节性问题)或 *ARIMA(其中指数平滑是一个个案)。

这可能很好。但是,对于这种情况,工程师习惯于使用卡尔曼滤波器对传感器进行滤波。不过,数学步骤更陡峭。