Annoter et labelliser des séries temporelles

Annoter et labelliser des séries temporelles

Cet article a été rédigé par Julien Muller, CTO de Ezako.

Chez Ezako nous sommes des experts des données de type séries temporelles. Les séries temporelles sont des données de type spécifiques qui se différencient largement d’autres types de données de par leur production, leur usage et leurs propriétés.

Ces données font partie de notre quotidien. On peut par exemple penser au suivi d’une température, à un ECG ou au courant d’un composant électronique.

Les données peuvent être suivies à des fins de monitoring (pour des serveurs), de prédiction (dans la finance) ou de maintenance prédictive (dans l’industrie).

Les cas d’applications sont extrêmement ouverts, et les nouveaux cas d’usages apparaissent constamment avec l’invention de nouveaux objets, tels que les IOT et la digitalisation des chaînes de production.

Les séries temporelles ont des spécificités techniques, qui les différencient des autres types de données, on peut constater notamment :

  • Suite de valeurs qui évoluent au cours du temps
  • Souvent un grand nombre de points (généré par des machines), tant en fréquence qu’en nombre de séries 
  • Souvent un grand déséquilibre de labels et/ou de classes. Par exemple, le nombre de point en anomalie est très faible par rapport aux données normales

La labellisation ou l’annotation pour les séries temporelles

C’est l’action d’enrichir une ou plusieurs séries temporelles ou d’ajouter des métadonnées sur des séries. Elle s’effectue point par point, pour une période, ou pour une série entière.

Le type de label et les techniques utilisées vont dépendre directement de l’objectif recherché. En effet, on labellise dans un but spécifique et précis. Une labellisation pour maintenance prédictive n’est pas la même que pour classifier différents états d’un système. Dans le premier cas, le label sera peut-être une durée de vie restante point par point, et dans le second, une simple classe comme “ON”, “OFF”, “SWITCHING” …

Pourquoi labeliser ?

Pour apporter plus d’informations sur les séries temporelles qui sont à notre disposition. L’objectif peut être la classification, formaliser la compréhension d’un comportement, apprendre des anomalies pour les détecter ou les expliquer.

En Machine Learning, l’intérêt est presque évident. En effet, pour le data scientist, adresser une problématique supervisée est bien plus facile qu’une non supervisée. A jeu de données équivalent, les résultats des approches supervisées sont incroyablement meilleurs que non supervisées.

Pourquoi? 

D’abord parce que les 2 approches ne sont pas à armes égales. Les approches supervisées disposent de beaucoup plus d’informations que celles non supervisées.

Ensuite, les approches non supervisées proposent des qualités qui sont censées dépasser les approches supervisées. Par exemple, un algorithme de détection d’anomalies non supervisé devrait être à même de détecter des anomalies inconnues. Mais des approches hybrides peuvent également atteindre cet objectif.

On peut considérer différents types d’approches hybrides entre le non supervisé et le supervisé:

  • Modèle non-supervisé
  • Apprentissage non supervisé, et évaluation de la qualité de détection sur la base des données labellisées (évaluation supervisée)… autres actions supervisées
  • Semi-supervisé: Approches telles que les algorithmes non supervisés qui font des hypothèses sur les données : par exemple un auto encodeur qui considère que tout un jeu d’apprentissage est normal. Ou plus généralement, des algorithmes qui utilisent un ensemble restreint d’annotations.   
  • Self-supervised, ou le modèle effectue un apprentissage en 2 étapes, il constitue ses propres pseudo labels et apprend sur ses propres labels. Un exemple simple est l’IA qui joue aux échecs contre elle-même.
  • approche totalement supervisée

En pratique en Machine learning, avoir un jeu de données labéllisé est avantageux parce que cela permet d’évaluer plusieurs approches supervisées clairement avec des métriques telles que la précision, le rappel, le f-score, etc.

Toutefois, un écueil commun à ces dernières doit être adressé: le risque de sur-apprentissage ou overfitting. Ce risque est d’autant plus présent lorsque l’on a peu de labels, mais en être conscient permet de mettre en place des mécanismes qui le mitigent, telle que la validation croisée “k-fold cross validation”.

Si malgré cela  on est confronté à une situation de sur-apprentissage, on pourra changer d’approche et passer par exemple de modèles supervisés à des modèles à apprentissage non supervisé et une optimisation des hyper paramètres. Mais l’approfondissement de ce point mérite un article en soi!

Comment labelliser?

On peut penser à différentes approches pour annoter son jeu de données. Entre autre:

  • Approche manuelle
  • L’expertise métier
  • Un peu de code (python)
  • Avec un outil de labellisation comme Upalgo Labeling

Nous pouvons faire un petit cas pratique avec un fichier csv de timeseries de 50 000 lignes. Ce fichier comporte une colonne de timestamp et 4 capteurs. Les capteurs de vibration présentent des pics importants que nous souhaitons annoter pour créer un modèle de classification. L’objectif est de créer une nouvelle colonne contenant un texte de classe “pic haut”, “pic bas” ou “normal”.

Annoter et labelliser des séries temporelles

L’approche manuelle

Pour l’approche manuelle, nous allons utiliser excel. Après avoir importé le fichier CSV, excel propose une fonctionnalité de graphique, bien pratique pour faciliter le travail. Néanmoins, elle se révèle peu utilisable. Sur les  50 000 points, nous n’avons pu afficher que 5 000 points simultanément.

Annoter et labelliser des séries temporelles

Créer une colonne “label” est très simple, mais la tâche s’avère difficile. Il faut repérer sur le graphique le timestamp des pics pour les chercher ensuite dans le tableau et annoter la colonne. Puis passer aux 5 000 points suivants. Une fois cette tâche effectuée, le tableau est exportable au format CSV.

L’expertise métier

Pour cet exemple simpliste, on peut imaginer que l’expert métier nous a indiqué que les pics sont souvent grands, donc on va poser une limite et l’automatiser. Le langage d’implémentation a peu d’importance, python ou autre, pour des raisons graphiques, nous avons utilisé une formule excel :

Annoter et labelliser des séries temporelles

Si cette solution a l’avantage d’être très compacte et rapide à mettre en œuvre, elle montre rapidement ses limites. En effet, les pics n’étant pas constitués d’une seule valeur, on a une labellisation de faible qualité. Pour le pattern suivant, on s’attend à avoir une 15aine de points en “pic bas”, mais le résultat est assez erratique.

De plus, cette règle n’est applicable qu’à ce jeux de donnée précis, et doit être redéfinie pour un nouveau jeu de donnée même si il s’agit aussi de retrouver des pics dans la donnée :

Annoter et labelliser des séries temporelles

Bien sûr, on peut repasser sur chaque événement et valider les données, mais cela sera long. De plus, on fait une hypothèse métier forte en positionnant une limité à 2, ce qui amènera probablement à ignorer les événements de petite taille.

La labellisation de séries temporelles avec Python

On va ici essayer d’exploiter les capacités de pandas pour faire une labellisation rapide de meilleure qualité. Cela adressera une partie des limites de l’approche précédente, en particulier la prédéfinition d’un seuil d’anomalie.

On identifie que les pics sont des valeurs aberrantes localement, c’est à dire que tous les pics n’ont pas la même amplitude, nous définissons donc un algorithme qui cherche à isoler les pics en déterminant la moyenne ainsi que l’écart type normal sur des fenêtres glissantes pour ensuite déterminer un seuil variable en fonction de ces paramètres :

Annoter et labelliser des séries temporelles

Le choix de la taille de la fenêtre et du nombre de déviation à la moyenne qui déclenche la séparation reste à paramétrer lors de l’exécution de l’algorithme de la “rolling_std”, ici le couple (100,5) n’est pas l’unique bon paramétrage, mais un parmi d’autres. L’étape qui suit consiste à créer la colonne ‘class’ et lui attribuer les annotations calculées.

Annoter et labelliser des séries temporelles

Puis on plot le résultat :

Annoter et labelliser des séries temporelles

On procédera par la suite à la transformation des annotations numériques qui séparaient nos données en deux classes (0,10) équivalentes à (normal, pic) en triplet (normal, pic_haut, pic_bas).

L’ensemble de ce code est dans un notebook en annexe.

On constate une labellisation de plutôt bonne qualité et plus généralisable que la règle métier fixe pour la détection de pics dans les données, si on fait confiance à l’algorithme utilisé, on reporte donc la responsabilité sur le développeur et la martingale qu’il a identifié.

Utilisation de l’outil de labellisation Upalgo Labeling

Upalgo Labeling est un outil avec une interface graphique permettant de visualiser les séries temporelles et de labelliser rapidement les séries avec une validation humaine. Cela permet d’avoir plus de finesse dans l’annotation tout en garantissant un travail plus rapide.

Voici les étapes d’une bonne annotation avec l’outil :

Etape 1 : Dans l’outil Upalgo Labeling il est possible de visualiser et de labelliser manuellement un événement:

Annoter et labelliser des séries temporelles

Il est aussi possible d’utiliser la fonctionnalité automatique de proposition de zones à annoter, elle permettra de fournir rapidement plusieurs labels de qualité :

Annoter et labelliser des séries temporelles

Etape 2 : Puis on demande à Upalgo Labeling de propager les classes “pic haut” et “pic bas” préalablement définis, ce qui finalise l’annotation de l’ensemble du fichier :

Annoter et labelliser des séries temporelles

Etape 3 : On peut exporter le résultat dans un fichier CSV contenant une nouvelle colonne “label” :

Annoter et labelliser des séries temporelles

Ici, on constate que l’expert a un total contrôle sur ce qu’il l’annote, ce qui garantit une meilleure qualité de label.

Conclusion

On peut constater qu’avec les approches assistées d’outils tels que excel, l’annotation des séries temporelles est possible, mais sera assez besogneuse.

Une approche programmatique en s’appuyant sur l’expertise métier sera rapide, mais montre des lacunes assez évidentes.

L’approche python est déjà nettement plus intelligente mais demande un effort et des connaissances en programmation.

L’utilisation d’un outil comme Upalgo Labeling est beaucoup plus efficace et facile. Cela permet une annotation automatique et rapide sans avoir à coder des algorithmes dédiées.

Néanmoins il existe avec ces outils un risque de biais. Pour lever ce risque il est important d’utiliser beaucoup de datasets, et une confirmation humaine.