Outliers
Comparação entre os métodos IQR e Z-score
Na análise estatística descritiva, podemos observar que alguns valores se distanciam significativamente da mediana, através do boxplot, sugerindo a possibilidade de serem outliers.
No entanto, existem outras abordagens que podem ser úteis para identificar esses pontos discrepantes, como o método IQR e o método Z-score. Nesta seção, exploraremos essas duas metodologias.
Método IQR
O Intervalo Interquartil (IQR) é uma medida estatística que revela a dispersão dos dados em torno da mediana.
Neste método, consideramos como outliers valores que estão:
- acima de
Q3 + 1.5 * IQR
- abaixo de
Q1 — 1.5 * IQR
Para realizar este cálculo, utilizamos uma função que recebe um conjunto de dados (dataset) e o nome de uma coluna (colname). A função calcula os quartis 25(Q1) e 75(Q3), o intervalo interquartílico (IQR) e os limites inferior e superior para identificar outliers.
Em seguida, itera sobre os valores da coluna para encontrar os outliers e os armazena em uma lista. Então, imprime-se o número de outliers encontrados e retorna os limites inferior e superior, além da lista de outliers.
def find_outlier_iqr(dataset, colname):
# calcula os quartis Q1 (25º percentil) e Q3 (75º percentil) da coluna.
q25, q75 = np.quantile(dataset[colname], 0.25), np.quantile(dataset[colname], 0.75)
# calcula IQR
iqr = q75 - q25
# calcula outlier cutoff
cut_off = iqr * 1.5
# calcula margens inferiores, lower e superiores upper
lower, upper = q25 - cut_off, q75 + cut_off
print(' IQR é ',iqr)
#print('Valor minimo', lower)
#print('Valor maximo', upper)
outliers = []
#loop itera sobre os valores da coluna, e os valores que são considerados outliers são adicionados à lista outliers
for i in dataset[colname].values:
if((i > upper)or(i < lower)):
outliers.append(i)
# a função imprime o valor de IQR e o número de outliers encontrados, e retorna as margens inferior e superior e a lista de outliers
print('O numero de outliers encontrado foi de', len(outliers))
return lower, upper, outliers
Para aplicar a função find_outlier_iqr
em todas as colunas desejadas, primeiro isolamos as colunas de interesse do nosso dataframe:
colunas = df_fobes.iloc[:, 4:8]
Desta forma, selecionamos somente as colunas ‘sales’, ‘profit’, ‘assets’ e ‘market_value’.
Quando chamada, se identificados outliers na coluna, um gráfico de distribuição é plotado usando sns.displot()
com uma marcação visual para destacar a presença de outliers nas margens inferior e superior.
for column in colunas:
lower, upper, out = find_outlier_iqr(df_forbes, column)
if (len(out) > 0):
plt.figure(figsize = (10,6))
sns.displot(df_forbes[column], kde=False)
plt.axvspan(xmin = lower,xmax= df_forbes[column].min(),alpha=0.2, color='red')
plt.axvspan(xmin = upper,xmax= df_forbes[column].max(),alpha=0.2, color='red')
plt.title("Outliers detectados em {}".format(column))
Método Z-score
Neste modelo, a referência para identificar um outlier é quantos desvios padrão o valor está da média. Se o Z-score for maior que 3 vezes o desvio padrão, geralmente pode-se considerar um outlier.
Aqui também utilizaremos uma função para determinar o número de outliers:
def find_outlier_zscore(dataset, threshold, colname):
df = dataset[colname]
outliers = []
zscore = []
threshold = threshold
for i in df.values:
z_score= (i - mean)/std
zscore.append(z_score)
if np.abs(z_score) > threshold:
outliers.append(i)
print("o número de outliers encontrado em {} foi de: ".format(colname),len(outliers))
return zscore, outliers
Chama-se a função find_outlier_zscore
para calcular os escores e identificar os outliers na coluna atual:
for column in colunas:
zscore, out = find_outlier_zscore(df_forbes, 3, column)
if len(out) > 0:
plt.figure(figsize = (10,5))
sns.displot(zscore)
plt.axvspan(xmin = 3 ,xmax= max(zscore),alpha=0.2, color='red')
plt.title("Outliers detectados em {}".format(column))
Considerações
Após analisar os resultados obtidos com os dois métodos de detecção de outliers, podemos concluir que há uma diferença significativa na quantidade de outliers identificados. O método Z-score tende a identificar menos outliers em comparação com o método IQR.
O método Z-score identifica outliers com base na distância de um ponto em relação à média e ao desvio padrão dos dados. Ele é mais sensível a desvios extremos em relação à média, o que pode resultar em uma detecção mais conservadora de outliers.
Por outro lado, o método IQR utiliza os quartis dos dados para identificar valores extremos. Ele é menos sensível a variações nos extremos dos dados, priorizando a identificação de valores atípicos com base na distribuição interquartil dos dados.
A escolha entre os dois métodos depende das características específicas dos dados e dos objetivos da análise. O método Z-score pode ser mais adequado quando se deseja identificar desvios extremos em relação à média, enquanto o método IQR pode ser preferível para detectar valores atípicos com base na distribuição interquartil dos dados.
Para prosseguir com o projeto, é recomendável considerar os resultados obtidos com ambos os métodos e avaliar qual abordagem melhor se alinha aos objetivos da análise. Além disso, é importante realizar uma investigação mais aprofundada das razões por trás das diferenças na detecção de outliers, o que pode fornecer insights adicionais sobre a natureza dos dados e a adequação dos métodos de detecção de outliers.
Parte I: Análise Exploratória
Parte II: Tratamento dos Dados
Parte III: Análise Estatística