Dans l’article précédent, nous parlions de lancer le développement d’une pipeline d’évaluation, visant à automatiser la génération d’un grand nombre de modèles de détection d’anomalies. Ci-dessous un aperçu de notre approche.

Du partitionnement à l’évaluation

L’étape initiale consiste à récupérer la donnée depuis notre base de données. Dans notre cas, nous récupérons l’historique des variables que nous souhaitons analyser (impressions, clicks, conversions…) sur une période définie. Nous faisons cela pour l’ensemble des comptes marketing par exemple, ou bien pour l’ensemble des campagnes ou adgroups. Pour le moment, nous stockons les étiquettes à part. Celles-ci indiquent des points d’anomalie et de non-anomalie, vérifiés « à la main ».

Partitionnement et préparation des données

Une fois la donnée chargée en mémoire, on lui applique la première opération: celle du partitionnement. Le module de partitionnement sépare les séries temporelles en clusters, selon plusieurs algorithmes de partitionnement et jeux de paramètres. Pour chaque manière de partitionner, on sépare la pipeline en sous-branches pour la suite de l’exécution.

Une fois les différents partitionnements effectués, nous séparons les données en deux groupes distincts dans chaque cluster. C’est la phase de préparation des données. Une partie des séries temporelles, contenant impérativement des données étiquetées, sera utilisée pour l’évaluation. L’autre partie est transmise au module d’entraînement.

Entraînement, prédiction, puis évaluation

À nouveau, on sépare chaque branche de la pipeline autant de fois qu’il y a de manières différentes d’entraîner le modèle. En effet, nous souhaitons pouvoir comparer différents réseaux de neurones avec plusieurs jeux de paramètres.

Après l’entraînement des différents réseaux, les modèles ainsi générés vont pouvoir calculer des prédictions pour tous les points (étiquetés) du jeu de données mis de côté pour l’évaluation. La pipeline d’évaluation compare ensuite ces prédictions aux points observés comme expliqué la dernière fois, lors de l’étape d’évaluation. Les points observés en dehors de l’intervalle de prédiction sont classés comme des anomalies. Comme chaque point possède une étiquette, nous savons s’il s’agit vraiment d’une anomalie ou non. Nous pouvons ainsi en déduire si le modèle nous a donné un faux-positif, un vrai-positif, un faux-négatif ou bien un vrai-négatif.

Nous obtenons ces résultats pour chaque manière de partitionner, chaque cluster et chaque manière d’entraîner un réseau de neurones. À partir de l’ensemble de ces résultats, nous pouvons ensuite calculer la précision et le rappel pour chaque branche d’exécution. Ces deux valeurs permettent de calculer une « note » qui les combine, la F-mesure. Dans celle-ci nous pouvons donner plus de poids à l’une ou l’autre des valeurs en fonction de ce que nous souhaitons privilégier.

Finalement, nous utiliserons en phase de production le modèle de détection d’anomalies de la branche ayant la meilleure F-mesure.

Pipeline évaluation des modèles de détection anomalies - exemple d'exécution
Un exemple d’arbre d’exécution avec deux manières de partitionner (première séparation de la pipeline) et deux manières d’entraîner le réseau (deuxième séparation)

Les contraintes à respecter

Plusieurs contraintes sont à respecter lors de la conception d’une telle pipeline.

La première: tenir compte du nombre de données étiquetées avant d’effectuer des opérations sur un ensemble de séries. Si nous ne possédons pas assez de données étiquetées dans un cluster, l’évaluation n’aura pas une grande valeur. C’est pour cela que dans chaque branche d’exécution, nous vérifions que le partitionnement respecte un ratio minimum entre donnée étiquetée et donnée non étiquetée au sein de chaque cluster. Si ce n’est pas le cas, l’exécution s’arrête pour cette branche. Nous vérifions également que le rapport entre données étiquetées comme anomalies et celles étiquetées comme non-anomalies est assez équilibré, sans quoi le calcul de F-mesure sera une fois de plus peu pertinent.

Une autre contrainte que nous avons eu à surmonter est de correctement séparer les données en deux groupes. Un groupe pour l’entraînement, l’autre pour l’évaluation. Dans le groupe d’évaluation, il faut nécessairement garder uniquement des données étiquetées pour pouvoir mesurer la précision et le rappel du modèle. Le groupe d’entraînement quant à lui, ne doit contenir aucune donnée du groupe d’évaluation sous peine d’influencer le résultat du réseau de neurone. En effet, celui-ci connaîtrait déjà « ce qu’il va se passer » dans le jeu d’évaluation. Ce n’est pas représentatif d’une situation réelle, où le réseau n’a jamais rencontré les nouveaux points de données.

Nous avons fait le choix de considérer nos données série par série. C’est-à-dire que nous considérons une série contenant au moins un point étiqueté comme une série étiquetée. Ainsi, on conserve exclusivement des séries étiquetées dans le jeu de données d’évaluation. Nous avons fait ce choix car nous ne pouvions séparer un point de donnée du reste de sa série sans rompre la continuité de la série temporelle.

septembre 8, 2020 8:50
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.