时间序列:异常值检测

数据挖掘 机器学习 Python 时间序列 异常检测 离群值
2021-10-10 06:13:48

我有时间序列数据,如下图所示。

我熟悉基于标准差和中值去除异常值的方法。这些方法的缺点是它们不考虑相邻数据点。

例如,在下面显示的数据中,我不想删除仅是远离平均值的最大值或标准偏差的值。我想删除红色圈出的点。该区域中常见的其他极值不应被检测为异常值,因为这些数据点具有相似的附近数据点。

是否有任何方法可以删除这些点,或者是否有任何 python 库可以用来删除这些点。正常标准偏差和中值过滤器不适用于这些,因为它们也会删除未圈出的点。

在此处输入图像描述

4个回答

您可以计算滑动窗口中的均值和标准偏差,并使用它们来删除异常值。

例如,使用长度为 100 的窗口,您可以计算这 100 个连续观测值的平均值和标准差,并查看是否有任何点落在 3 sigma 规则之上。在这种情况下,圈出的异常值仍然会被识别,而其他的则不应该被识别,因为它们与相邻数据(即在包含它们及其相邻观测值的窗口内)不是那么异常。

我不知道有任何软件包能够完成您想要实现的目标,但可能有一个软件包。

以编程方式处理此问题的方法是计算两个(或多个平滑)连续数据点之间的差异。然后,您可以使用阈值根据这些值进行过滤。

您可以先区分系列,然后根据您提到的标准偏差应用经典方法。

您可以使用数组切片。如果您在此处显示的数据在数组中可用,您可以找到要删除的 ouliers 的索引,然后将它们取出。

您还可以将数据拆分为两个不同的数据集,并将异常值检测算法应用于数据集,包括您想要移除的尖峰。