paint-brush
Detección de valores atípicos: o que debes saberpor@nataliaogneva
54,579 lecturas
54,579 lecturas

Detección de valores atípicos: o que debes saber

por Natalia Ogneva4m2024/04/23
Read on Terminal Reader
Read this story w/o Javascript

Demasiado longo; Ler

Os analistas adoitan atopar valores atípicos nos datos durante o seu traballo. As decisións adoitan basearse na media da mostra, que é moi sensible aos valores atípicos. É fundamental xestionar os valores atípicos para tomar a decisión correcta. Consideremos varios enfoques sinxelos e rápidos para traballar con valores pouco comúns.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Detección de valores atípicos: o que debes saber
Natalia Ogneva HackerNoon profile picture

Os analistas adoitan atopar valores atípicos nos datos durante o seu traballo, como durante a análise da proba AB, a creación de modelos preditivos ou o seguimento de tendencias. As decisións adoitan basearse na media mostral, que é moi sensible aos valores atípicos e pode cambiar radicalmente o valor. Polo tanto, é fundamental xestionar os valores atípicos para tomar a decisión correcta.


Consideremos varios enfoques sinxelos e rápidos para traballar con valores pouco comúns.

Formulación de problemas

Imaxina que cómpre realizar unha análise experimental utilizando un valor de pedido medio como métrica principal. Digamos que a nosa métrica adoita ter unha distribución normal. Ademais, sabemos que a distribución métrica no grupo de proba é diferente á do control. Noutras palabras, a media da distribución no control é 10, e na proba é 12. A desviación estándar en ambos os grupos é 3.


Non obstante, ambas as mostras teñen valores atípicos que sesgan as medias da mostra e a desviación estándar da mostra.

 import numpy as np N = 1000 mean_1 = 10 std_1 = 3 mean_2 = 12 std_2 = 3 x1 = np.concatenate((np.random.normal(mean_1, std_1, N), 10 * np.random.random_sample(50) + 20)) x2 = np.concatenate((np.random.normal(mean_2, std_2, N), 4 * np.random.random_sample(50) + 1))

Nótese que considerar a métrica podería ter valores atípicos de ambos os lados. Se a túa métrica puidese ter valores atípicos só dun lado, os métodos poderían transformarse facilmente para ese fin.

Cortar Colas

O método máis sinxelo é cortar todas as observacións antes do percentil do 5 % e despois do percentil do 95 % . Neste caso, perdemos o 10% da información como estafa. Non obstante, as distribucións parecen máis formadas e os momentos mostrais están máis próximos aos momentos de distribución.

 import numpy as np x1_5pct = np.percentile(x1, 5) x1_95pct = np.percentile(x1, 95) x1_cutted = [i for i in x1 if i > x1_5pct and i < x1_95pct] x2_5pct = np.percentile(x2, 5) x2_95pct = np.percentile(x2, 95) x2_cutted = [i for i in x2 if i > x2_5pct and i < x2_95pct]


Outra forma é excluír observacións fóra do rango específico . A banda baixa é igual ao percentil do 25% menos a metade do intervalo intercuartil, e a banda alta é igual ao percentil do 75% máis a metade. Aquí só perderemos o 0,7% da información. As distribucións parecen máis formadas que a inicial. Os momentos mostrais son aínda máis iguais aos momentos de distribución.

 import numpy as np low_band_1 = np.percentile(x1, 25) - 1.5 * np.std(x1) high_band_1 = np.percentile(x1, 75) + 1.5 * np.std(x1) x1_cutted = [i for i in x1 if i > low_band_1 and i < high_band_1] low_band_2 = np.percentile(x2, 25) - 1.5 * np.std(x2) high_band_2 = np.percentile(x2, 75) + 1.5 * np.std(x2) x2_cutted = [i for i in x2 if i > low_band_2 and i < high_band_2]

Bootstrap

O segundo método que consideramos aquí é un bootstrap. Neste enfoque, a media constrúese como unha media de submostras. No noso exemplo, a media do grupo de control é igual a 10,35 e o grupo de proba é de 11,78. Aínda é un mellor resultado en comparación co procesamento de datos adicional.

 import pandas as pd def create_bootstrap_samples( sample_list: np.array, sample_size: int, n_samples: int ): # create a list for sample means sample_means = [] # loop n_samples times for i in range(n_samples): # create a bootstrap sample of sample_size with replacement bootstrap_sample = pd.Series(sample_list).sample(n = sample_size, replace = True) # calculate the bootstrap sample mean sample_mean = bootstrap_sample.mean() # add this sample mean to the sample means list sample_means.append(sample_mean) return pd.Series(sample_means) (create_bootstrap_samples(x1, len(x1), 1000).mean(), create_bootstrap_samples(x2, len(x2), 1000).mean())

Conclusión

A detección e o procesamento de valores atípicos son importantes para tomar a decisión correcta. Agora, polo menos tres enfoques rápidos e sinxelos poderían axudarche a comprobar os datos antes da análise.


Non obstante, é esencial lembrar que os valores atípicos detectados poden ser valores pouco habituais e unha característica para o efecto novidade. Pero é outra historia :)