Detecção e tratamento de outliers | Como lidar com outliers

Conteúdo

68925oddoneout_edit2-1337880
Uau, estes são adoráveis! Esperando, De onde vem essa tulipa amarela?

Introdução:

Uma das etapas mais importantes como parte do pré-processamento de dados é detectar e lidar com outliers, ya que pueden afectar negativamente el análisis estadístico y el proceso de Treinamento de un algoritmo de aprendizaje automático, resultando em menor precisão.

1. O que são outliers? 🤔

Todos nós já ouvimos falar do idioma 'estranho, o que significa algo incomum em comparação com outros em um grupo.

de forma similar, um outlier é uma observação em um determinado conjunto de dados que está longe do resto das observações. Isso significa que um outlier é muito maior ou menor do que os valores restantes no conjunto..

2. Por que eles ocorrem?

Um outlier pode ocorrer devido à variabilidade nos dados, ou devido a um erro experimental / erro humano.

Pode indicar erro experimental ou grande assimetria nos dados (distribuição de cola pesada).

3. Aquele afeto?

Nas estatísticas, temos três medidas de tendência central: meios de comunicação, Mediana y Moda. Ajude-nos a descrever os dados.

A média é a medida precisa para descrever os dados quando não temos outliers presentes..

A mediana é usada se houver um outlier no conjunto de dados.

O modo é usado se houver um outlier E cerca de metade ou mais dos dados forem iguais.

o “meios de comunicação” é a única medida de tendência central que é afetada por outliers, que por sua vez afeta o desvio padrão.

Exemplo:

Considere um pequeno conjunto de dados, amostra = [15, 101, 18, 7, 13, 16, 11, 21, 5, 15, 10, 9]. Olhando para isso, você pode dizer rapidamente que '101’ é um outlier que é muito maior do que os outros valores.

88471with_without_outliers-6426600
cálculo com e sem outlier (Imagem do Autor)

Dos cálculos acima, podemos dizer claramente que a média é mais afetada do que a mediana.

4. Detecção de valores atípicos

Se nosso conjunto de dados for pequeno, podemos detectar o outlier apenas olhando para o conjunto de dados. Mas, E se tivermos um grande conjunto de dados, como identificamos outliers? Precisamos usar técnicas de visualização e matemática.

Abaixo estão algumas das técnicas para detectar outliers.

  • Plotagens de caixa
  • Classificação Z
  • Intervalo entre quantiles (IQR)

4.1 Detecção outlier usando Boxplot:

O código Python para o diagrama da caixa é:

import matplotlib.pyplot as plt
plt.boxplot(amostra, vert=Falso)
plt.title("Detectando outliers usando Boxplot")
plt.xlabel('Sample')
71843outlier_bp-5203065
Detecção outlier usando Boxplot (Imagem do Autor)

4.2 Detecção outlier usando pontuações Z

Critério: qualquer ponto de dados cujo Z-score cai fora do 3º desvio padrão é um outlier.

Passos:

  • passar por todos os pontos de dados e calcular a pontuação Z usando a fórmula (Xi-média) / std.
  • definir um valor limiar de 3 e marcar pontos de dados cujo valor absoluto de pontuação Z é maior do que o limiar como outliers.
import numpy as np
outliers = []
def detect_outliers_zscore(dados):
    thres = 3
    média = np.média(dados)
    std = np.std(dados)
    # imprimir(quer dizer, std)
    para mim nos dados:
        z_score = (I-mean)/std
        if (np.abs(z_score) > thres):
            outliers.append(eu)
    return outliers# Driver code
sample_outliers = detect_outliers_zscore(amostra)
imprimir("Outliers do método de pontuação Z: ", sample_outliers)

Os resultados do código anterior: Outliers do método de pontuação Z: [101]

4.3 Detecção de outliers usando o intervalo entre quantiles (IQR)

12311iqr-9027010
IQR para detectar outliers

Critério: os pontos de dados que estão localizados 1,5 vezes que o IQR acima do Q3 e abaixo do Q1 são outliers.

Passos:

  • Classifique o conjunto de dados em ordem ascendente
  • calcular o primeiro e terceiro quartis (T1, 3º T)
  • calcular IQR = Q3-Q1
  • calcular limite menor = (Q1-1.5 * IQR), limite superior = (3º T + 1.5 * IQR)
  • passar pelos valores no conjunto de dados e verificar aqueles que caem abaixo do limite inferior e acima do limite superior e marcá-los como outliers

Código Python:

outliers = []
def detect_outliers_iqr(dados):
    dados = classificados(dados)
    q1 = np.percentil(dados, 25)
    q3 = np.percentil(dados, 75)
    # imprimir(Q1, Q3)
    IQR = q3-q1
    lwr_bound = q1-(1.5*IQR)
    upr_bound = q3+(1.5*IQR)
    # imprimir(lwr_bound, upr_bound)
    para mim nos dados: 
        E se (eu<lwr_bound ou eu>upr_bound):
            outliers.append(eu)
    return outliers# Driver code
sample_outliers = detect_outliers_iqr(amostra)
imprimir("Outliers do método IQR: ", sample_outliers)

Os resultados do código anterior: Outliers do método IQR: [101]

5. Tratamento de outliers

Até agora, aprendemos sobre detecção de outliers. A questão principal é O QUE fazemos com os outliers?

Aqui estão alguns dos métodos para lidar com outliers.

  • Aparar / remover outlier
  • Revestimentos e pavimentos baseados em quantis
  • Imputação média / mediana

5.1 Cortar fora / Remoção de outlier

Nesta técnica, removemos outliers do conjunto de dados. Embora não seja uma boa prática seguir.

Código Python para remover o outlier e copiar o resto dos elementos para outra matriz.

# Trimming
for i in sample_outliers:
    a = np.delete(amostra, np.where(amostra==i))
imprimir(uma)
# imprimir(len(amostra), len(uma))

Outlier '101’ é excluído e o resto dos pontos de dados são copiados para outra matriz 'a'.

5.2 Revestimentos e pisos baseados em quantiles

Nesta técnica, o outlier é limitado a um determinado valor acima do valor percentil 90 ou é reduzido a um fator abaixo do valor percentil 10.

Código Python:

# Computação 10, 90th percentiles and replacing the outliers
tenth_percentile = np.percentile(amostra, 10)
ninetieth_percentile = np.percentil(amostra, 90)
# imprimir(tenth_percentile, ninetieth_percentile)b = np.where(amostra<tenth_percentile, tenth_percentile, amostra)
b = np.where(b>ninetieth_percentile, ninetieth_percentile, b)
# imprimir("Amostra:", amostra)
imprimir("Nova matriz:",b)

Os resultados do código anterior: Nova matriz: [15, 20.7, 18, 7.2, 13, 16, 11, 20.7, 7.2, 15, 10, 9]

Pontos de dados menores que o percentil 10 são substituídos pelo valor percentil 10 e pontos de dados que são maiores do que o percentil 90 são substituídos pelo valor percentil 90.

5.3 imputação média / mediana

Como o valor médio é muito influenciado por outliers, recomenda-se substituir outliers pelo valor mediano.

Código Python:

mediana = np.mediana(amostra)# Replace with median
for i in sample_outliers:
    c = np.where(amostra==i, 14, amostra)
imprimir("Amostra: ", amostra)
imprimir("Nova matriz: ",c)
# imprimir(x.dtype)

Visualização dos dados depois de lidar com o outlier

plt.boxplot(c, vert=Falso)
plt.title("Boxplot da amostra depois de tratar os outliers")
plt.xlabel("Amostra")
14520tratadobp-2415663
Imagem do Autor

Resumo:

Neste blog, aprendemos sobre uma fase importante de pré-processamento de dados que é um processamento outlier. Agora sabemos diferentes métodos para detectar e tratar outliers.

Referências:

Pontuação Z para detecção outlier

IQR para detecção outlier

Python numpy.onde o método ()

Repositório GitHub para consultar o notebook Jupyter

Espero que este blog ajude você a entender o conceito de outliers. Por favor, vote em se você gosta. Boa aprendizagem !! 😊

A mídia mostrada neste artigo não é propriedade da DataPeaker e é usada a critério do autor.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.

Datapeaker