异常检测阈值问题

数据挖掘 机器学习 Python 时间序列 无监督学习 异常检测
2022-03-02 07:57:28

我正在使用 Python 进行异常检测开发。
更详细地说,我需要分析时间序列以检查是否存在异常。
异常值通常是峰值,因此与其他值相比,该值非常高或非常低。

主要思想是预测时间序列值,并使用阈值检测异常。

使用误差计算阈值,即实际值减去预测值。
然后,执行误差的均值和标准差。

上限阈值等于平均值​​ + (5 * 标准差)。
下阈值等于平均值​​ - (5 * 标准差)。

如果错误超过阈值则标记为异常。

这种方法不起作用的是,如果我在一天内有多个异常值,则不会检测到它们。这是因为误差、均值和标准差受异常值的影响太大。

我该如何解决这个问题?有没有另一种方法可以用来识别没有这个问题的阈值?

谢谢

1个回答

您可以估计中位数和平均绝对偏差,而不是平均值和标准差。中位数不受异常值的影响,MAD 至少应该比标准差公式更稳健。

您可能必须将临界值更改为 5 以外的值才能获得相同的覆盖率。根据Wikipedia,您将希望新的临界值是5π2如果您的数据是 iid 高斯数据。

另一种可能更难以实施但可能在统计上更合适的替代方法是使用修剪过的估计量来计算均值和标准差。使用修剪过的估计器,您可以丢弃数据中最极端的值(预先指定其比例),并估计剩余数据的统计数据。

均值的估计量将是截断的均值,修剪后的估计量的维基百科页面提到如何从四分位间距的标准差中获得一个体面的估计量。

我希望这有帮助!