Como remover valores discrepantes em python
Um outlier é uma observação anormalmente distante de outros valores em um conjunto de dados. Valores discrepantes podem ser problemáticos porque podem afetar os resultados de uma análise.
Este tutorial explica como identificar e remover valores discrepantes em Python.
Como identificar valores discrepantes em Python
Antes de remover valores discrepantes, você deve primeiro decidir o que considera ser um valor discrepante. Existem duas maneiras comuns de fazer isso:
1. Use o intervalo interquartil.
O intervalo interquartil (IQR) é a diferença entre o percentil 75 (Q3) e o percentil 25 (Q1) em um conjunto de dados. Mede a distribuição da média de 50% dos valores.
Você pode definir uma observação como discrepante se ela for 1,5 vezes o intervalo interquartil acima do terceiro quartil (Q3) ou 1,5 vezes o intervalo interquartil abaixo do primeiro quartil (Q1).
Outliers = Observações > Q3 + 1,5*IQR ou Q1 – 1,5*IQR
2. Use pontuações z.
Uma pontuação z informa quantos desvios padrão um determinado valor está da média. Usamos a seguinte fórmula para calcular uma pontuação z:
z = (X – μ) / σ
Ouro:
- X é um único valor de dados brutos
- μ é a média da população
- σ é o desvio padrão da população
Você pode definir uma observação como discrepante se sua pontuação z for menor que -3 ou maior que 3.
Outliers = Observações com pontuações z > 3 ou < -3
Como remover valores discrepantes em Python
Depois de decidir o que você considera discrepante, você pode identificá-los e removê-los de um conjunto de dados. Para ilustrar como fazer isso, usaremos o seguinte DataFrame do pandas:
import numpy as np import pandas as pd import scipy.stats as stats #create dataframe with three columns 'A', 'B', 'C' np.random.seed(10) data = pd.DataFrame(np.random.randint(0, 10, size=(100, 3)), columns=['A', 'B', 'C']) #view first 10 rows data[:10] ABC 0 13.315865 7.152790 -15.454003 1 -0.083838 6.213360 -7.200856 2 2.655116 1.085485 0.042914 3 -1.746002 4.330262 12.030374 4 -9.650657 10.282741 2.286301 5 4.451376 -11.366022 1.351369 6 14.845370 -10.798049 -19.777283 7 -17.433723 2.660702 23.849673 8 11.236913 16.726222 0.991492 9 13.979964 -2.712480 6.132042
Podemos então definir e remover valores discrepantes usando o método z-score ou o método do intervalo interquartil:
Método de pontuação Z:
#find absolute value of z-score for each observation z = np.abs(stats.zscore(data)) #only keep rows in dataframe with all z-scores less than absolute value of 3 data_clean = data[(z<3).all(axis=1)] #find how many rows are left in the dataframe data_clean.shape (99.3)
Método de intervalo interquartil:
#find Q1, Q3, and interquartile range for each column Q1 = data.quantile(q=.25) Q3 = data.quantile(q=.75) IQR = data.apply(stats.iqr) #only keep rows in dataframe that have values within 1.5*IQR of Q1 and Q3 data_clean = data[~((data < (Q1-1.5*IQR)) | (data > (Q3+1.5*IQR))).any(axis=1)] #find how many rows are left in the dataframe data_clean.shape (89.3)
Podemos ver que o método de pontuação za identificou e removeu uma observação como discrepante, enquanto o método de intervalo interquartil identificou e removeu 11 observações no total como discrepantes.
Quando remover valores discrepantes
Se um ou mais valores discrepantes estiverem presentes em seus dados, você deverá primeiro garantir que eles não sejam resultado de um erro de entrada de dados. Às vezes, um indivíduo simplesmente insere o valor errado dos dados ao salvar os dados.
Se o valor discrepante for o resultado de um erro de entrada de dados, você pode decidir atribuir a ele um novo valor, como a média ou mediana do conjunto de dados.
Se o valor for realmente atípico, você poderá optar por removê-lo se ele tiver um impacto significativo em sua análise geral. Apenas certifique-se de mencionar em seu relatório ou análise final que você removeu um valor discrepante.
Recursos adicionais
Se você estiver trabalhando com múltiplas variáveis ao mesmo tempo, você pode usar a distância de Mahalanobis para detectar valores discrepantes.