时间序列和异常检测

机器算法验证 时间序列 聚类 趋势
2022-01-23 11:52:09

我想建立一个算法来检测时间序列中的异常,我计划为此使用聚类。

  • 为什么我应该使用距离矩阵而不是原始时间序列数据进行聚类?

  • 对于异常的检测,我将使用基于密度的聚类,一种算法,如 DBscan,那么在这种情况下可以工作吗?是否有流数据的在线版本?

  • 我想在异常发生之前检测它,那么,使用趋势检测算法 (ARIMA) 会是一个不错的选择吗?

3个回答

关于您的第一个问题,我建议您在对时间序列进行聚类之前阅读这篇著名的文章(时间序列子序列的聚类是无意义的)。它写得很清楚,并说明了您要避免的许多陷阱。

异常检测或“干预检测”已被 GCTiao 和其他人倡导。做科学就是寻找重复的模式。检测异常就是识别不遵循重复模式的值。我们从牛顿那里学到“谁知道自然的方式会更容易注意到她的偏差,另一方面,谁知道她的偏差会更准确地描述她的方式”。人们通过观察当前规则何时失效来学习规则。考虑时间序列 1,9,1,9,1,9,5,9 。要识别异常,需要有一个模式。“5”和“14”一样是异常现象。要识别模式,只需使用 ARIMA,在这种情况下,“异常”变得明显。尝试不同的软件/方法,看看哪一个建议使用 1,0 阶的 ARIMA 模型,0 系数为 -1.0 。使用谷歌/搜索程序查找“自动有马”或“自动干预检测”。您可能会对免费的东西感到失望,因为它可能物有所值。如果您有大量时间序列背景并且可以浪费几年时间,那么自己编写可能会很有趣。基于距离的方法存在严重限制http://www3.ntu.edu.sg/SCE/pakdd2006/tutorial/chawla_tutorial_pakddslides.pdf

对于时间序列异常检测,可以有多种方法。正如您所说,如果您使用 ARIMA 作为模型,您可以使用 MAPE 或 SMAPE 作为错误度量,并使用它使用置信度阈值。任何超出 CI 波段的东西都可能是异常情况。同样,您可以使用 DBSCAN 或基于统计分析的方法。有关更多信息,您可以通过以下链接: https ://towardsdatascience.com/effective-approaches-for-time-series-anomaly-detection-9485b40077f1 https://www.aditya-bhattacharya.com/?p=72&page= 4

让我知道它是否有帮助。:)