Supprimer ou traiter les valeurs aberrantes détectées
Introduction
L’IQR (Interquartile Range) est une méthode robuste pour détecter les valeurs aberrantes, en particulier dans des données numériques continues. Une fois identifiées grâce à l’IQR, il est essentiel de prendre une décision : faut-il les supprimer, les corriger, les transformer, ou les garder telles quelles ? Cette page présente les approches les plus courantes et leurs implications.
Rappel : Comment détecter les outliers avec l’IQR
On considère une valeur comme aberrante si elle est en dehors de l’intervalle :
borne_inf = Q1 - 1.5 × IQR
borne_sup = Q3 + 1.5 × IQR
Ce seuil est statistiquement fiable et largement utilisé pour repérer les points trop éloignés de la majorité des données.
Supprimer les valeurs aberrantes détectées avec l’IQR
Quand supprimer ?
- Si les valeurs extrêmes sont dues à des erreurs de mesure, de saisie ou des anomalies techniques évidentes.
- Si ces valeurs n’ont pas de signification dans le contexte métier ou scientifique.
- Si elles faussent significativement les résultats ou les performances d’un modèle.
Exemple avec Pandas :
import pandas as pd
# Calcul de l'IQR
q1 = df["valeur"].quantile(0.25)
q3 = df["valeur"].quantile(0.75)
iqr = q3 - q1
borne_inf = q1 - 1.5 * iqr
borne_sup = q3 + 1.5 * iqr
# Filtrage des données
df_filtré = df[(df["valeur"] >= borne_inf) & (df["valeur"] <= borne_sup)]
Remplacer les valeurs aberrantes détectées
Lorsque les données sont rares ou que la suppression risquerait d’appauvrir la représentativité de l’échantillon, il est souvent préférable de corriger les outliers. Plusieurs méthodes existent selon le type de données et les objectifs analytiques.
Méthode : Remplacer par la médiane
La médiane est une mesure robuste qui n’est pas influencée par les valeurs extrêmes. Elle est idéale pour remplacer les outliers sans déformer la distribution globale des données.
mediane = df["valeur"].median()
df["valeur_corrigée"] = df["valeur"].apply(
lambda x: mediane if (x < borne_inf or x > borne_sup) else x
)
Méthode : Remplacer par la borne la plus proche
Une approche alternative consiste à ramener les valeurs extrêmes à la limite IQR la plus proche (borne_inf ou borne_sup). Cela permet de conserver une trace de ces données sans laisser leur influence se propager.
def cap_value(x):
if x < borne_inf:
return borne_inf
elif x > borne_sup:
return borne_sup
else:
return x
df["valeur_corrigée"] = df["valeur"].apply(cap_value)
Méthode : Remplacer par une prédiction (régression ou interpolation)
Si la variable concernée est corrélée à d’autres variables du dataset, on peut entraîner un modèle (ex. régression linéaire) pour prédire une valeur plausible et remplacer les outliers par cette estimation.
Cette méthode est plus avancée mais très utile dans des contextes sensibles (finance, médecine) où chaque valeur a un impact important.
# Exemple : utilisation d'une régression linéaire pour prédire la variable
from sklearn.linear_model import LinearRegression
# Suppose qu'on utilise 'feature1' pour prédire 'valeur'
model = LinearRegression()
X = df[["feature1"]]
y = df["valeur"]
# Entraînement sur les données sans outliers
mask = (df["valeur"] >= borne_inf) & (df["valeur"] <= borne_sup)
model.fit(X[mask], y[mask])
# Prédiction pour tous les points
df["valeur_predite"] = model.predict(X)
# Remplacement des outliers par la valeur prédite
df["valeur_corrigée"] = df.apply(
lambda row: row["valeur_predite"] if (row["valeur"] < borne_inf or row["valeur"] > borne_sup) else row["valeur"],
axis=1
)
Appliquer un capping (tronquer les extrêmes)
Le capping est une méthode simple pour limiter l’influence des valeurs extrêmes tout en les conservant dans le jeu de données. Elle consiste à plafonner les données à l’intérieur des bornes IQR.
df["valeur_cap"] = df["valeur"].clip(lower=borne_inf, upper=borne_sup)
Cette méthode est particulièrement utile lorsque l’on souhaite éviter la perte d’informations mais atténuer les distorsions causées par des extrêmes rares.
Utiliser une transformation mathématique
Certaines transformations permettent de réduire l’impact visuel et statistique des outliers sans modifier la structure des données.
- Logarithme : efficace sur les données fortement asymétriques avec des grandes valeurs.
df["log_valeur"] = df["valeur"].apply(lambda x: np.log(x + 1))
- Racine carrée : utile pour lisser les valeurs très dispersées.
df["sqrt_valeur"] = df["valeur"].apply(lambda x: np.sqrt(x))
- Box-Cox (si les données sont strictement positives) : transformation statistique plus flexible.
from scipy.stats import boxcox df["valeur_boxcox"], _ = boxcox(df["valeur"])
Bonnes pratiques
- Analyser l’origine des valeurs extrêmes avant d’agir : erreur ? exception ? distribution naturelle ?
- Adapter la méthode au contexte métier (santé, finance, industrie, etc.).
- Documenter les traitements appliqués pour assurer la traçabilité et la reproductibilité.
- Comparer les performances des modèles avec et sans outliers pour mesurer l’impact réel.
Conclusion
Traiter les valeurs aberrantes est une étape incontournable en data science. La méthode IQR permet de les identifier de manière simple et robuste. Une fois détectées, plusieurs stratégies sont possibles : suppression, remplacement, capping ou transformation.
Le choix de la méthode dépend du volume de données, du domaine d’application, et des objectifs de l’analyse. Un bon data scientist choisit toujours avec discernement et en lien avec les besoins métier.