Au-delà des normes : explorer le monde des valeurs aberrantes
Comment les valeurs aberrantes gardent les Data Scientist sur leurs gardes

Les valeurs aberrantes sont des points qui sont à une distance anormale de la plupart des points de l'ensemble de données. Avant de plonger dans la résolution de tout problème d'apprentissage automatique, il est essentiel de supprimer les valeurs aberrantes si elles ne sont pas nécessaires. Discutons des racines d'une valeur aberrante.
Causes courantes des valeurs aberrantes
- Erreur de saisie de données (erreur humaine)
- Erreur expérimentale
- Erreur de mesure (erreur instrumentale)
- Erreur d'échantillonnage (extraction de données à partir de sources diverses/erronées)
- Erreur intentionnelle (valeurs aberrantes factices créées pour tester les méthodes de détection)
- Erreur naturelle (pas une erreur, nouveautés dans les données)
1. IQR (intervalle interquartile)
L'IQR représente les 50 % du milieu de l'ensemble de données. Il s'agit de la plage de valeurs
entre le troisième quartile et le premier quartile (Q3 - Q1). Utilisé pour mesurer la variabilité en divisant l'ensemble de données en quartiles. Les quartiles sont des valeurs qui divisent vos données en 4 parties à condition que les données soient triées par ordre croissant.
IQR = Q3 — Q1
Q1 = 1er quartile (quartile inférieur qui est le 25e centile qui divise les 25 % inférieurs des données)
Q2 = 2e quartile (médiane qui est le 50e centile)
Q3 = 3e quartile (quartile supérieur qui est le 75e centile qui divise les 25 % supérieurs % de données)
Remarque : Le pourcentage et le centile sont deux choses différentes. Si le 25e centile est 8, cela signifie simplement que 25 % des données sont inférieures à 8. Si le 75e centile est 40, cela signifie simplement que 75 % des données sont inférieures à 40.
Si la valeur des données < Q1–1,5(IQR) OU la valeur des données > Q3+1,5(IQR) alors elle est traitée comme une valeur aberrante.

#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
Il est également connu sous le nom de score standard qui nous donne une idée de la distance entre un point de données et la moyenne. Il indique dans quelle mesure un point de données s'écarte de la moyenne en écarts-types. Nous savons que si les données suivent une distribution normale, les données couvrent 99,7 % des points jusqu'à 3 écarts-types. Nous pouvons faire calculer nos valeurs aberrantes au-delà de cela des deux côtés.
Donc, si nous obtenons un score z de 2,5, nous disons que l'écart type est de 2,5 au-dessus de la moyenne et si nous obtenons -2,5, nous disons que l'écart type est de 2,5 en dessous de la moyenne. Par conséquent, nous pouvons conclure que le score z n'est pas un écart type supérieur ou inférieur, ce qui signifie que chaque valeur tombe.
Le principal avantage du z-score est qu'il vous indique combien de valeur en % est une valeur aberrante.
Score Z = (x-μ)/σ
x est une observation dans l'échantillon
x̄ est la moyenne des observations dans l'échantillon
σ est l'écart type des observations dans l'échantillon

3. Trier les données et voir les valeurs extrêmes
C'est la méthode de base où vous pouvez trier les données. Après cela, recherchez les valeurs extrêmes et ce sera notre valeur aberrante.
Par exemple, on nous a donné l'âge de 4,6,9,2,10,12,102.
Étape 1 : Trier les données : 2, 4, 6, 9, 12, 102
Étapes 2 : repérer les valeurs extrêmes, nous pouvons voir que 102 est une valeur extrême, ce qui pourrait être une valeur aberrante pour nous.
4. Tracer un nuage de points, un boxplot
- Nuage de points : C'est un excellent indicateur qui nous permet de voir s'il existe un modèle entre deux variables. Il est utilisé lorsque vous associez des données numériques ou lorsque vous déterminez une relation entre deux variables. Mais pas seulement cela, vous pouvez également l'utiliser pour la détection des valeurs aberrantes.
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
Merci d'avoir lu! Si vous avez apprécié cet article et que vous souhaitez en savoir plus sur mon travail, pensez à me suivre sur Medium. J'ai hâte de partager plus avec vous à l'avenir.