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

aif*_*rfa 6 python algorithm algorithmic-trading

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

stats = [100, 98, 102, 100, 108, 23, 120] 
Run Code Online (Sandbox Code Playgroud)

让说+ -20%差异是正常情况,23显然是一个特例.

什么是最好的算法(在任何语言,伪或任何原则)找到这个不寻常的价值?

wim*_*wim 10

您可以将它们转换为Z分数并寻找异常值.

>>> 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)
Run Code Online (Sandbox Code Playgroud)