Détection d'Anomalies & Valeurs Aberrantes
“Trouver le point de données sur mille qui n'a pas sa place”
Approches statistiques (Z-Score, IQR) et algorithmiques (Isolation Forest, LOF) pour détecter les observations anormales rares.
Prérequis
Concepts Couverts
∑Formules Clés
Z-Score
Écarts-types par rapport à la moyenne — |z| > 3 est conventionnellement anormal
Clôture IQR
Clôtures de Tukey — les points en dehors de cet intervalle sont des anomalies (IQR = Q3-Q1)
Score d'Isolation
Isolation Forest : les anomalies ont des longueurs de chemin moyennes plus courtes h(x)
Score LOF
Facteur d'Anomalie Locale : rapport de densité locale aux densités des voisins
▶Simulation Interactive
Pourquoi la Détection d'Anomalies Est Importante
La fraude par carte de crédit coûte 32 milliards de dollars par an. Les attaques d'intrusion réseau causent des billions de dommages. Les pannes d'équipements industriels coûtent 50 milliards de dollars par an. La détection d'anomalies est la première ligne de défense critique dans tous ces systèmes. Le défi central : vous avez rarement des exemples étiquetés d'anomalies (elles sont rares par définition), donc la plupart de la détection d'anomalies est non supervisée — vous apprenez seulement ce que « normal » signifie, puis vous signalez les déviations.
En diagnostic médical, un faux négatif (manquer un cancer) est catastrophique ; en détection de fraude, les faux positifs (bloquer de vrais clients) détruisent les revenus. Choisir le bon seuil est une décision métier.
Le Point de Vue Statistique
L'intuition la plus simple : les données normales se concentrent dans des régions de haute densité. Les anomalies vivent dans des régions de faible densité. Le Z-Score signale les points à plus de k écarts-types de la moyenne — mais suppose des distributions gaussiennes. Les clôtures IQR sont non paramétriques : elles signalent les points en dehors de 1,5×IQR des quartiles, les rendant robustes aux données non gaussiennes. Les deux sont univariés — ils vérifient chaque caractéristique indépendamment et manquent les anomalies multivariées (une température de 20°C est normale ; une pression de 5 bars est normale ; mais température=20 ET pression=5 ensemble peut être anormal).
Méthodes Statistiques vs Algorithmiques
Le Z-Score et l'IQR sont rapides et interprétables mais supposent l'indépendance et la normalité des caractéristiques. Isolation Forest construit des arbres aléatoires et mesure à quelle vitesse chaque point peut être isolé — les anomalies s'isolent vite car elles sont dans des régions creuses. LOF compare la densité locale de chaque point à celle de ses voisins : si vos voisins sont bien plus denses que vous, vous êtes une anomalie. One-Class SVM trouve la sphère minimale englobant les points normaux. La détection d'anomalies par autoencodeur entraîne un réseau neuronal à reconstruire des données normales — une erreur de reconstruction élevée signale une anomalie.
Isolation Forest passe à l'échelle avec des millions de points et gère bien les données haute dimension. LOF est meilleur pour les données groupées à densités variables. Les autoencodeurs excellents pour la détection d'anomalies dans les images et les séries temporelles.
Algorithme de la Forêt d'Isolation
Construire un ensemble d'arbres d'isolation (arbres binaires aléatoires)
Pour chaque arbre : sélectionner aléatoirement une caractéristique, puis une valeur de division aléatoire
Récurser jusqu'à ce que chaque point soit isolé (seul dans une feuille)
Score d'anomalie = longueur de chemin moyenne à travers tous les arbres
Chemin court → point isolé rapidement → anomalie
Les points normaux nécessitent plus de divisions → chemin moyen plus long
Détection d'Anomalies avec scikit-learn
from sklearn.ensemble import IsolationForest from sklearn.neighbors import LocalOutlierFactor from sklearn.svm import OneClassSVM from sklearn.preprocessing import StandardScaler from sklearn.datasets import make_classification import numpy as np class="tok-comment"># ── Données dclass="tok-str">'exemple (class="tok-num">5 % d'anomalies) ─────────────────────────────── X_normal, _ = make_classification(n_samples=class="tok-num">475, n_features=class="tok-num">10, random_state=class="tok-num">42) X_anom = np.random.randn(class="tok-num">25, class="tok-num">10) * class="tok-num">4 class="tok-comment"># class="tok-num">25 anomalies évidentes X = np.vstack([X_normal, X_anom]) y_vrai = np.array([class="tok-num">0]*class="tok-num">475 + [class="tok-num">1]*class="tok-num">25) class="tok-comment"># class="tok-num">0=normal, class="tok-num">1=anomalie X_normalise = StandardScaler().fit_transform(X) class="tok-comment"># ── Isolation Forest ─────────────────────────────────────────────── foret = IsolationForest( n_estimators=class="tok-num">200, contamination=class="tok-num">0.05, class="tok-comment"># fraction attendue dclass="tok-str">'anomalies random_state=class="tok-num">42 ) etiq_foret = foret.fit_predict(X_normalise) class="tok-comment"># class="tok-num">1=normal, -class="tok-num">1=anomalie scores_foret = foret.score_samples(X_normalise) class="tok-comment"># plus bas = plus anormal class="tok-comment"># ── Facteur d'Anomalie Locale (LOF) ──────────────────────────────── lof = LocalOutlierFactor(n_neighbors=class="tok-num">20, contamination=class="tok-num">0.05) etiq_lof = lof.fit_predict(X_normalise) class="tok-comment"># ── Z-Score (univarié, par caractéristique) ───────────────────────── from scipy import stats z_scores = np.abs(stats.zscore(X)) masque_anomalies = (z_scores > class="tok-num">3).any(axis=class="tok-num">1) class="tok-comment"># ── Évaluer avec des étiquettes connues ──────────────────────────── from sklearn.metrics import roc_auc_score, average_precision_score class="tok-comment"># Convertir : class="tok-num">1=normal → class="tok-num">0, -class="tok-num">1=anomalie → class="tok-num">1 y_pred = (etiq_foret == -class="tok-num">1).astype(int) print(fclass="tok-str">"AUC-ROC : {roc_auc_score(y_vrai, -scores_foret):.3f}") print(fclass="tok-str">"AP : {average_precision_score(y_vrai, -scores_foret):.3f}")
Pièges de la Détection d'Anomalies
Le paramètre contamination dans Isolation Forest et LOF contrôle directement le seuil de décision. Si vous définissez contamination=0.05 mais que votre taux réel d'anomalies est 0,1%, vous étiquetterez incorrectement de nombreux points normaux comme anomalies. Calibrer toujours avec la connaissance du domaine. Deuxième piège : la haute dimensionnalité brise le Z-Score et les méthodes basées sur la distance. Appliquer l'ACP en premier quand les caractéristiques > 20. Troisième : la dérive de concept — « normal » change avec le temps. Ré-entraîner ou utiliser la détection d'anomalies en ligne pour les données en flux.
Ne jamais évaluer la détection d'anomalies avec la précision — le déséquilibre des classes la rend sans signification. Utiliser Précision@k, AUC-PR (aire sous la courbe précision-rappel), ou F1 au seuil choisi.
?Vérification des Connaissances
La progression est sauvegardée dans votre navigateur — aucun compte requis.
Besoin d'un ingénieur IA ou data scientist ?
Je conçois des modèles ML sur mesure, des agents IA, de la vision par ordinateur et de l'automatisation — de l'idée à la production.