cours
Une introduction complète à la détection d'anomalies
Tout le monde aime se démarquer, être différent. Mais ce n'est pas la qualité que vous recherchez dans vos points de données en tant que data scientist. Les points de données divergents ou les anomalies dans un ensemble de données sont l'un des problèmes de qualité des données les plus dangereux qui affectent presque tous les projets de données.
Cette dernière phrase peut vous surprendre si vous n'avez travaillé que sur des ensembles de données polies en libre accès, souvent dépourvues de valeurs aberrantes. Cependant, les ensembles de données du monde réel présentent toujours des différences par rapport aux échantillons normaux. Il vous appartient de les détecter et de les traiter de manière appropriée.
Dans cet article, vous apprendrez les idées fondamentales de ce processus, souvent appelé détection d'anomalies:
- L'effet néfaste des anomalies sur votre projet.
- L'importance de la détection des anomalies.
- Applications de la détection d'anomalies dans le monde réel.
- La différence entre les anomalies, les valeurs aberrantes et les nouveautés.
- Types d'anomalies et méthodes de détection des anomalies.
- Comment construire des algorithmes de détection d'anomalies en Python.
- Comment relever les défis de la détection des anomalies.
À la fin du cours, vous maîtriserez les principes fondamentaux de la détection d'anomalies et serez en mesure d'atténuer l'influence perturbatrice des valeurs aberrantes dans vos projets.
Qu'est-ce que la détection d'anomalies ?
La détection des anomalies, parfois appelée détection des valeurs aberrantes, est un processus qui consiste à trouver des modèles ou des instances dans un ensemble de données qui s'écartent de manière significative du comportement attendu ou "normal".
La définition des données "normales" et anormales varie considérablement en fonction du contexte. Vous trouverez ci-dessous quelques exemples de détection d'anomalies en action.
1. Transactions financières
Normal: Achats courants et dépenses régulières d'un particulier à Londres.
Valeur aberrante: Un retrait massif d'Irlande sur le même compte, ce qui laisse présager une fraude potentielle.
2. Le trafic réseau dans la cybersécurité
Normal: Une communication régulière, un transfert de données constant et le respect du protocole.
Valeur aberrante: Augmentation soudaine du transfert de données ou utilisation de protocoles inconnus signalant une brèche potentielle ou un logiciel malveillant.
3. Surveillance des signes vitaux du patient
Normal: Rythme cardiaque stable et tension artérielle constante
Valeur aberrante: Augmentation soudaine du rythme cardiaque et diminution de la pression artérielle, indiquant une urgence potentielle ou une défaillance de l'équipement.
La détection des anomalies comprend de nombreux types de méthodes non supervisées pour identifier les échantillons divergents. Les spécialistes des données les choisissent en fonction du type d'anomalie, du contexte, de la structure et des caractéristiques de l'ensemble de données en question. Nous les aborderons dans les sections suivantes.
Applications réelles de la détection d'anomalies
Même si nous avons vu quelques exemples ci-dessus, examinons un cas concret de détection d'anomalies dans le domaine financier.
Shaq O'Neal, quatre fois vainqueur de la NBA, est transféré du Miami Heat aux Phoenix Suns. Lorsque Shaq arrive dans l'appartement vide mis à sa disposition par les Phoenix Suns, il veut le meubler immédiatement au milieu de la nuit. Il se rend donc chez Walmart et effectue le plus gros achat de l'histoire de Walmart pour 70 000 dollars. Ou du moins, il essaie de le faire ; sa carte est refusée.
Il se demande quel peut bien être le problème (il ne peut pas être fauché !). À 2 heures du matin, le service de sécurité d'American Express l'appelle pour lui dire que sa carte est soupçonnée d'avoir été volée parce que quelqu'un a essayé d'effectuer un achat de 70 000 dollars chez Walmart à Phoenix (regardez l'anecdote pour l'entendre dans son intégralité).
Il existe de nombreuses autres applications concrètes de la détection des anomalies, au-delà de la finance et de la détection des fraudes :
- Cybersécurité
- Soins de santé
- Surveillance des équipements industriels
- Détection des intrusions dans les réseaux
- Surveillance du réseau énergétique
- Commerce électronique et analyse du comportement des utilisateurs
- Contrôle de la qualité dans la fabrication
La détection des anomalies est profondément ancrée dans les services quotidiens que nous utilisons et, souvent, nous ne la remarquons même pas.
L'importance de la détection des anomalies dans la science des données
Les données sont le bien le plus précieux de la science des données, et les anomalies sont les menaces les plus perturbatrices pour leur qualité. Une mauvaise qualité des données est synonyme de mauvais résultats :
- Tests statistiques
- Tableaux de bord
- Modèles d'apprentissage automatique
- Décisions
et, en fin de compte, une base compromise pour une prise de décision éclairée.
Les anomalies faussent les analyses statistiques en introduisant des modèles inexistants, ce qui conduit à des conclusions erronées et à des prédictions peu fiables. Comme il s'agit souvent des valeurs extrêmes d'un ensemble de données, les anomalies faussent souvent les deux caractéristiques les plus importantes des distributions : la moyenne et l'écart-type.
Comme le fonctionnement interne de presque tous les modèles d'apprentissage automatique repose en grande partie sur ces deux mesures, il est essentiel de détecter les anomalies en temps utile.
Types d'anomalies
La détection des anomalies englobe deux grandes pratiques : la détection des valeurs aberrantes et la détection des nouveautés.
Les valeurs aberrantes sont des points de données anormaux ou extrêmes qui n'existent que dans les données d'apprentissage. En revanche, les nouveautés sont des instances nouvelles ou inédites par rapport aux données d'origine (formation).
Prenons l'exemple d'un ensemble de données sur les températures quotidiennes dans une ville. La plupart du temps, les températures oscillent entre 20°C et 30°C. Cependant, un jour, il y a un pic de 40°C. Cette température extrême est une valeur aberrante, car elle s'écarte considérablement de la fourchette habituelle des températures quotidiennes.
Imaginez maintenant que la ville installe une nouvelle station de surveillance météorologique plus précise. En conséquence, l'ensemble des données commence à enregistrer des températures légèrement plus élevées, allant de 25°C à 35°C. Cette augmentation soutenue des températures est une nouveauté, représentant un nouveau modèle introduit par le système de surveillance amélioré.
Les anomalies, quant à elles, sont un terme général qui désigne à la fois les valeurs aberrantes et les nouveautés. Il peut être utilisé pour définir n'importe quelle instance anormale dans n'importe quel contexte.
L'identification du type d'anomalies est cruciale car elle vous permet de choisir le bon algorithme pour les détecter.
Types de valeurs aberrantes
Comme il existe deux types d'anomalies, il existe également deux types de valeurs aberrantes : les valeurs univariées et les valeurs multivariées. En fonction du type, nous utiliserons différents algorithmes de détection.
- Les valeurs aberrantes univariées existent dans une seule variable ou caractéristique isolée. Les valeurs aberrantes univariées sont des valeurs extrêmes ou anormales qui s'écartent de la plage de valeurs typique pour cette caractéristique spécifique.
- Les valeurs aberrantes multivariées sont trouvées en combinant les valeurs de plusieurs variables en même temps.
Prenons l'exemple d'un ensemble de données sur les prix des logements dans un quartier. La plupart des maisons coûtent entre 200 000 et 400 000 dollars, mais la maison A a un prix exceptionnellement élevé de 1 000 000 dollars. Si l'on analyse uniquement le prix, la maison A est clairement atypique.
Ajoutons maintenant deux variables supplémentaires à notre ensemble de données : la superficie et le nombre de chambres. Si l'on considère la superficie, le nombre de chambres et le prix, c'est la maison B qui semble étrange :
- Sa superficie est deux fois moins importante que le prix moyen d'un logement.
- Il n'y a qu'une seule chambre à coucher.
- Il coûte 380 000 dollars, le prix le plus élevé de la gamme.
Lorsque nous examinons ces variables individuellement, elles semblent ordinaires. Ce n'est que lorsque nous les mettons ensemble que nous découvrons que le foyer B est une aberration multivariée évidente.
Méthodes de détection des anomalies et quand utiliser chacune d'entre elles
Les algorithmes de détection des anomalies diffèrent selon le type de valeurs aberrantes et la structure de l'ensemble de données.
Pour la détection de valeurs aberrantes univariées, les méthodes les plus courantes sont les suivantes :
- Z-score (score standard): le z-score mesure le nombre d'écarts types d'un point de données par rapport à la moyenne. En général, les instances dont le score z est supérieur à 3 sont considérées comme aberrantes.
- Intervalle interquartile (IQR): L'IQR est l'intervalle entre le premier quartile (Q1) et le troisième quartile (Q3) d'une distribution. Lorsqu'une instance dépasse Q1 ou Q3 pour un certain multiplicateur d'IQR, elle est considérée comme aberrante. Le multiplicateur le plus courant est 1,5, ce qui donne une fourchette de valeurs aberrantes [Q1-1,5 * IQR, Q3 + 1,5 * IQR].
- Z-scores modifiés: similaires aux z-scores, les z-scores modifiés utilisent la médiane et une mesure appelée écart absolu médian (EAM) pour détecter les valeurs aberrantes. Étant donné que la moyenne et l'écart-type sont facilement faussés par des valeurs aberrantes, les z-scores modifiés sont généralement considérés comme plus robustes.
Pour les valeurs aberrantes multivariées, nous utilisons généralement des algorithmes d'apprentissage automatique. Grâce à leur profondeur et à leur force, ils sont capables de trouver des schémas complexes dans des ensembles de données complexes :
- Forêt d'isolement: utilise une collection d'arbres d'isolement (semblables à des arbres de décision) qui divisent récursivement des ensembles de données complexes jusqu'à ce que chaque instance soit isolée. Les instances qui sont isolées le plus rapidement sont considérées comme aberrantes.
- Facteur d'aberration locale (LOF): Le LOF mesure l'écart de densité locale d'un échantillon par rapport à ses voisins. Les points présentant une densité nettement inférieure sont considérés comme des valeurs aberrantes.
- Techniques de regroupement : des techniques telles que les k-moyennes ou le regroupement hiérarchique divisent l'ensemble de données en groupes. Les points qui n'appartiennent à aucun groupe ou qui se trouvent dans leurs propres petits groupes sont considérés comme des valeurs aberrantes.
- Détection de valeurs aberrantes basée sur l'angle (ABOD): ABOD mesure les angles entre des points individuels. Les cas présentant des angles bizarres peuvent être considérés comme des valeurs aberrantes.
Outre le type d'anomalies, vous devez tenir compte des caractéristiques du jeu de données et des contraintes du projet. Par exemple, la forêt d'isolement fonctionne bien sur presque tous les ensembles de données, mais elle est plus lente et nécessite de nombreux calculs car il s'agit d'une méthode d'ensemble. En comparaison, LOF est très rapide en formation mais peut ne pas être aussi performant que Isolation Forest.
Vous pouvez voir une comparaison des algorithmes de détection d'anomalie les plus courants sur 55 ensembles de données du package Python Outlier Detection (PyOD).
Construire un modèle de détection d'anomalies en Python
Comme pratiquement n'importe quelle tâche, il existe de nombreuses bibliothèques en Python pour effectuer la détection d'anomalies. Les meilleurs candidats sont les suivants :
- Détection de valeurs aberrantes par Python (PyOD)
- Scikit-learn
Alors que scikit-learn propose cinq algorithmes classiques d'apprentissage automatique (vous pouvez les utiliser pour les valeurs aberrantes univariées et multivariées), PyOD comprend plus de 30 algorithmes, allant de méthodes simples telles que MAD à des modèles complexes d'apprentissage profond. Vous pouvez également utiliser TensorFlow ou PyTorch pour des modèles personnalisés, mais ils sortent du cadre de cet article.
Détection d'anomalie univariée
Je préfère pyod
pour sa riche bibliothèque d'algorithmes et son API cohérente avec sklearn
. Il suffit de quelques lignes de code pour trouver et extraire les valeurs aberrantes d'un ensemble de données à l'aide de PyOD. Voici un exemple d'utilisation de MAD sur un ensemble de données univariées :
import pandas as pd
import seaborn as sns
from pyod.models.mad import MAD
# Load a sample dataset
diamonds = sns.load_dataset("diamonds")
# Extract the feature we want
X = diamonds[["price"]]
# Initialize and fit a model
mad = MAD().fit(X)
# Extract the outlier labels
labels = mad.labels_
>>> pd.Series(labels).value_counts()
0 49708
1 4232
Name: count, dtype: int64
Examinons le code ligne par ligne. Tout d'abord, nous chargeons les bibliothèques nécessaires à la manipulation des données, au chargement d'un ensemble de données et à pyod
pour le modèle de détection des valeurs aberrantes. Ensuite, après avoir chargé l'ensemble de données Diamonds intégré à Seaborn, nous extrayons les prix des diamants.
Ensuite, nous initialisons et ajustons un modèle de déviation absolue médiane (MAD) à X
en une seule ligne. Ensuite, nous extrayons les étiquettes de valeurs aberrantes et de valeurs aberrantes à l'aide de l'attribut labels_
de mad
dans labels
.
Lorsque nous imprimons les valeurs de labels
à la fin, nous constatons que 49708 appartient à la catégorie 0 (valeurs aberrantes) tandis que 4232 appartient à la catégorie 1 (valeurs aberrantes). Si nous voulons supprimer les valeurs aberrantes de l'ensemble de données original, nous pouvons utiliser pandas subsetting sur diamonds
:
outlier_free = diamonds[labels == 0]
>>> len(outlier_free)
49708
labels == 0
crée un tableau de valeurs Vrai/Faux (tableau booléen) où True
indique une valeur intermédiaire.
Détection d'anomalies multivariées
Le processus de création d'un modèle de détection d'anomalies multivariées est également le même. Mais la détection de valeurs aberrantes multivariées nécessite des étapes de traitement supplémentaires en présence de caractéristiques catégorielles :
>>> diamonds.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 53940 entries, 0 to 53939
Data columns (total 10 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 carat 53940 non-null float64
1 cut 53940 non-null category
2 color 53940 non-null category
3 clarity 53940 non-null category
4 depth 53940 non-null float64
5 table 53940 non-null float64
6 price 53940 non-null int64
7 x 53940 non-null float64
8 y 53940 non-null float64
9 z 53940 non-null float64
dtypes: category(3), float64(6), int64(1)
memory usage: 3.0 MB
Étant donné que pyod
s'attend à ce que toutes les caractéristiques soient numériques, nous devons coder les variables catégorielles. Nous utiliserons Sklearn pour ce faire :
from sklearn.preprocessing import OrdinalEncoder
# Initialize the encoder
oe = OrdinalEncoder()
# Extract the categorical feature names
cats = diamonds.select_dtypes(include="category").columns.tolist()
# Encode the categorical features
cats_encoded = oe.fit_transform(diamonds[cats])
# Replace the old values with encoded values
diamonds.loc[:, cats] = cats_encoded
>>> diamonds.head()
Reprenons le code ligne par ligne. Tout d'abord, nous importons la classe OrdinalEncoder
qui code les caractéristiques catégorielles ordinales et nous l'initialisons. Les caractéristiques ordinales sont des variables qui ont des catégories naturelles et ordonnées, comme dans le cas des mesures de la qualité des diamants. La coupe et la clarté sont ordinales, alors que la couleur ne l'est pas. Mais pour ne pas compliquer les choses, nous le considérerons comme ordinal pour l'instant.
Ensuite, nous extrayons les noms des caractéristiques catégorielles à l'aide de la méthode select_dtypes
de Pandas DataFrame. Nous enchaînons les attributs .columns
et .tolist()
pour obtenir les noms des colonnes d'une liste nommée cats.
Ensuite, nous utiliserons la liste pour transformer les caractéristiques que nous voulons avec oe
. Enfin, en utilisant une astuce Pandas avec .loc
, nous remplaçons les anciennes valeurs textuelles par des valeurs numériques.
Avant d'ajuster un modèle multivarié, nous allons extraire le tableau de caractéristiques X
. L'objectif de l'ensemble de données diamonds
est de prédire les prix des diamants en fonction de leurs caractéristiques. Ainsi, X
contiendra toutes les colonnes sauf price
:
X = diamonds.drop("price", axis=1)
y = diamonds[["price"]]
Now, let’s build and fit the model:
from pyod.models.iforest import IForest
# Create a model with 10000 trees
iforest = IForest(n_estimators=10000)
iforest.fit(X) # This will take a minute
# Extract the labels
labels = iforest.labels_
Plus l'estimateur IForest
a d'arbres, plus il faut de temps pour adapter le modèle à l'ensemble des données.
Après avoir obtenu les étiquettes, nous pouvons supprimer les valeurs aberrantes des données originales :
X_outlier_free = X[labels == 0]
y_outlier_free = X[labels == 0]
>>> len(X_outlier_free)
48546
>>> # The length of the original dataset
>>> len(diamonds)
53940
Le modèle a trouvé plus de 5000 valeurs aberrantes !
Défis en matière de détection d'anomalies
La détection des anomalies peut poser de plus grands défis que d'autres tâches d'apprentissage automatique en raison de sa nature non supervisée. Cependant, la plupart de ces défis peuvent être atténués par diverses méthodes (voir la section suivante pour les ressources).
Dans la détection des valeurs aberrantes, nous devons nous poser ces deux questions :
- Les valeurs aberrantes trouvées sont-elles réellement des valeurs aberrantes ?
- Le modèle a-t-il trouvé toutes les valeurs aberrantes dans les données ?
Dans l'apprentissage supervisé, nous pouvons facilement vérifier si le modèle fonctionne bien en faisant correspondre ses prédictions sur les données de test avec les étiquettes réelles. Mais nous ne pouvons pas faire la même chose pour la détection des valeurs aberrantes, car il n'existe pas d'étiquettes prêtes à l'emploi nous indiquant quels échantillons sont des valeurs aberrantes et lesquels sont des valeurs aberrantes.
Ainsi, une partie ou la plupart des +5000 valeurs aberrantes trouvées dans l'ensemble de données sur les diamants ne sont peut-être pas des valeurs aberrantes ! Il n'y a aucun moyen de le savoir avec certitude. Il se peut qu'il ait étiqueté certaines valeurs aberrantes comme étant des valeurs aberrantes, tout en omettant certaines valeurs aberrantes réelles.
Ce problème de méconnaissance du niveau de contamination (le pourcentage de valeurs aberrantes dans un ensemble de données) est le plus important en matière de détection d'anomalies. De ce fait, nous ne pouvons pas mesurer de manière fiable les performances des classificateurs de valeurs aberrantes, ni vérifier leurs résultats.
C'est pourquoi tous les estimateurs de pyod
ont un paramètre appelé contamination
, qui est fixé à 0,1 par défaut. En tant qu'ingénieur en apprentissage automatique, vous devez régler ce paramètre vous-même.
Bien sûr, il existe parfois des alternatives. Par exemple, le modèle IsolationForest
proposé par Sklearn dispose d'un algorithme interne pour déterminer automatiquement le niveau de contamination. Mais IsolationForest
n'est pas la solution miracle à tous les problèmes de détection des valeurs aberrantes.
Un autre problème dans la détection des anomalies est le déséquilibre des données. Les anomalies sont souvent rares par rapport aux cas normaux, ce qui entraîne un déséquilibre des ensembles de données. Ce déséquilibre peut entraîner des difficultés à distinguer les anomalies et les irrégularités réelles au sein de la classe majoritaire.
Pour répondre à ces questions (et à bien d'autres encore que nous n'avons pas abordées), il faut choisir des algorithmes appropriés, régler les hyperparamètres, sélectionner les caractéristiques, gérer le déséquilibre des classes, etc.
Résumé et prochaines étapes
Nous avons terminé votre (probablement) première exposition au monde fascinant de la détection d'anomalies. Les concepts et compétences fondamentaux présentés dans ce tutoriel peuvent vous aider à approfondir votre connaissance de la détection des anomalies.
Pour approfondir votre compréhension, voici quelques ressources à consulter :
- Cours Anomaly Detection in Python par DataCamp: couvre les méthodes et techniques plus profondément discutées dans cet article et discute de la façon de traiter les problèmes présentés dans la dernière section.
- Anomaly Detection in R course by DataCamp: un cours pour ceux qui préfèrent le bon vieux R
Je suis un créateur de contenu en science des données avec plus de 2 ans d'expérience et l'un des plus grands followings sur Medium. J'aime écrire des articles détaillés sur l'IA et la ML dans un style un peu sarcastıc, car il faut bien faire quelque chose pour les rendre un peu moins ennuyeux. J'ai produit plus de 130 articles et un cours DataCamp, et un autre est en cours d'élaboration. Mon contenu a été vu par plus de 5 millions de personnes, dont 20 000 sont devenues des adeptes sur Medium et LinkedIn.
Approfondissez votre compréhension de la détection des anomalies dès aujourd'hui !
cours