Come rimuovere i valori anomali in python


Un valore anomalo è un’osservazione anormalmente distante da altri valori in un set di dati. I valori anomali possono essere problematici perché possono influenzare i risultati di un’analisi.

Questo tutorial spiega come identificare e rimuovere i valori anomali in Python.

Come identificare i valori anomali in Python

Prima di poter rimuovere i valori anomali, è necessario decidere cosa considerare come valore anomalo. Esistono due modi comuni per eseguire questa operazione:

1. Utilizzare l’intervallo interquartile.

L’intervallo interquartile (IQR) è la differenza tra il 75° percentile (Q3) e il 25° percentile (Q1) in un set di dati. Misura la distribuzione media del 50% dei valori.

È possibile definire un’osservazione come valore anomalo se è 1,5 volte l’intervallo interquartile al di sopra del terzo quartile (Q3) o 1,5 volte l’intervallo interquartile al di sotto del primo quartile (Q1).

Valori anomali = Osservazioni > Q3 + 1,5*IQR o Q1 – 1,5*IQR

2. Usa i punteggi z.

Un punteggio z ti dice quante deviazioni standard un dato valore è dalla media. Usiamo la seguente formula per calcolare uno z-score:

z = (X – μ) / σ

Oro:

  • X è un singolo valore di dati grezzi
  • μ è la media della popolazione
  • σ è la deviazione standard della popolazione

È possibile definire un’osservazione come un valore anomalo se il suo punteggio z è inferiore a -3 o superiore a 3.

Valori anomali = Osservazioni con punteggi z > 3 o < -3

Come rimuovere i valori anomali in Python

Una volta deciso cosa considerare un valore anomalo, è possibile identificarlo e rimuoverlo da un set di dati. Per illustrare come eseguire questa operazione, utilizzeremo il seguente DataFrame panda:

 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

Possiamo quindi definire e rimuovere i valori anomali utilizzando il metodo z-score o il metodo dell’intervallo interquartile:

Metodo del punteggio 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)

Metodo dell’intervallo interquartile:

 #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)

Possiamo vedere che il metodo del punteggio za ha identificato e rimosso un’osservazione come valore anomalo, mentre il metodo dell’intervallo interquartile ha identificato e rimosso 11 osservazioni in totale come valori anomali.

Quando rimuovere i valori anomali

Se nei tuoi dati sono presenti uno o più valori anomali, devi prima assicurarti che non siano il risultato di un errore di immissione dei dati. A volte un individuo inserisce semplicemente il valore dei dati errato durante il salvataggio dei dati.

Se l’outlier risulta essere il risultato di un errore di immissione dei dati, puoi decidere di assegnargli un nuovo valore come la media o la mediana del set di dati.

Se il valore è davvero un valore anomalo, puoi scegliere di rimuoverlo se avrà un impatto significativo sull’analisi complessiva. Assicurati solo di menzionare nel rapporto finale o nell’analisi che hai rimosso un valore anomalo.

Risorse addizionali

Se lavori con più variabili contemporaneamente, potresti voler utilizzare la distanza di Mahalanobis per rilevare valori anomali.

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *