Afin de mieux exploiter un jeu de données, un traitement particulier lui est souvent appliqué: le partitionnement, ou clustering. Dans notre cas, il s’agit de partitionner des données temporelles. Mais en quoi est-ce que cela consiste ?

Notre besoin

Notre objectif est de pouvoir détecter des anomalies (ie. les valeurs qui sortent de la normale) en temps réel sur un grand nombre de séries temporelles. Pour cela, nous avons souhaité utiliser une approche par deep learning comme expliqué dans cet article. À l’heure actuelle, nous possédons peu d’informations sur cette donnée temporelle pour nous aider à identifier les anomalies. Nous ne possédons pas d’étiquettes sur les points de données considérés comme des anomalies notamment. De plus, nous ne faisons pour le moment aucune distinction entre toutes ces séries temporelles. Pourtant elles proviennent de comptes marketing assez différents les uns des autres. Tant au niveau des volumes en jeu que des variations dans les séries de données.

Nous nous sommes basés sur plusieurs séries de données différentes: impressions, clics, conversions, etc. Entre certains comptes, on observe des comportements proches (une saisonnalité similaire par exemple). Tandis que pour d’autres l’évolution peut être totalement différente, à cause des écarts entre les volumes mis en jeu notamment. En effet, pour un « petit » compte qui réalise quelques dizaines d’impressions quotidiennes, une variation de quelques impressions représente une grande fluctuation relative de son volume, contrairement à un compte effectuant des milliers d’impressions chaque jour.

Même en normalisant ces données par rapport à leur volume, il subsiste encore des disparités entre les séries de données trop importantes pour les utiliser telles quelles dans l’entraînement d’un réseau de neurones. Ces disparités peuvent fausser la détection d’anomalies, car ce qui est une anomalie pour certains comptes ne le sera pas forcément pour d’autres. Finalement, décider qu’un point dans une de nos séries de données est une anomalie ne dépend pas uniquement de la donnée brute. Cela dépend également de variables relatives à cette série et à ce compte.

Cependant, nous ne pouvons pas nier qu’il existe un lien dans l’évolution des données de campagnes entre différents comptes marketing. De plus, si nous voulions utiliser le deep learning pour la détection d’anomalies c’est avant tout pour profiter de notre grand volume de données. Plutôt que d’isoler complètement les données de chaque compte nous avons donc choisi une approche couramment utilisée dans la data science: le partitionnement, ou clustering.

Le partitionnement, quèsaco?

C’est une technique consistant à séparer ou catégoriser un ensemble de données en plusieurs groupes distincts. Ceci en fonction de leurs similarité et/ou disparité.

Le partitionnement de données sert dans de nombreux domaines de la data science. Il permet d’analyser les données en leur attribuant des catégories qu’il n’est pas toujours possible d’obtenir autrement (avec des tags par exemple). Cela est très utile dans le cas où ces données sont nouvelles ou mal connues. On peut ainsi déterminer plus facilement les variables qui lient les jeux de données entre eux ou au contraire qui les séparent.

Les données issues du partitionnement peuvent ensuite servir dans différents scénarios. Elles peuvent par exemple être exploitées directement pour déterminer un jeu de données anormal au sein d’un ensemble. En choisissant bien la technique de partitionnement, l’algorithme peut en effet faire ressortir les jeux de données qui sortent le plus de la normale dans un cluster à part.

Une autre utilisation de cette information de catégorie est lorsque l’on souhaite utiliser cette donnée pour du machine learning. Partitionner des données temporelles par exemple peut servir lors de prédictions sur l’évolution future de la série. L’intérêt d’avoir partitionné les données est que celles-ci sont regroupées en groupes au « fonctionnement » proche. L’algorithme sera ainsi en principe plus précis dans ses prédictions. C’est ce que nous souhaitons faire dans notre approche. En effet, une manière de détecter les anomalies dans des séries temporelles est de comparer un point de donnée réelle à sa valeur prédite à partir des points précédents.

Différents types de partitionnement

Il existe de nombreuses manières de partitionner des données. Une des plus basiques étant de s’appuyer sur des métadonnées existantes, auxquelles on peut faire subir différents traitements. Il est aussi parfois possible de partitionner « à la main » en analysant son jeu de données série par série et en tirer des critères discriminants.

Toutefois, le volume de données ou leur nature ne permet pas ce travail manuel en général. De plus en plus, l’homme a recours à la machine pour partitionner ses données. De nombreux algorithmes existent d’ailleurs déjà pour réaliser ce processus. La difficulté se situe en général dans le choix de ce dernier, car chaque algorithme possède des forces et des faiblesses qui dépendent du jeu de données.

Certains algorithmes demandent par exemple plus de paramètres que d’autres, comme le nombre de clusters à créer. Un des atouts de ces algorithmes est qu’ils sont moins gourmands en puissance de calcul et sont de fait plus simple à passer à l’échelle. K-means (ou le partitionnement en k-moyennes en français) est un exemple classique de ce type d’algorithmes.

D’autres algorithmes ne demandent aucun paramètre supplémentaire: ils déterminent le nombre de clusters à partir du jeu de données. Ils sont en revanche plus gourmands en puissance de calcul. Ils peuvent être utiles pour déterminer les séries de données qui sortent de la normale. Ces dernières seront automatiquement mises à l’écart.

Dans notre cas toutefois, nous cherchons à identifier des points en anomalie au sein de séries temporelles. Nous partons du principe qu’aucune série que nous étudions n’est anormale dans son ensemble. De plus, notre volume de données est assez conséquent, c’est pourquoi nous souhaitons privilégier un algorithme de partitionnement peu gourmand. Comme souvent cependant, avant de trouver la bonne méthode pour partitionner des données temporelles, il faut en essayer plusieurs.

août 28, 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.