Recettes modernes pour la détection d’anomalie
Jean-Christophe Testud Jean-Christophe Testud
26 mars 16 min

Recettes modernes pour la détection d’anomalie

Le coin des expérimentations : Les chercheurs d’Element AI s’efforcent toujours de trouver de nouvelles façons de tirer parti de l’intelligence artificielle. Ce bulletin ponctuel nous permet de présenter leurs expérimentations, des applications novatrices et certains résultats surprenants. Aujourd’hui, Jean-Christophe Testud aborde la détection d’anomalie.

Les humains sont toujours à l’affût de ce qui est étrange ou de ce qui sort de l’ordinaire. Notre cerveau est constamment à la recherche d’anomalies. Selon la théorie de Daniel Kahneman, expliquée dans son livre Système 1 / Système 2 : Les deux vitesses de la pensée, c’est notre instinct (ce que l’auteur appelle le « Système 1 ») qui détecte les anomalies et éléments allant à l’encontre de nos modèles internes de notre environnement. En réponse, le « Système 2 », qui est notre mode de réflexion plus lent et plus analytique, s’enclenche pour nous aider à comprendre les raisons plus profondes de ce changement.

Ces modes de réflexion peuvent aussi s’appliquer aux données, un domaine où la détection d’anomalies constitue tout un défi. La science des données doit souvent utiliser de vastes jeux de données non labellisés (ou étiquetées/annotées). D’ailleurs, la majeure partie des données qui sont recueillies sont de ce type, des masses de renseignements aux structures incohérentes qui sont difficiles à analyser. Ces données restent toutefois très utiles. Apprendre de ces jeux de données non labellisés constituent d'ailleurs l’un des grands champs d’études en intelligence artificielle, que l’on appelle l’apprentissage non supervisé.

Pour repérer les anomalies dans un vaste jeu de données non labellisé, on suppose d'abord que la plupart des données sont normales. Prenons l’exemple des transactions par carte de crédit. On peut tenir pour acquis que la plupart des transactions sont conformes, et détecter celles qui ne respectent pas les grands schémas habituels, comme celles liées à des achats au montant élevé effectués à l’étranger. La détection d’anomalies peut répondre à la question suivante : « S’agit-il d’un élément bien connu ou de quelque chose de différent? » Selon le contexte, les anomalies détectées sont soit exclues, soit analysées.

Lorsqu’il est question d’apprentissage machine, la détection d’anomalies consiste à apprendre ou à définir ce qui est normal, et à utiliser ce modèle de normalité pour détecter les anomalies ou les écarts intéressants. Ironiquement, le champ d’études lui-même n’a pas de norme en ce qui concerne les termes désignant normalité et anomalies. Parmi les termes utilisés, on retrouve ,entre autres, données normales ou anormales, données habituelles ou inhabituelles, données de base et écart, données connues et nouvelles [1].

Difficultés relatives à la détection d’anomalies

La classification en l’absence de labels

Les modèles de détection d’anomalies visent à produire un classificateur permettant d’établir si une observation est normale ou non, même s’ils ont été entraînés uniquement à partir de la classe normale. Il s’agit, en soi, d’un problème de classification à deux classes. Problème, habituellement résolu au moyen d’un apprentissage supervisé, s'appuyant sur un ensemble vaste et équilibré de données labellisées tirées des deux classes. Mais cette approche ne fonctionne pas si l'on dispose de peu ou pas d'exemples positifs (anomalies), et d'un vaste échantillon de négatifs (données normales). Dans cette situation, il est préférable d'utiliser la détection d’anomalie.

L'hypothèse est qu’on ne possède pas suffisamment d’information sur la deuxième classe (les anomalies) pour en tirer quoi que ce soit d’utile. On adopte donc une autre approche : apprendre à connaître les caractéristiques de la classe normale uniquement, puis utiliser ce modèle pour repérer tous les éléments qui n’y correspondent pas. Par exemple, si la classe normale est constituée de chiens, on peut établir « quatre pattes » et « pelage » comme des caractéristiques fréquentes. Ainsi, un modèle ayant appris ces concepts devrait pouvoir déterminer qu’un iceberg est une anomalie. D’autres techniques peuvent être utilisées dans les situations où peu de labels sont disponibles, notamment l’apprentissage semi-supervisé, l’apprentissage à partir de très peu d’exemples (few shot learning), et l’apprentissage par transfert (transfer learning). Celles-ci permettent d'utiliser au mieux les annotations disponibles.

Le choix d’un seuil

De façon générale, lorsque l’on entraîne un algorithme de détection d'anomalie, on obtient une fonction capable d’attribuer un score d’anomalie pour toute observation. La plupart des données obtiendront des scores faibles, tandis que les anomalies devraient se démarquer en obtenant des scores élevés. Pour trancher, il faut établir un seuil de détection qui permettra de séparer les données habituelles des anomalies. Ainsi, toute donnée dont le score est supérieur au seuil établi sera considérée comme une anomalie. Prenons un exemple du secteur manufacturier : supposons qu’un algorithme doive inspecter visuellement certaines pièces qui sont fabriquées. Établir le seuil correspond ici à répondre à la question : « Dans quelle mesure une pièce doit-elle être imparfaite pour être exclue? »

Il est possible d’optimiser ces seuils à l'aide des quelques exemples positifs disponibles (anomalies). Le processus peut aussi tenir compte du coût respectif des faux positifs et des faux négatifs.

La gestion des faux positifs

L’un des principaux problèmes de la détection d’anomalies est qu’elle produit souvent un grand nombre de faux positifs. Ce problème vient principalement du fait que le modèle n’est pas directement optimisé pour la détection d’exemples particuliers. Un algorithme de détection d’anomalie détectera toute donnée inhabituelle, et cela peut inclure des exemples anodins ou peu intéressant.

Une donnée inhabituelle n’est pas toujours pertinente

La pertinence est un facteur subjectif. Si, dans un contexte et un problème précis, les données inhabituelles ne sont pas pertinentes pour l'utilisateur du système, les résultats ne seront pas utiles. Il existe quelques solutions pour adresser ce problème :

  • Modifier la tâche : En reformulant le problème, en modifiant la question ou la représentation de la donnée
  • Intégrer les retours de l'utilisateur : En labellisant les éléments détectés comme étant des vrais ou des faux positifs. Cette information peut servir à entraîner un classificateur supervisé plus traditionnel.
  • Oublier la détection d’anomalie : Si votre objectif est très précis et qu’il est possible de créer un jeu de donnée labellisé représentatif des deux classes, il est alors préférable de prendre le temps de créer ce jeu de donnée et d'utiliser un apprentissage supervisé.

Approches existantes pour la détection d’anomalies

Voici un bon exemple pour la détection d’anomalie : l’un de ces éléments n’est pas comme les autres.

Approches existantes pour la détection d’anomalies

Nous utiliserons cette image et des données similaires dans les exemples qui suivent.

Estimer les paramètres d'une distribution gaussienne

Si la régression linéaire est le modèle d’apprentissage supervisé le plus simple, utiliser la distribution gaussienne est son équivalent en matière de détection d’anomalies. Supposons que nous disposons d’un jeu de données où chaque observation est une personne. Chaque personne n’est décrite que par une variable, soit sa taille en centimètres. Le jeu de données comprend des anomalies, dont deux chiens qui ont été intégrés par erreur.

Nous faisons ici l'hypothèse que la distribution réelle de nos donnée suit la distribution normale (ou gaussienne). Celle-ci a une forme de courbe en cloche et dépend entièrement de deux paramètres : son centre (ou moyenne) et son écart type. "L'entraînement" de notre algorithme consiste simplement à déterminer quelle devra être la valeur de ces deux paramètres afin d’épouser le plus étroitement possible la distribution des exemples. Si le jeu de données est suffisamment grand et représentatif, la moyenne devrait approcher les 175 cm, et l’écart type environ 8 cm.

Distribution gaussienne

Une fois ces deux paramètres estimés, on peut établir la probabilité d’apparition pour toutes les tailles (y compris celles qui ne figurent pas dans les données d’entraînement). En fixant le seuil de probabilité, par exemple à 0,1 %, on peut considérer toute donnée inférieure au seuil comme étant une anomalie. Cette façon de faire détectera probablement les deux chiens, qui sont bien à l’écart du coeur de la distribution.

De nombreuses techniques de détection d'anomalie sont des variantes de cette dernière (même hypothèse gaussienne) : loi normale multidimensionnelle, scores z, test de Grubbs, écart médian absolu.

Voici trois approches plus récentes :

  • Local Outlier Factor (LOF): On attribue à chaque donnée un score (LOF) fondé sur le ratio obtenu en comparant la densité locale d’une observation à celle de ses plus proches voisins. Les points observés ayant une faible densité locale comparativement à leurs plus proches voisins sont considérés comme des anomalies.
  • Isolation Forest: Cet algorithme cherche à isoler les observations avec des coupures successives et aléatoires (arbre de décision). Les points faciles à isoler (qui sont seuls ou dans une région à faible densité) sont considérés comme des anomalies. Les points issues de zones à forte densité (durs à isoler) sont considérées comme normaux.
  • one-class SVM : Il s’agit de définir un hyper-plan (un plan dans un espace 3+D) qui rassemble la majeure partie des données d’un côté (la normalité), et peu ou pas de l’autre (les anomalies). Le plan agit comme frontière décisionnelle pour les nouvelles données.

Pour en savoir plus sur ces algorithmes, vous pouvez consulter cette page de sklearn.

Où sont mes réseaux de neurones?

Ces approches classiques sont très populaires et utiles. Les réseaux de neurone présentent, quant à eux, des avantages clés pour traiter des données volumineuses et multidimensionnelles. Voici une recette permettant de détecter des anomalies au moyen de réseaux de neurone (ou à l'aide d'un autre modèle supervisé de votre choix):

  1. Définir une tâche (soyez créatif).
  2. Entraîner un modèle pour effectuer la tâche sur la donnée normale.
  3. Évaluer la performance du modèle lorsqu’il traite de nouvelles données
  4. Considérer une performance faible sur les nouvelles données comme un signe d’anomalie.

Beaucoup d'idées et de tâches développées en apprentissage non supervisé peuvent servir à détecter des anomalies.

L’art de concevoir une tâche

Cette recette en quatre étapes est une méthode très générique pour détecter des anomalies. La première étape, qui consiste à définir la tâche, est cruciale. Elle détermine le type d’architecture qui pourra être utilisé. Et, comme mentionné précédemment, elle peut renforcer la pertinence des résultats (des anomalies) dans un contexte d’utilisation donné. Voici deux familles de tâches qui pourraient vous inspirer :

  • Apprendre à reproduire sa donnée (grâce aux auto-encodeurs) : Cet outil est universel et peut s’appliquer à n’importe quelle situation. Une grosse erreur de reconstruction agit comme indice pour détecter les anomalies.

Remarque : La version plus classique de cette tâche est l’erreur de reconstruction issue d'une analyse en composantes principales (surveiller l’erreur après une compression et décompression).

  • Apprendre à prédire une partie des données (apprentissage auto-supervisé ou 'self-supervised') : voilà un autre outil universel. Mais dans ce cas-ci, l’élément décisif consiste à choisir ce qu’il faut prédire (l'expertise du domaine rentre en jeu). Encore une fois, les erreurs de prédiction ou de classification sont des signes d'anomalie

Remarque : la prévision (forecasting) de séries temporelles est un exemple de tâche auto-supervisée pouvant être utilisée pour détecter des anomalies.

Si la tâche est correctement choisie, donc suffisamment difficile, le modèle apprendra des concepts généraux sur la donnée d’entraînement. Il trouvera des corrélations, des interactions, des régularités intéressantes, et sera de plus en plus certains et confiants dans ses prédictions. Ces concepts et caractéristiques auront de grandes chances de devenir invalides lorsque le modèle manipulera de nouvelles observations très différentes.

Il est possible de rendre ces tâches interprétables. Si la variable que le modèle apprend à prédire est concrète et compréhensible, on peut alors facilement comparer la prédiction avec les résultats réels (une première forme d’explication).

Application de la recette

Suivons la recette afin de détecter les anomalies dans un jeu de données composé de visages. Plus précisément, nous utiliserons le jeu de données CelebA-HQ comprenant 30 000 photos de célébrités. Pour apprendre des concepts intéressants à partir de ces visages, essayons de définir une tâche auto-supervisée (étape 1).

Voici une liste non exhaustive de tâches à notre disposition :

Application de la recette pour détecter les anomalies

Pour chacune de ces tâches, nous pouvons générer des paires entrées-sorties automatiquement, sans intervention humaine — ce qui correspond à la définition de l’apprentissage auto-supervisé.

Prenons le troisième exemple, qui consiste à prédire le côté droit d’un visage à partir de son côté gauche. Cette tâche est intéressante, puisque nous savons déjà qu’un visage est plus ou moins symétrique. Pour réaliser cette tâche, j’ai entraîné un modèle de type pix2pixHD (une architecture très efficace de manipulation d'image). Voici certains des résultats obtenus pour des photos de célébrités jamais observées auparavant :

Détection d'anomalies dans les images de célébrités

Voici les résultats obtenus pour des images de chiens et d’objets encore plus différents :

application de la recette pour détecter les anomalies parti 3

Voyons s’il est possible d’exploiter ces échecs pour établir un système de détection d’anomalies.

Examinons la distribution des erreurs de prédictions, dans un cas sur des visages jamais observés, et dans l'autre sur des images de golden retrievers (issues de BigGan):

Erreur de prediction . gauche vers droite

Il semble que 0,1 soit un seuil approprié pour notre système de détection d’anomalies.

Sur l’histogramme bleu, on peut observer des erreurs de prédiction rares, mais importantes, par rapport aux visages. Voici trois des images ayant provoqué de grosses erreurs : l’une est dû à une main inattendue, et les deux autres à des arrière-plans difficiles à prédire. Techniquement, ces images sont inhabituelles sur le plan statistique.

Selon le résultat attendu, on pourrait considérer qu’il s’agit de faux positifs. Mais, dans notre cas, ces résultats sont attendus quand on considère la tâche choisie. Le côté droit réel est tout à fait plausible, mais inhabituel. Un réseau de neurone classique va prédire le résultat le plus plausible, et non les cas particuliers.

GAN traditionelle

Les GANs : la réponse à tous les problèmes?

L’objectif d'un GAN traditionnel est d’apprendre la distribution réelle de la donnée d’entraînement. En d'autres termes, si l'on montre à un GAN suffisamment de visages, l’algorithme peut, en théorie, apprendre ce qui constitue un visage, et ultimement générer tous les visages possibles.

Il est à noter que les GANs sont déjà utilisés pour la détection d’anomalie.

Dans cette optique, une observation est considérée comme une anomalie s’il est difficile de produire une donnée similaire au moyen du générateur. Si l’on reprend l’exemple des célébrités, en cherchant dans l'espace des images possibles que peut créer le GAN, on devrait plus facilement approximer un nouveau visage qu'un nouveau chien.

Vous avez donc une tâche (se rapprocher de l’image cible) ainsi qu’une mesure de performance (la similarité entre l’image générée et l’image cible). Il suffit maintenant d’établir un seuil pour obtenir un algorithme de détection d’anomalies à base de GANs.

Comme pour les tâches précédemment décrites, l'algorithme créé tire parti de concepts robustes ayant été appris par un réseau de neurone. Les GANs connaissent beaucoup de choses sur la donnée d'entraînement (en théorie, tout ce qu'il faut en connaître). Ces algorithmes sont donc des candidats idéaux pour nombre de tâches.

Si les GANs vous intéressent, et vous souhaitez les utiliser pour régler tous les problèmes en Machine Learning, je vous invite à lire cet article tiré de la conférence NeurIPS de 2018 sur la classification robuste de chiffre (MNIST) au moyen de GANs.

Notes

[1] En ce qui concerne la distinction entre détection d’anomalies et la détection de nouveautés, les opinions divergent sur la terminologie à adopter. Mais de façon générale :

  • La détection d’anomalies (outlier detection) signifie repérer les anomalies ou les valeurs aberrantes dans les données d’entraînement (que ce soit pour les éliminer du jeu de données ou pour les analyser)
  • La détection de nouveautés (novelty detection) consiste, elle, à détecter des anomalies dans les nouvelles données qui n’ont pas été observées à l’étape de l’entraînement. Certains considèrent même que toute la donnée d’entraînement devrait être normale (pure et non contaminée).

Note: Histoire de compliquer encore les choses, certains utilisent le terme « détection d’anomalie » alors qu’ils font en fait un apprentissage supervisé direct (prédiction directe des anomalies étiquetées).

*Les photos dans cet article sont une oeuvre dérivée de "Progressive Growing of GANs for Improved Quality, Stability, and Variation – Official TensorFlow implementation of the ICLR 2018 paper" par Tero Karras (NVIDIA), Timo Aila (NVIDIA), Samuli Laine (NVIDIA), Jaakko Lehtinen (NVIDIA and Aalto University) distribuée en vertu de la licence CC BY-NC 4.0