Les coûts d'Amazon Web Services ou de Google Cloud prêtent souvent à confusion, et il est difficile de faire le tri dans le bruit pour distinguer ce qui compte vraiment. Cet article explique comment détecter des tendances dans les coûts ou l'utilisation grâce à l'analyse de Mann-Kendall.

Faire le tri dans le bruit de la facturation AWS ou Google Cloud n'a rien d'évident
Imaginez que vous consultiez des séries temporelles superposées qui détaillent vos dépenses cloud par service sur le dernier mois (voir ci-dessous). Lorsque les séries de données sont trop nombreuses (50 dans notre exemple), il devient difficile de repérer à l'œil nu lesquelles progressent ou reculent — et c'est pourtant l'essentiel de ce qui nous intéresse.
Dans cet article, vous allez découvrir comment séparer le signal du bruit lorsqu'on manipule de grands volumes de séries temporelles.

Séries temporelles superposées sur un même graphique.
Plusieurs approches permettent de vérifier la présence d'une tendance monotone linéaire dans une série temporelle donnée.
Détecter les tendances avec le test de Mann-Kendall
Chez DoiT International, dans le cadre des technologies de Cloud Management que nous développons pour nos clients, nous nous appuyons sur le test de Mann-Kendall pour proposer une fonctionnalité d'analyse de tendances en un clic [ voir la vidéo]. L'approche s'apparente à une analyse de régression linéaire paramétrique, qui sert à vérifier si la pente de la droite de régression estimée diffère de zéro. Cette analyse de régression exige que les résidus de la droite ajustée suivent une distribution normale ; une hypothèse dont le test MK n'a pas besoin (le test MK est non paramétrique).

L'analyse de tendances en action dans la Cloud Management Platform (CMP) de DoiT International
Hypothèses sous-jacentes au test de Mann-Kendall
Le test repose sur les hypothèses suivantes, à partir de données de séries temporelles :
1. En l'absence de tendance, les mesures obtenues au fil du temps sont indépendantes et identiquement distribuées.
2. Les mesures reflètent les états réels des observables aux instants de mesure.
3. Les méthodes employées pour la collecte d'échantillons, les mesures instrumentales et le traitement des données sont impartiales.
Limites à garder à l'esprit
Le test de Mann-Kendall n'est pas adapté aux données présentant des périodicités (effets saisonniers, par exemple). Pour que le test soit efficace, il est recommandé d'éliminer tous les effets périodiques connus lors d'une étape de prétraitement, avant d'exécuter le test de Mann-Kendall.
Décomposition d'une série temporelle
Nous pouvons recourir à la décomposition saisonnière des séries temporelles par Loess (STL) pour décomposer une série temporelle en composantes saisonnière, de tendance et irrégulière. Cette décomposition se réalise aisément à l'aide du package stl en Go.
La méthode stl.Decompose prend en entrée les paramètres requis suivants :
- La série temporelle à décomposer
- La périodicité des données
- La largeur saisonnière
- Le type de modèle
Le modèle peut être soit stl.Additive() lorsque les variations autour de la tendance ne dépendent pas du niveau de la série, soit stl.Multiplicative() si la tendance est proportionnelle au niveau de la série.
Vous pouvez décomposer votre série temporelle et accéder à chaque composante de la manière suivante :
res := stl.Decompose(timeSeries, periodicity, width, modelType)
trend := res.Trend
seasonal := res.Seasonal
residual := res.Resid
Vous trouverez ci-dessous un exemple de série temporelle décomposée avec une saisonnalité hebdomadaire selon le modèle multiplicatif. On constate que les valeurs progressent et que des creux saisonniers apparaissent tous les sept jours.

Exemple d'une série temporelle décomposée en composantes de tendance, saisonnière et résiduelle.
Réaliser votre propre analyse de tendances
Exécutez le script ci-dessous pour voir comment le test de Mann-Kendall identifie une tendance monotone dans un échantillon de série temporelle.
Si une tendance se dégage de vos séries temporelles, vous aurez sans doute envie d'en calculer la pente de régression. Cela permet de mesurer la rapidité d'évolution des données. Cette information se révèle utile lorsque vous souhaitez, par exemple, filtrer toutes les séries temporelles dont la pente de régression est inférieure ou supérieure à X degrés.
Découvrez comment nous mettons en œuvre l'analyse de tendances chez DoiT International dans notre Cloud Management Platform ici !