Appliquer la Winsorization pour limiter les valeurs extrêmes
Lors de l’analyse de données réelles, il est fréquent de rencontrer des valeurs extrêmes (outliers) qui peuvent fausser les statistiques descriptives et les modèles prédictifs. La Winsorization est une méthode robuste permettant de limiter l’impact de ces valeurs extrêmes en les remplaçant par des bornes définies.
Pourquoi gérer les valeurs extrêmes ?
Les outliers peuvent influencer négativement les modèles de machine learning. Par exemple :
- Les modèles linéaires peuvent être fortement biaisés.
- Les moyennes et les écarts-types peuvent être déformés.
- La visualisation peut devenir trompeuse.
Dans certains cas, les outliers sont le reflet de données réelles importantes. Dans d’autres, ils sont dus à des erreurs de saisie ou à des événements anormaux. La Winsorization permet de traiter ces valeurs sans les supprimer, ce qui conserve la structure du jeu de données.
Qu’est-ce que la Winsorization ?
La Winsorization consiste à remplacer les valeurs extrêmes situées au-delà d’un certain quantile par les valeurs des quantiles limites eux-mêmes. Par exemple :
- Les valeurs inférieures au 5e percentile sont remplacées par la valeur du 5e percentile.
- Les valeurs supérieures au 95e percentile sont remplacées par la valeur du 95e percentile.
Ce processus rend les données plus robustes aux extrêmes tout en conservant leur forme générale.
Visualisation de la Winsorization
Considérons une distribution avant et après la Winsorization :
On voit que les extrémités de la distribution ont été rabotées, réduisant leur influence sur les mesures globales.
Implémentation en Python
Pour appliquer la Winsorization en Python, on peut utiliser scipy.stats.mstats.winsorize
ou l’appliquer manuellement avec numpy
et pandas
.
Installation de scipy
pip install scipy
Utilisation de scipy
from scipy.stats.mstats import winsorize
import numpy as np
# Exemple de série avec des outliers
data = np.array([10, 12, 14, 15, 16, 18, 1000, 1200])
# Winsorization : remplace les 10% les plus faibles et les 10% les plus élevés
winsorized_data = winsorize(data, limits=[0.1, 0.1])
print("Données originales :", data)
print("Données winsorisées :", winsorized_data)
Dans cet exemple, les 10% inférieurs et supérieurs ont été écrêtés. Cela permet d’atténuer l’effet des valeurs extrêmes sans supprimer d’éléments du tableau.
Winsorization manuelle avec pandas
Voici comment appliquer le même principe à une colonne d’un DataFrame :
import pandas as pd
df = pd.DataFrame({
'revenu': [1200, 1300, 1500, 1600, 1800, 2200, 30000]
})
# Définir les bornes des quantiles
lower = df['revenu'].quantile(0.05)
upper = df['revenu'].quantile(0.95)
# Appliquer la Winsorization manuellement
df['revenu_winsor'] = df['revenu'].clip(lower, upper)
print(df)
La méthode .clip()
remplace toutes les valeurs en dehors des bornes choisies par les bornes elles-mêmes.
Comparaison avant / après
Il est utile de visualiser l’impact de la Winsorization :
import matplotlib.pyplot as plt
plt.figure(figsize=(10,5))
plt.subplot(1,2,1)
plt.hist(df['revenu'], bins=20, color='gray')
plt.title("Données originales")
plt.subplot(1,2,2)
plt.hist(df['revenu_winsor'], bins=20, color='green')
plt.title("Données après Winsorization")
plt.tight_layout()
plt.show()
Ce graphique permet de comparer les distributions et de voir comment les extrêmes sont réduits.
Quand appliquer la Winsorization ?
Voici quelques cas d’usage :
- Avant d’appliquer une régression linéaire.
- Sur des indicateurs fortement asymétriques (revenus, montants de transaction).
- Pour les modèles sensibles aux extrêmes (SVM, KNN, etc.).
Attention : n’applique pas la Winsorization de manière aveugle. Il est toujours préférable d’explorer les données, de comprendre leur distribution et de justifier le seuil choisi.
Avantages
- Facile à appliquer et interpréter.
- Conserve la structure du jeu de données (contrairement à la suppression des outliers).
- Réduction de la sensibilité aux extrêmes dans les modèles.
Limites
- Peut introduire des biais si les seuils sont mal choisis.
- Ne convient pas toujours si les outliers sont réellement significatifs.
Conclusion
La Winsorization est une technique simple mais puissante pour traiter les valeurs extrêmes sans perte d’information. Elle permet de réduire leur impact sur les analyses statistiques et les modèles prédictifs, tout en maintenant une certaine fidélité aux données originales. Elle doit être utilisée de façon judicieuse, après une bonne exploration des données, et peut s’intégrer facilement dans tout pipeline de prétraitement de données en data science.