IQR 检测异常值的准确性如何

机器算法验证 异常值 可靠性 意思是
2022-03-12 03:39:43

我正在编写一个分析进程运行时间的脚本。我不确定它们的分布,但我想知道一个进程是否运行“太长”。到目前为止,我一直在使用上次运行时间的 3 个标准偏差(n>30),但有人告诉我,如果数据不正常(看起来不正常),这不会提供任何有用的信息。我发现另一个异常值测试指出:

求四分位数间距,即 IQR = Q3 - Q1,其中 Q3 是第三个四分位数,Q1 是第一个四分位数。然后找到这两个数字:

a) Q1 - 1.5*IQR b) Q3 + 1.5*IQR

如果 < a 或 > b,则该点为异常值

我的数据往往是 2 秒、3 秒、2 秒、5 秒、300 秒、4 秒……,其中 300 秒显然是一个异常值。

哪种方法更好?IQR 方法还是标准偏差方法?

2个回答

确实有整本关于异常值的书。

通常的具体答案是标准差被异常值拉高,因此任何基于 SD 的规则都可能表现不佳。

您引用的关于四分位数 +/- 1.5 IQR 的 Tukey 规则来自 1970 年代中小型数据集的手工操作,旨在指示您可能想要单独考虑的值。目前尚不清楚它们是否会延续到更大的数据集,也不清楚它们是否适用于您预期相当大的偏度。

一个更普遍的答案是,如果异常值规则总是做出正确的决定,那么它是好的,但你怎么知道呢?

这是一个有争议的领域,但我希望一个异常值会在图表上突出显示,因为它与其他值非常不同。但是,通常(通常?)很难区分您在重尾分布中的预期与过于狂野而不能视为异常值的情况之间的区别。有时,转换会使异常值看起来更加普通。

此外,如果您使用稳健的方法,您可能不太担心哪些值值得被称为异常值,而通常会担心异常值。

您说您不确定分发,但正在进行的流程很容易收集和评估以进行分发。只需节省大量时间并分析它们。鉴于您发布的时间,您可以在几个小时内获得很多。

您对异常值规则的搜索不必如此笼统。它可以特定于您的任务。您可以收集大量数据。收集它,检查它,然后决定一个过程何时太长。也许基于 IQR 的方法会起作用,但您可以使用您的数据集或参数拟合来进行模拟,看看它是否运作良好。SD也是如此。可能只是> 50s太长了,这就是您所需要的。