Uma maneira de pensar na detecção de outlier é que você está criando um modelo preditivo e depois verificando se um ponto está dentro do intervalo de previsões. Do ponto de vista teórico da informação, é possível ver quanto cada observação aumenta a entropia do seu modelo.
Se você estiver tratando esses dados apenas como uma coleção de números e não tiver um modelo proposto para como eles são gerados, é melhor analisar a média. Se você tem certeza de que os números não são normalmente distribuídos, não pode fazer declarações sobre a distância em que um determinado número está da média, mas você pode apenas vê-lo em termos absolutos.
Aplicando isso, você pode calcular a média de todos os números, excluir cada número e calcular a média dos outros. Qualquer que seja a média que seja mais diferente da média global, será a maior discrepância. Aqui está um python:
def avg(a):
return sum(a)/len(a)
l = [100, 50, 150, 200, 35, 60 ,50, 20, 500]
m = avg(l)
for idx in range(len(l)):
print("outlier score of {0}: {1}".format(l[idx], abs(m - avg([elem for i, elem in enumerate(l) if i!=idx]))))
>>
outlier score of 100: 4
outlier score of 50: 10
outlier score of 150: 3
outlier score of 200: 9
outlier score of 35: 12
outlier score of 60: 9
outlier score of 50: 10
outlier score of 20: 14
outlier score of 500: 46