在数组中查找异常值,列表

时间:2012-05-09 05:12:51

标签: python algorithm algorithmic-trading

我有数组形式的销售统计数据,以计算此数据的标准偏差或平均值。

stats = [100, 98, 102, 100, 108, 23, 120] 
让p表示+ -20%差异是正常情况, 23 显然是一个特殊情况。

找到这个不寻常的值的最佳算法(用任何语言,伪或任何原理)是什么?

3 个答案:

答案 0 :(得分:9)

您可以将它们转换为Z-scores并查找异常值。

>>> import numpy as np
>>> stats = [100, 98, 102, 100, 108, 23, 120]
>>> mean = np.mean(stats)
>>> std = np.std(stats)
>>> stats_z = [(s - mean)/std for s in stats]
>>> np.abs(stats_z) > 2
array([False, False, False, False, False,  True, False], dtype=bool)

答案 1 :(得分:2)

计算平均值和标准差。将任何超过X标准偏差的值视为“不寻常”(其中X可能大约在2.5到3.0左右)。

这个主题有很多变化。如果你需要一些真正统计上合理的东西,你可能想要研究其中的一些 - 它们可以消除诸如捍卫任意选择(比如)2.7标准差作为分界线之类的东西。

答案 2 :(得分:2)

找到standard deviation,位于3 sigma或+ - 3 sigma之外的值是一个令人发指的值......

理论上,+ -3西格玛给出的confidence value超过99%。