Oltre le norme: esplorare il mondo dei valori anomali
In che modo i valori anomali tengono all'erta i Data Scientist
I valori anomali sono punti che si trovano a una distanza anormale dalla maggior parte dei punti nel set di dati. Prima di approfondire la risoluzione di qualsiasi problema di apprendimento automatico, è il passaggio chiave rimuovere i valori anomali se non necessari. Parliamo delle radici di un valore anomalo.
Cause comuni di valori anomali
- Errore di inserimento dati (errore umano)
- Errore sperimentale
- Errore di misura (errore strumentale)
- Errore di campionamento (estrazione di dati da fonti diverse/errate)
- Errore intenzionale (valori anomali fittizi creati per testare i metodi di rilevamento)
- Errore naturale (non un errore, novità nei dati)
1. IQR (intervallo interquartile)
L'IQR è il 50% centrale del set di dati. È l'intervallo di valori
compreso tra il terzo quartile e il primo quartile (Q3 — Q1). Utilizzato per misurare la variabilità dividendo il set di dati in quartili. I quartili sono valori che dividono i dati in 4 parti a condizione che i dati siano ordinati in ordine crescente.
IQR = Q3 — Q1
Q1 = 1° quartile (quartile inferiore che è il 25° percentile che divide il 25% inferiore dei dati)
Q2 = 2° quartile (mediana che è il 50° percentile)
Q3 = 3° quartile (quartile superiore che è il 75° percentile che divide il 25° superiore % di dati)
Nota : percentuale e percentile sono due cose diverse. Se il 25° percentile è 8, significa semplicemente che il 25% dei dati è inferiore a 8. Se il 75° percentile è 40, significa semplicemente che il 75% dei dati è inferiore a 40.
Se il valore dei dati < Q1–1.5(IQR) OPPURE il valore dei dati > Q3+1.5(IQR), viene trattato come un valore anomalo.
#Python code for finding outliers
import numpy as np
data = [1,4,6,3,500,24,53]
sort_data = np.sort(data)
Q1 = np.percentile(data,25)
Q3 = np.percentile(data,75)
IQR = Q3-Q1
low_limit = Q1 - 1.5(IQR)
upper_limit = Q3 + 1.5(IQR)
outlier = []
for i in data:
if(i>upper_limit or i<low_limit):
outlier.append()
return outlier
È anche noto come punteggio standard che ci dà un'idea di quanto un punto dati sia lontano dalla media. Indica quanto un punto dati devia dalla media nelle deviazioni standard. Sappiamo che se i dati seguono la distribuzione normale, i dati coprono il 99,7% dei punti fino a 3 deviazioni standard. Possiamo avere i nostri valori anomali calcolati oltre a quello su entrambi i lati.
Quindi, se otteniamo z-score come 2,5 allora diciamo che è 2,5 deviazione standard sopra la media e se otteniamo -2,5 allora diciamo che è 2,5 deviazione standard sotto la media. Pertanto possiamo concludere che il punteggio z non è una deviazione standard superiore o inferiore, il che significa che ogni valore diminuisce.
Il vantaggio principale del punteggio z è che ti dice quanto valore in% è un valore anomalo.
Z Score = (x-μ)/σ
x è un'osservazione nel campione
x̄ è la media delle osservazioni nel campione
σ è la deviazione standard delle osservazioni nel campione
3. Ordina i dati e visualizza i valori estremi
Questo è il metodo di base in cui è possibile ordinare i dati. Dopodiché cerca i valori estremi e quello sarà il nostro valore anomalo.
Ad esempio, ci è stata data l'età come 4,6,9,2,10,12,102.
Passaggio 1: ordina i dati: 2, 4,6,9,12,102
Passaggi 2: individua i valori estremi che possiamo vedere 102 è un valore estremo, quindi potrebbe essere un valore anomalo per noi.
4. Tracciare un grafico a dispersione, boxplot
- Grafico a dispersione : è un ottimo indicatore che ci consente di vedere se esiste uno schema tra due variabili. Viene utilizzato quando si accoppiano dati numerici o quando si determina la relazione tra due variabili. Ma non solo questo, puoi anche usarlo per il rilevamento dei valori anomali.
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.read_csv("heart.csv")
fig,ax = plt.subplots(figsize = (10,6))
# Scatter with positive examples
pos = ax.scatter(df.age[df.target==1], df.thalach[df.target == 1], color="salmon", label="Heart Disease")
# Scatter with negative examples
neg = ax.scatter(df.age[df.target==0], df.thalach[df.target == 0], color="lightblue", label="No Heart Disease")
#customization
plt.title("Max heart rate in comparison to age")
plt.xlabel("Age")
plt.ylabel("Max heart rate")
plt.legend()
plt.show()
Visualization of Scatter plot
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
df = pd.read_csv("diabetes.csv")
#visualazing each feature to detect the presence of outliers
fig, axis = plt.subplots(nrows=1, ncols=8, figsize=(16, 6))
sns.boxplot(data=df[['Pregnancies']], ax=axis[0]);
sns.boxplot(data=df[['Glucose']], ax=axis[1]);
sns.boxplot(data=df[['BloodPressure']],ax=axis[2]);
sns.boxplot(data=df[['SkinThickness']], ax=axis[3]);
sns.boxplot(data=df[['Insulin']], ax=axis[4]);
sns.boxplot(data=df[['BMI']], ax=axis[5]);
sns.boxplot(data=df[['DiabetesPedigreeFunction']],ax=axis[6]);
sns.boxplot(data=df[['Age']], ax=axis[7]);
Visualization of Boxplot
Grazie per aver letto! Se ti è piaciuto questo pezzo e vorresti leggere altro del mio lavoro, considera di seguirmi su Medium. Non vedo l'ora di condividere di più con voi in futuro.