21 KiB
Guide Complet des Outliers (Valeurs Aberrantes)
🔍 Identifier, comprendre et gérer les outliers pour garantir la qualité de vos analyses statistiques.
Table des Matières
- Qu'est-ce qu'un Outlier ?
- Types d'Outliers
- Méthodes de Détection
- Indicateurs Visuels
- Processus de Gestion
- Impact sur les Analyses
- Bonnes Pratiques
- Exemples Concrets
Qu'est-ce qu'un Outlier ?
Définition
Un outlier (valeur aberrante) est une observation qui s'écarte significativement du reste des données.
Caractéristiques
Données normales :
┌─┐
┌─┤ ├─┐ ← Distribution normale
│ │ │ │
└─┤ ├─┘
└─┘
Avec outliers :
┌─┐
┌─┤ ├─┐
│ │ │ │ ● ← Outlier élevé
└─┤ ├─┘ ●
└─┘ ● ← Outlier faible
Pourquoi les Outliers Sont-Ils Importants ?
⚠️ Ils peuvent fausser vos résultats :
# Moyenne SANS outlier
[10, 12, 11, 13, 12] → Moyenne = 11.6
# Moyenne AVEC outlier
[10, 12, 11, 13, 12, 100] → Moyenne = 26.3
# Impact : La moyenne est plus que doublée !
# Solution : Utiliser la médiane (robuste aux outliers)
Types d'Outliers
L'application détecte 2 types d'outliers :
1. Outliers Univariés 🔴
Définition : Valeur extrême dans une seule variable.
Détection : Méthode IQR (Interquartile Range)
Exemple :
# Surface des appartements (m²)
[45, 50, 55, 60, 65, 70, 75, 500] # 500 est outlier
# Calcul :
Q1 = 52.5
Q3 = 71.25
IQR = Q3 - Q1 = 18.75
# Limite supérieure
Upper = Q3 + 1.5×IQR = 71.25 + 1.5×18.75 = 99.375
# 500 > 99.375 → OUTLIER 🔴
Indicateur visuel : Cercle rouge sur la valeur dans la table
2. Outliers Multivariés 🟣
Définition : Combinaison inhabituelle de plusieurs variables.
Détection : Algorithme Isolation Forest
Exemple :
# Client : Âge=18, Revenu=100000€, Historique=0
# Individuellement :
# - Âge 18 : Normal
# - Revenu 100000€ : Normal
# - Historique 0 : Normal
# Mais COMBINÉ :
# → Jeune avec très haut revenu et aucun historique
# → SUSPECT ! (fraude potentielle, erreur de saisie, etc.)
# → OUTLIER MULTIVARIÉ 🟣
Indicateur visuel : Cercle violet sur la ligne dans la table
Méthodes de Détection
Méthode 1 : IQR (Interquartile Range)
Principe
L'IQR mesure la dispersion centrale des données (50% central).
┌────┬──────┬──────┬──────┬────┐
Min Q1 Médiane Q3 Max
└─────┬─────┘
IQR
Formules
Q1 = 25ème percentile
Q3 = 75ème percentile
IQR = Q3 - Q1
Limite inférieure = Q1 - 1.5 × IQR
Limite supérieure = Q3 + 1.5 × IQR
# Outlier si :
valeur < Limite inférieure
OU
valeur > Limite supérieure
Exemple Pas à Pas
# Données : Prix immobiliers
Prix = [150k, 180k, 200k, 220k, 250k, 280k, 300k, 1500k]
# Étape 1 : Trier
[150, 180, 200, 220, 250, 280, 300, 1500]
# Étape 2 : Calculer Q1 et Q3
Q1 = 190 (moyenne de 180 et 200)
Q3 = 290 (moyenne de 280 et 300)
# Étape 3 : Calculer IQR
IQR = 290 - 190 = 100
# Étape 4 : Calculer les limites
Limite_inf = 190 - 1.5×100 = 40
Limite_sup = 290 + 1.5×100 = 440
# Étape 5 : Identifier les outliers
150k > 40 ✅ Normal
180k > 40 ✅ Normal
...
300k < 440 ✅ Normal
1500k > 440 ❌ OUTLIER 🔴
Avantages et Limites
✅ Avantages :
- Simple à comprendre
- Robuste aux outliers (utilise des rangs)
- Fonctionne avec des données non normales
❌ Limites :
- Ne détecte que les extrêmes univariés
- Peut manquer des outliers multivariés
- Seuil 1.5 arbitraire (peut être ajusté)
Méthode 2 : Isolation Forest
Principe
L'algorithme isole les observations en créant des partitions aléatoires. Les outliers sont plus faciles à isoler (moins de partitions nécessaires).
Forêt aléatoire d'arbres de décision :
- Chaque arbre partitionne les données
- Les outliers ont des chemins plus courts
- Score d'anomalie basé sur la longueur moyenne des chemins
Algorithme
from sklearn.ensemble import IsolationForest
# 1. Entraîner le modèle
model = IsolationForest(
contamination='auto', # Détection automatique du seuil
random_state=42
)
# 2. Prédire
predictions = model.fit_predict(data_multivariée)
# Résultats :
# 1 → Normal
# -1 → Outlier 🟣
Exemple Visuel
Espace 2D (Âge, Revenu) :
Revenu
│
│ •
│ • •
│ • •
│ • ● • ← ● = Outlier multivarié
│ • • • (combinaison rare)
│• •
└──────────────→ Âge
Avantages et Limites
✅ Avantages :
- Détecte les outliers multivariés
- Ne nécessite pas de distribution normale
- Fonctionne avec des données de haute dimension
❌ Limites :
- Plus complexe à interpréter
- Résultats non déterministes (aléatoire)
- Peut varier selon le paramètre
contamination
Comparaison des Méthodes
| Critère | IQR | Isolation Forest |
|---|---|---|
| Type | Univarié | Multivarié |
| Détection | Valeurs extrêmes | Combinaisons rares |
| Complexité | Simple | Complexe |
| Interprétabilité | Élevée | Faible |
| Robustesse | Moyenne | Élevée |
| Utilisation | Première analyse | Analyse approfondie |
Indicateurs Visuels
Dans l'Application
🔴 Cercle Rouge (Outlier Univarié)
Affichage : Sur la cellule spécifique
Exemple :
┌─────────────┬─────────────┬─────────────┐
│ Surface │ Prix │ Chambres │
├─────────────┼─────────────┼─────────────┤
│ 60 │ 250000 │ 3 │
│ 75 │ 300000 │ 4 │
│ 500 🔴 │ 350000 │ 5 │ ← Outlier sur Surface
│ 55 │ 280000 │ 3 │
└─────────────┴─────────────┴─────────────┘
Information au survol :
Column 'Surface' value 500 is outside IQR bounds [32.5, 115.5]
🟣 Cercle Violet (Outlier Multivarié)
Affichage : Sur toute la ligne
Exemple :
┌─────────────┬─────────────┬─────────────┐
│ Âge │ Revenu │ Historique │
├─────────────┼─────────────┼─────────────┤
│ 35 │ 3000 │ 12 │
│ 42 │ 4500 │ 8 │
│ 18 🟣 │ 100000 │ 0 🟣 │ ← Outlier multivarié
│ 28 │ 2500 │ 5 │
└─────────────┴─────────────┴─────────────┘
Information au survol :
Multivariate anomaly detected by Isolation Forest
🔴🟣 Les Deux (Outlier Univarié + Multivarié)
Exemple :
┌─────────────┬─────────────┬─────────────┐
│ Surface │ Prix │ Chambres │
├─────────────┼─────────────┼─────────────┤
│ 500 🔴🟣 │ 5000000 🔴 │ 10 🟣 │
└─────────────┴─────────────┴─────────────┘
Interprétation :
- 🔴 Surface et Prix sont des valeurs extrêmes
- 🟣 La combinaison Surface+Prix+Chambres est anormale
Processus de Gestion
Workflow Recommandé
1. Détection automatique
├─ IQR (univarié)
└─ Isolation Forest (multivarié)
2. Investigation manuelle
├─ Survoler les indicateurs colorés
├─ Lire les raisons détaillées
└─ Vérifier la source de données
3. Décision
├─ Conserver (valeurs légitimes)
├─ Corriger (erreurs de saisie)
└─ Exclure (vraies anomalies)
4. Ré-analyse
├─ Réexécuter la détection
├─ Vérifier l'impact sur les résultats
└─ Documenter les décisions
Étape 1 : Identification
Dans l'application :
- Importez vos données
- Les outliers sont automatiquement détectés
- Repérez les cercles 🔴 et 🟣
Règle de priorité :
🔴 Univarié → Vérifier en premier (simple)
🟣 Multivarié → Vérifier ensuite (complexe)
Étape 2 : Investigation
Questions à se poser
1. Est-ce une erreur de saisie ?
# Exemple : Âge = 250
# → Probablement une erreur (tapez 25 au lieu de 250)
# → Vérifier la source de données
# → Corriger si possible
2. Est-ce une valeur légitime ?
# Exemple : Revenu = 1000000€ pour un CEO
# → Valeur extrême mais réelle
# → CONSERVER (pas d'erreur)
# → Vérifier l'impact sur l'analyse
3. Est-ce un événement rare ?
# Exemple : Pic de ventes le Black Friday
# → Valeur extrême mais explicable
# → CONSERVER ou créer une variable "Black Friday"
# → Modéliser séparément si nécessaire
4. Est-ce une mesure défaillante ?
# Exemple : Température = -50°C en été
# → Erreur de capteur
# → EXCLURE ou CORRIGER
Étape 3 : Action
Option 1 : Corriger
Quand : Erreur de saisie identifiée
Exemple :
# Avant (erreur)
Prix = 15000000 # 15 millions pour un 60 m² ??
# Après (correction)
Prix = 150000 # 150k€ → réaliste
# Action : Modifier la valeur dans le fichier source
Option 2 : Conserver
Quand : Valeur légitime mais extrême
Stratégies :
A. Transformation
# Appliquer une transformation log
prix_log = log(Prix)
# Avantages :
# - Réduit l'impact des extrêmes
# - Normalise la distribution
B. Modèle robuste
# Utiliser des méthodes robustes aux outliers
# - Spearman au lieu de Pearson
# - Médiane au lieu de moyenne
# - Isolation Forest pour la détection
C. Analyse séparée
# Créer deux modèles
# - Modèle 1 : Données normales
# - Modèle 2 : Outliers (cas particuliers)
Option 3 : Exclure
Quand :
- Erreur non corrigeable
- Valeur influente et non représentative
- Mesure défaillante
Dans l'application :
- Cliquez sur l'outlier (🔴 ou 🟣)
- La ligne est marquée pour exclusion
- Les prochaines analyses ignoreront cette ligne
- Les exclusions sont mémorisées
⚠️ Précautions :
- Documentez la raison de l'exclusion
- Vérifiez l'impact sur la taille de l'échantillon
- Assurez-vous que l'exclusion est justifiée
Étape 4 : Vérification
Avant vs Après
# AVANT (avec outliers)
Moyenne = 26.3
Écart-type = 38.5
Corrélation = 0.45
# APRÈS (sans outliers)
Moyenne = 11.6
Écart-type = 1.1
Corrélation = 0.92
# Impact : L'analyse est plus représentative
Checklist de validation
- Les exclusions sont justifiées et documentées
- L'échantillon reste suffisamment grand (n > 30)
- Les résultats sont plus cohérents
- Pas de sur-correction (exclure trop de données)
- Les décisions sont reproductibles
Impact sur les Analyses
1. Moyenne vs Médiane
# Données avec outlier
[10, 12, 11, 13, 12, 100]
Moyenne = 26.3 📊 Biaisée par l'outlier
Médiane = 12 📊 Robuste
# Règle : Utiliser la médiane en présence d'outliers
2. Corrélation Pearson vs Spearman
# Avec outlier (Pearson)
r_pearson = 0.60 📊 Faible (outlier distord la relation)
# Avec outlier (Spearman)
r_spearman = 0.90 📊 Fort (robuste aux outliers)
# Sans outlier (Pearson)
r_pearson = 0.92 📊 Fort (relation réelle)
# Règle : Utiliser Spearman si outliers présents
3. Régression
Impact sur les Coefficients
# RÉGRESSION SANS OUTLIER
Prix = 50000 + 2500×Surface
R² = 0.90
# RÉGRESSION AVEC OUTLIER
Prix = 80000 + 1000×Surface
R² = 0.60
# Impact :
# - Intercept : 50000 → 80000 (biaisé)
# - Surface : 2500 → 1000 (sous-estimé)
# - R² : 0.90 → 0.60 (moins précis)
Influence (Leverage)
Certains outliers ont un impact disproportionné :
# Outlier avec fort leverage
Point : (Surface=1000, Prix=1000000)
# Si exclu :
# Coefficient Surface : 2500 → 2800 (+12%)
# L'outlier "tire" la droite vers lui
4. Tests Statistiques
# Test t (comparaison de moyennes)
# SANS outlier
Groupe A : [10, 12, 11, 13, 12]
Groupe B : [15, 17, 16, 18, 17]
p-value = 0.0001 ✅ Différence significative
# AVEC outlier dans Groupe A
Groupe A : [10, 12, 11, 13, 12, 100] # outlier ajouté
Groupe B : [15, 17, 16, 18, 17]
p-value = 0.15 ❌ Différence non significative
# Impact : L'outlier masque la différence réelle
Bonnes Pratiques
1. Toujours Visualiser
# Box plot pour détecter visuellement
import matplotlib.pyplot as plt
plt.boxplot(data['Prix'])
plt.show()
# Box plot avec outliers marqués
# ┌─┐
# │ │ ● ← Outlier
# ├─┤
# │ │
# └─┘
2. Ne Pas Exclure Automatiquement
❌ MAUVAIS
if is_outlier(valeur):
exclure(valeur) # Automatique
✅ BON
if is_outlier(valeur):
investiguer(valeur) # Manuel
si erreur:
corriger_ou_exclure()
sinon:
conserver()
3. Documenter les Décisions
# Journal des exclusions
exclusions = {
'ligne_42': {
'raison': 'Erreur de saisie (âge=250)',
'action': 'Corrigé en 25',
'date': '2025-01-11'
},
'ligne_87': {
'raison': 'Capteur défaillant (température=-50)',
'action': 'Exclu',
'date': '2025-01-11'
}
}
4. Comparer Avec/Sans
# Analyse 1 : Tous les données
model1 = regression(data_complete)
r2_1 = 0.75
# Analyse 2 : Sans outliers
model2 = regression(data_sans_outliers)
r2_2 = 0.92
# Conclusion : Les outliers impactent significativement
# → Exclusion justifiée si R² améliore et taille échantillon OK
5. Utiliser des Méthodes Robustes
# Méthodes robustes aux outliers
Moyenne → Médiane
Écart-type → Écart interquartile (IQR)
Pearson → Spearman
OLS → Régression robuste (Huber, RANSAC)
Exemples Concrets
Exemple 1 : Immobilier
Données : Prix, Surface, Chambres
┌───────┬─────────┬──────────┬──────────┐
│ ID │ Surface │ Prix │ Chambres │
├───────┼─────────┼──────────┼──────────┤
│ 1 │ 60 │ 250000 │ 3 │
│ 2 │ 75 │ 300000 │ 4 │
│ 3 │ 500 🔴 │ 350000 │ 5 │ ← Outlier univarié
│ 4 │ 55 │ 280000 │ 3 │
│ 5 │ 80 │ 320000 │ 4 │
│ 6 │ 70 │ 15000000 🔴│ 3 │ ← Outlier univarié
│ 7 │ 65 │ 290000 │ 3 │
└───────┴─────────┴──────────┴──────────┘
Analyse :
- Ligne 3 : Surface = 500 m² → Outlier (trop grand pour l'échantillon)
- Ligne 6 : Prix = 15M€ → Outlier (prix extrême)
Action :
Investigation :
- Ligne 3 : Vérifié → Château luxueux (légitime)
- Ligne 6 : Vérifié → Erreur de saisie (15M au lieu de 150k)
Décision :
- Ligne 3 : CONSERVER (valeur réelle)
- Ligne 6 : CORRIGER (150k€)
Exemple 2 : E-commerce
Données : Âge, Revenu, Montant_Achat
┌───────┬──────┬─────────┬──────────────┐
│ ID │ Âge │ Revenu │ Montant_Achat │
├───────┼──────┼─────────┼──────────────┤
│ 1 │ 35 │ 3000 │ 150 │
│ 2 │ 42 │ 4500 │ 200 │
│ 3 │ 28 │ 2500 │ 100 │
│ 4 │ 18 🟣│ 100000 🟣│ 0 🟣 │ ← Outlier multivarié
│ 5 │ 55 │ 5000 │ 250 │
└───────┴──────┴─────────┴──────────────┘
Analyse :
- Ligne 4 :
- Âge = 18 (normal)
- Revenu = 100k€ (normal)
- Montant = 0 (normal)
- MAIS : Jeune avec très haut revenu et aucun achat → SUSPECT
Investigation :
Cas 1 : Erreur de saisie (revenu=10000€)
Cas 2 : Compte frauduleux
Cas 3 : Héritage récent (légitime)
Cas 4 : Erreur de catégorisation (professionnel vs personnel)
Action :
Si erreur → Corriger
Si fraude → Exclure et signaler
Si légitime → Créer une variable "Profil_Riche_Jeune"
Exemple 3 : Santé
Données : IMC, Tension, Cholestérol
┌───────┬──────┬─────────┬────────────┐
│ ID │ IMC │ Tension │ Cholestérol│
├───────┼──────┼─────────┼────────────┤
│ 1 │ 22 │ 120 │ 180 │
│ 2 │ 25 │ 130 │ 200 │
│ 3 │ 60 🔴│ 180 🔴 │ 350 🔴 │ ← Outlier univarié
│ 4 │ 23 │ 125 │ 190 │
│ 5 │ 28 │ 140 │ 220 │
└───────┴──────┴─────────┴────────────┘
Analyse :
- Ligne 3 : IMC=60 (obésité morbide), Tension=180 (hypertension sévère), Cholestérol=350 (très élevé)
Investigation :
Cas 1 : Patient réel (pathologie sévère)
Cas 2 : Erreur de mesure (unités ?)
Cas 3 : Données agrégées par erreur
Action :
Si patient réel :
→ CONSERVER et analyser séparément (cas sévères)
Si erreur :
→ CORRIGER ou EXCLURE
🎯 Checklist de Gestion des Outliers
Détection
- Identifier les outliers univariés (🔴 cercles rouges)
- Identifier les outliers multivariés (🟣 cercles violets)
- Compter le nombre d'outliers
- Vérifier la proportion (< 5% des données)
Investigation
- Vérifier la source de données
- Rechercher des erreurs de saisie
- Consulter un expert du domaine
- Explorer les causes possibles
Action
- Corriger les erreurs identifiées
- Conserver les valeurs légitimes
- Exclure les vraies anomalies
- Documenter toutes les décisions
Validation
- Comparer les résultats avec/sans
- Vérifier la taille de l'échantillon final
- S'assurer que la distribution est cohérente
- Valider avec des graphiques
📊 Fonctionnalités de l'Application
Détection Automatique
L'application détecte automatiquement les outliers à l'importation :
# Méthode 1 : IQR (univarié)
uni_outliers = detect_univariate_outliers(
data,
columns=numeric_columns
)
# Méthode 2 : Isolation Forest (multivarié)
multi_outliers = detect_multivariate_outliers(
data,
columns=numeric_columns
)
# Fusion structurée
result = merge_outliers_structured(uni_outliers, multi_outliers)
Interface Utilisateur
Indicateurs Visuels
- 🔴 Cercle rouge : Outlier univarié (sur la cellule)
- 🟣 Cercle violet : Outlier multivarié (sur la ligne)
- 🔴🟣 Les deux : Les deux types d'outliers
Information au Survol
// Exemple de tooltip
{
"index": 42,
"reasons": [
"Column 'Surface' value 500 is outside IQR bounds [32.5, 115.5]",
"Multivariate anomaly detected by Isolation Forest"
]
}
Exclusion et Mémorisation
# Marquer une ligne pour exclusion
excluded_indices = [42, 87, 156]
# Ré-analyser sans ces lignes
new_analysis = analyze_with_exclusions(
data,
excluded_indices=excluded_indices
)
# Les exclusions sont mémorisées dans la session
🚀 Conclusion
Les outliers sont à la fois un défi et une opportunité :
⚠️ Défi :
- Peuvent fausser vos analyses
- Nécessitent une investigation minutieuse
- Exiger des décisions subjectives
✅ Opportunité :
- Peuvent révéler des phénomènes intéressants
- Signalent des erreurs dans les données
- Permettent d'améliorer la qualité des analyses
Points clés :
- Toujours investiguer avant d'exclure
- Documenter vos décisions
- Comparer avec/sans outliers
- Utiliser des méthodes robustes
- Visualiser pour comprendre
Version : 1.0 Projet : Application d'Analyse de Données
🔗 Voir aussi : Guide Corrélation | Guide Régression