Quais algoritmos ou métodos podem ser usados ​​para detectar um erro externo desse conjunto de dados?

8

Suponha que eu tenho um conjunto de dados: Amount of money (100, 50, 150, 200, 35, 60 ,50, 20, 500). Eu pesquisei na web à procura de técnicas que podem ser usadas para encontrar uma possível outlier neste conjunto de dados, mas acabei confuso.

Minha pergunta é : Quais algoritmos, técnicas ou métodos podem ser usados ​​para detectar possíveis discrepâncias neste conjunto de dados?

PS : considere que os dados não seguem uma distribuição normal. Obrigado.

Nation Chirara
fonte
Como você reconhece um outlier neste pequeno conjunto? Como você faria "manualmente" em dados um pouco maiores?
Laurent Duval

Respostas:

5

Você pode usar o BoxPlot para análises discrepantes. Eu mostraria como fazer isso em Python:

Considere seus dados como uma matriz:

a = [100, 50, 150, 200, 35, 60 ,50, 20, 500]

Agora, use seaborn para plotar o boxplot:

import seaborn as sn
sn.boxplot(a)

Então, você obteria um gráfico que se parece com isso:

insira a descrição da imagem aqui

Parece que 500 é o único outlier para mim. Mas tudo depende da análise e do nível de tolerância do analista ou estatístico e também da declaração do problema.

Você pode dar uma olhada em uma das minhas respostas no CrossValidated SE para mais testes.

E existem várias perguntas interessantes sobre os valores discrepantes e os algoritmos e técnicas para detectá-los.

Meu favorito pessoal é a técnica de distância Mahalanobis .

Dawny33
fonte
Bem, obrigado, uma boa explicação de fato. Posso aplicar a técnica de distância Mahalanobis neste caso ou funciona para dados multivariados?
Nation Chirara
Você pode. Mas é super qualificado para dados univariados. Apenas uma análise Boxplot com algum valor limite definido deve fazer o trabalho para esses dados.
Dawny33
5

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 
Tristan Reid
fonte
Bem, obrigado pela resposta. Estou certo de que os números não são normalmente distribuídos. Seu método ainda se aplica nesse contexto?
Nation Chirara
Sim, sempre há um modelo subjacente que implica previsões sobre os dados. Se obtivermos um novo ponto de dados, podemos adivinhar qual é esse valor. Se não tivermos outras informações sobre o modelo (é apenas uma coleção de números), o melhor palpite é que ele será semelhante aos números que já temos. Se você acabar com um modelo específico para os dados, é importante incorporá-lo à sua previsão. Usar média não significa que estamos assumindo distribuição normal, mas outros modelos podem usar algo diferente da média.
Tristan Reid
Olá. Normalmente, acho que não é uma boa ideia usar a média para dados distribuídos não normais. De fato, por exemplo, muitos testes estatísticos não paramétricos estão usando mediana em vez de média. Mas isso é apenas uma opinião ...
Michael Hooreman
É justo, mas acho que é seguro dizer que, se você acredita que seus dados são distribuídos simetricamente, significa uma boa idéia; caso contrário, mediana é uma medida melhor de um valor "típico".
Tristan Reid
3

Uma abordagem simples seria usar a mesma coisa que os gráficos de caixa: fora de 1,5 (mediana-q1) ou 1,5 (q3-mediana) = outlier.

Acho útil em muitos casos, mesmo que não seja perfeito e talvez muito simples.

Tem a vantagem de não supor normalidade.

Michael Hooreman
fonte