使用标准差检测异常值

机器算法验证 异常值
2022-01-17 08:14:44

在我的问题之后,我想知道是否有强烈的观点支持或反对使用标准偏差来检测异常值(例如,任何超过 2 个标准偏差的数据点都是异常值)。

我知道这取决于研究的背景,例如,48 公斤的数据点在婴儿体重研究中肯定是异常值,但在成人体重研究中则不会。

异常值是多种因素的结果,例如数据输入错误。就我而言,这些过程是稳健的。

我想我要问的问题是:使用标准差是检测异常值的合理方法吗?

4个回答

有些异常值显然是不可能的。你提到婴儿体重48公斤。这显然是一个错误。这不是统计问题,而是实质性问题。没有 48 公斤重的人类婴儿。任何统计方法都会识别出这样一个点。

就个人而言,我不会依赖任何测试(甚至是@Michael推荐的适当测试),而是将数据绘制成图表。显示某个数据值(或多个值)在某些假设分布下不太可能并不意味着该值是错误的,因此不应仅仅因为它们是极端值而自动删除它们。

此外,您提出的规则(平均值为 2 SD)是在计算机使事情变得容易之前使用的旧规则。如果 N 为 100,000,那么即使存在完美的正态分布,您肯定会期望有不少值超过均值 2 SD。

但是如果分布错误怎么办?假设,在总体中,所讨论的变量不是正态分布的,而是有比这更重的尾巴?

是的。这是“检测” oultiers 的不好方法。对于正态分布的数据,这种方法会将 5% 的非常好的(但略微极端的)观察称为“异常值”。此外,当您有一个大小为 n 的样本并且您寻找极高或极低的观察值以将它们称为异常值时,您实际上是在查看极端顺序统计数据。正态分布样本的最大值和最小值不是正态分布的。所以测试应该基于极值的分布。这就是我之前多次提到的 Grubbs 检验和 Dixon 比率检验所做的。即使您对异常值使用适当的测试,也不应该仅仅因为它异常极端而拒绝观察。您应该调查为什么首先发生极端观察。

当您询问潜在异常值与平均值的标准差有多少时,请不要忘记异常值本身会提高 SD,并且还会影响平均值。如果您有 N 个值,则与平均值的距离除以 SD 的比率永远不会超过 (N-1)/sqrt(N)。当然,对于小样本来说,这一点最为重要。例如,如果 N=3,则任何离群值都不可能超过均值的 1.155*SD,因此任何值都不可能超过均值的 2 个 SD。(当然,这假设您正在根据手头的数据计算样本 SD,并且没有理论上的理由来了解总体 SD)。

计算Grubbs 检验的临界值以考虑到这一点,因此取决于样本量。

我认为上下文就是一切。对于给出的示例,是的,显然 48 公斤的婴儿是错误的,使用 2 个标准差可以捕捉到这种情况。但是,没有理由认为使用 2 个标准差(或 SD 的任何其他倍数)适用于其他数据。例如,如果您正在查看地表水中的农药残留,超过 2 个标准差的数据是相当常见的。这些特别高的值不是“异常值”,即使它们远离平均值,因为它们是由于降雨事件、最近的农药施用等。当然,您可以创建其他“经验法则”(为什么不是 1.5 × SD,或 3.1415927 × SD?),但坦率地说,这样的规则很难捍卫,它们的成功或失败会根据你检查的数据而改变。我认为使用判断和逻辑,尽管有主观性,是去除异常值的更好方法,而不是使用任意规则。在这种情况下,您不需要 2 × SD 来检测 48 kg 的异常值 - 您可以推理出来。这不是一种上乘的方法吗?对于无法推理的情况,那么,任意规则会更好吗?