我有一个非常基本的问题:标准差的定义使得大约 66% 的数据位于其中。并且在三个标准偏差范围内约为 99%。
当我想使用标准偏差作为异常值检测时,我会与这个定义作斗争,因为总会有异常值。但我可能在某个地方有误会,不知何故..
换句话说:3 个标准差总是包含大约 99% 的数据,因此总会有,无论它们是否异常。
我看不到的问题是什么?
我有一个非常基本的问题:标准差的定义使得大约 66% 的数据位于其中。并且在三个标准偏差范围内约为 99%。
当我想使用标准偏差作为异常值检测时,我会与这个定义作斗争,因为总会有异常值。但我可能在某个地方有误会,不知何故..
换句话说:3 个标准差总是包含大约 99% 的数据,因此总会有,无论它们是否异常。
我看不到的问题是什么?
标准差方法因异常值的存在而出现偏差。
Tukey fences (Wikipedia)是一种相当容易实现的更强大的方法,它依赖于四分位数和中位数。
标准偏差不是异常检测器。它不能告诉你是否有异常值。
它将有效地删除确实存在的异常值,如果事实证明根本没有任何异常值,则有删除少量内部数据的风险。因此,我认为它是一种有用的“快速和肮脏的不想在这个问题上花费太多时间”的方法来确保您的数据集只包含内部数据点。只要您了解可能将 1% 的内部数据点分箱的风险,我认为这很好。
我认为您可能已经了解离群值检测的目的。您基本上平衡了两件事:检测所有异常值/异常值,尽可能少地检测“只是”随机噪声的异常值/异常值。
根据您的需要,您可能想要检测所有异常值(例如,如果影响非常负面) - 即使以误报为代价。
但也许“小”异常值对您来说很好,您只想检测真正的大偏差。这就是您可以使用标准偏差的目的。
最后,您需要针对特定场景优化预期误报和误报的“成本”。一个典型的例子是欺诈检测:您可以通过拒绝所有客户来避免所有欺诈,或者您可以通过允许所有欺诈者来避免任何适当的客户被拒绝 - 对于大多数企业来说,真相在中间的某个地方 - 所以他们基本上调整了参数通过将增加的额外欺诈者的成本与额外被拒绝的正确客户的收入损失进行比较,来检测他们的异常值。