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


11

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

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

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

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

我的数据通常是2sec,3sec,2sec,5sec,300sec,4sec等。其中300sec显然是一个异常值。

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


4
您可能想在这里查看@ user603的答案:是否有针对Poisson分布数据的 boxplot 变体,以获取有关如何针对偏斜数据调整此规则的信息。
gung-恢复莫妮卡

3
此“ IQR”方法绝不会盲目应用。这是探索性数据分析过程的一部分(如Nick Cox在他的回答中所述),在此过程中,您首先会找到一种重新表达数据的方法,以使其近似对称地分布。
ub

2
根据您对答案的评论,正确的答案是“都不是”,因为您的根本担忧不是离群值,而是过程。
ub


数字是time_taken,因此除非您以某种方式重新缩放它们,否则它们将永远不会对称。
JP Bennett

Answers:


14

确实有关于离群值的整本书。

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

您引用的Tukey关于四分位数+/- 1.5 IQR的规则是出于手工处理的,它是在1970年代使用中小型数据集编写的,旨在指示您可能需要单独考虑的值。尚不清楚它们是否可以延续到更大的数据集,也无法在您期望相当大的偏斜度时应用它们。

一个更笼统的答案是,如果离群规则总是能够做出正确的决定,那么它是好的,但是您怎么知道呢?

这是一个有争议的领域,但我希望一个离群值会在图表上突出显示出来,因为它与其他区域有很大不同。但这通常(通常?)是一个艰难的决定,要告诉您在重尾分布中所期望的结果与什么太过疯狂以至于不能看作是异常值之间的区别。有时,变换会使异常值看起来更加普通。

此外,如果使用健壮的方法,则可能不必担心确切地将哪些值称为离群值,而通常会担心离群值。


1

您说您不确定分发,但是正在进行的流程很容易收集和评估分发。只需保存一堆时间并进行分析。鉴于您发布的时间,您可能会在几个小时内收获很多。

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


我正在收集几个过程的数据。它们可能各自具有不同的分布。我只需要一种简单的方法来说“运行时间太长”,以提醒技术人员进一步调查。只要可以标记应标记的内容,它就可以通用。如果出现一些误报,那就这样吧。但是,应将误报率保持在最低水平,因为如果报错率过多,就会破坏脚本的目的,我应该转储所有结果并让技术人员掌握。该脚本的目的是“缩小范围”
克里斯

您可以评估流程是相同还是不同。如果它们确实有很大不同,那么一些通用规则可能会导致特定过程不必要地更频繁地触发警告。这些信息确实应该在您的问题中。
约翰,

3
克里斯,把这个问题描述为寻找异常值的做法,这样做是不公正的:您实际上是在解决质量控制问题。主要区别是:(1)您需要持续的数据流而不是静态数据集来进行分析;(2)您打算指定每次分析后要采取的定期措施:即是否进行干预(并尝试进行干预)改善流程)(或不修改流程)(让流程按原样运行)。理解这是问题的本质,这表明有关质量控制的大量文献具有相关性,提供了丰富的解决方案。
ub

+1 @whuber。离群值与此处无关。平均运行时间或其任何百分位数都与“过长”无关。找出“太长”的方法可能是对用户的调查,与工程师的核对,或者只是猜测的位置等等,但这不是统计问题。
彼得·弗洛姆
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.