Détecter automatiquement des anomalies qui apparaissent dans des séries de données temporelles n’est pas une mince affaire. Plusieurs obstacles se sont dressés devant nous. Cet article retrace les étapes par lesquelles nous sommes passées pour répondre à cette problématique.

Définir « anomalie »

comment détecter des anomalies automatiquement - exemple anomalie

Chercher à définir ce qu’est une anomalie revient un peu à se demander ce qu’est la normalité. Il n’existe pas de règle toute faite, et cela dépend évidemment du contexte. Définir ces règles « à la main » serait empirique et présenterait un grand risque d’introduire des préconceptions.

Dans notre cas, il nous paraissait plus simple de laisser la machine définir la « normalité » à partir des données existantes. C’est pour cela que nous avons décidé d’utiliser le deep learning. À partir des données temporelles précédentes et de plusieurs paramètres, un réseau de neurones réalise une prédiction pour chaque nouveau point de donnée. Cette prédiction est une manière d’obtenir une valeur « normale », ou attendue, à comparer à la donnée réelle.

Comment comparer

Suite à l’obtention d’une valeur attendue comme élément de comparaison, une nouvelle problématique se pose. Comment comparer la donnée réelle à cette valeur « normale » ?

Le principe peut paraître simple. Si l’observation réelle s’éloigne trop de la prédiction, on considère le point comme une anomalie. Mais la problématique demeure. La question devient alors: à partir de quel seuil considère-t-on un point comme trop éloigné de la valeur attendue ?

Il existe de nombreuses manières de s’attaquer à cette question. La plus simple est de mesurer la distance entre le point et sa valeur attendue et de placer un seuil à partir duquel un point est considéré anormal. Cependant, dès lors qu’on travaille avec des courbes aux amplitudes hétérogènes, une simple distance ne suffit plus. Une normalisation sur l’ensemble des séries de données est nécessaire. C’est la première approche que nous avons utilisée, avec une normalisation par cote Z. Nous avons ensuite placé un seuil sur la valeur absolue de la cote Z au-delà duquel la machine classe un point dans les anomalies. Nous avons choisi le seuil de manière à obtenir un nombre d’anomalies sur l’ensemble des données de l’ordre de quelques pourcents.

Cependant, ce seuil sur la cote Z reste totalement empirique et ne prend que peu de paramètres en compte.

Modèle probabiliste

Comme les réseaux de neurones que nous utilisons pour générer les prédictions sont basés sur des probabilités, nous avons choisi d’exploiter ces données probabilistes.

Les algorithmes de prédiction génèrent en effet tout un ensemble de points possibles. On considère en général que le point le plus probable est situé autour de la médiane de l’ensemble. C’est ce point médian que nous utilisions dans un premier temps comme valeur attendue. Mais en générant suffisamment de points, on peut effectuer une analyse statistique plus poussée de l’ensemble des points prédits. Ainsi, on peut par exemple considérer qu’une nouvelle valeur est une anomalie quand elle sort de l’intervalle des 50% des points les plus probables. Autrement dit, que la valeur est en dehors des quartiles Q1 et Q3. Cet intervalle est arbitraire dans un premier temps, mais on peut faire varier ce pourcentage jusqu’à obtenir une distinction des anomalies qui nous convient.

Pourquoi cela ne suffit pas

Même si notre processus s’est amélioré au fil des itérations évoquées plus haut, nous n’étions toujours pas satisfaits de la détection d’anomalies. C’est en vérifiant « à la main » les résultats donnés par la machine (en analysant les courbes), que nous nous sommes convaincus qu’il manquait une intervention humaine dans le processus. Une intervention pour aiguiller la machine sur ce qui est une anomalie et ce qui n’en est pas une.

Des étiquettes !

Ce qui manquait à la machine, ce sont des exemples concrets de points en anomalie. Et d’autres points, que la machine aurait pu considérer comme des anomalies, mais qui ne le sont pas. Bref, ce qui manquait à la machine jusqu’à présent ce sont des étiquettes. L’objectif était donc de transformer notre entraînement non supervisé en entraînement semi-supervisé. Il s’agit de fournir des données étiquetées mélangées aux données non étiquetées au processus. Grâce aux étiquettes, on peut ensuite déterminer le nombre de faux et vrai-positifs ainsi que le nombre de faux et vrai-négatifs renvoyés par le modèle.

À partir de ces valeurs, il est bien plus facile d’évaluer la pertinence de notre modèle. Un calcul de F-mesure, qui est un compromis entre la précision et le rappel, permet par exemple de donner une note à notre modèle. L’idée a donc émergé de générer un grand nombre de modèle de prédiction avec des paramètres différents dans chaque cas, et de ne garder que celui qui aurait la meilleure F-mesure. Ce besoin nous a conduit à lancer le développement d’une « pipeline d’évaluation », qui automatisera tout ce processus.

septembre 4, 2020 8:00
Partagez sur :

Besoin d’être conseillé ?

Nous sommes là pour vous répondre. N’hésitez pas à nous donner votre numéro de téléphone pour que nous puissions vous rappeler dans les plus brefs délais.