Share via


Détection d’anomalies et prévision

Les services cloud et les appareils IoT génèrent des données de télémétrie qui peuvent être utilisées pour obtenir des informations telles que la surveillance de l’intégrité des services, les processus de production physiques et les tendances d’utilisation. L’analyse des séries chronologiques est un moyen d’identifier les écarts dans le modèle de ces métriques par rapport à leur modèle de base classique.

Langage de requête Kusto (KQL) contient la prise en charge native de la création, de la manipulation et de l’analyse de plusieurs séries chronologiques. Avec KQL, vous pouvez créer et analyser des milliers de séries chronologiques en secondes, ce qui permet des solutions et des flux de travail de supervision en quasi-temps réel.

Cet article décrit en détail les fonctionnalités de détection et de prévision des anomalies de série chronologique de KQL. Les fonctions de série chronologique applicables sont basées sur un modèle de décomposition connu robuste, dans lequel chaque série chronologique d’origine est décomposée en composants résiduels, de tendances et saisonnières. Les anomalies sont détectées par les valeurs hors norme sur le composant résiduel, tandis que la prévision est réalisée en extrapolant les composants de tendances et saisonnières. L’implémentation de KQL améliore considérablement le modèle de décomposition de base par la détection automatique de la saisonnalité, l’analyse robuste des valeurs hors norme et l’implémentation vectorisée pour traiter des milliers de séries chronologiques en secondes.

Prérequis

  • Un compte Microsoft ou une identité d’utilisateur Microsoft Entra. Un abonnement Azure n’est pas requis.
  • Lisez Analyse des séries chronologiques pour obtenir une vue d’ensemble des fonctionnalités de série chronologique.

Modèle de décomposition de série chronologique

L’implémentation native KQL pour la prédiction de série chronologique et la détection d’anomalies utilise un modèle de décomposition bien connu. Ce modèle s’applique aux séries chronologiques de métriques devant présenter un comportement tendance et périodique, telles que le trafic de service, les pulsations du composant et les mesures périodiques IoT pour prévoir les futures valeurs de métrique et détecter les anomalies. L’hypothèse de ce processus de régression est que, en dehors du comportement tendance et saisonnier précédent, la série chronologique est distribuée de manière aléatoire. Vous pouvez ensuite prévoir les futures valeurs de métriques à l’aide des composants de tendance et saisonniers, collectivement nommés ligne de base, et ignorer la partie résiduelle. Vous pouvez également détecter des valeurs anormales grâce à l’analyse des valeurs hors norme en utilisant uniquement la partie résiduelle. Pour créer un modèle de décomposition, utilisez la fonction series_decompose(). La fonction series_decompose() prend un ensemble de séries chronologiques et décompose automatiquement chaque série chronologique en composants saisonniers, de tendance, résiduels et de ligne de base.

Par exemple, vous pouvez décomposer le trafic d’un service web interne à l’aide de la requête suivante :

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t step dt by sid 
| where sid == 'TS1'   //  select a single time series for a cleaner visualization
| extend (baseline, seasonal, trend, residual) = series_decompose(num, -1, 'linefit')  //  decomposition of a set of time series to seasonal, trend, residual, and baseline (seasonal+trend)
| render timechart with(title='Web app. traffic of a month, decomposition', ysplit=panels)

Décomposition de série chronologique.

  • La série chronologique d’origine est étiquetée num (en rouge).
  • Le processus commence par la détection automatique de la saisonnalité en utilisant la fonction series_periods_detect() et extrait le modèle saisonnier (en violet).
  • Le modèle saisonnier est soustrait de la série chronologique d’origine et une régression linéaire est exécutée à l’aide de la fonction series_fit_line() pour trouver le composant tendance (en bleu clair).
  • La fonction soustrait le composant trend et le reste devient le composant residual (en vert).
  • Enfin, la fonction ajoute les composants saisonniers et de tendance afin de générer la ligne de base (en bleu).

Détection des anomalies de série chronologique

La fonction series_decompose_anomalies() recherche des points anormaux sur un ensemble de séries chronologiques. Cette fonction appelle series_decompose() pour générer le modèle de décomposition, puis exécute series_outliers() sur le composant résiduel. series_outliers() calcule les scores d’anomalies pour chaque point du composant résiduel à l’aide du test des étendues de Tukey. Les scores d’anomalies au-dessus de 1.5 ou en dessous de -1.5 indiquent respectivement une augmentation ou une baisse modérée des anomalies. Les scores d’anomalies au-dessus de 3.0 ou en dessous de -3.0 indiquent une anomalie forte.

La requête suivante permet de détecter les anomalies dans le trafic du service web interne :

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t step dt by sid 
| where sid == 'TS1'   //  select a single time series for a cleaner visualization
| extend (anomalies, score, baseline) = series_decompose_anomalies(num, 1.5, -1, 'linefit')
| render anomalychart with(anomalycolumns=anomalies, title='Web app. traffic of a month, anomalies') //use "| render anomalychart with anomalycolumns=anomalies" to render the anomalies as bold points on the series charts.

Détection des anomalies de série chronologique.

  • La série chronologique d’origine (en rouge).
  • Le composant (saisonnier + de tendance) de la ligne de base (en bleu).
  • Les points anormaux (en violet) en haut de la série chronologique d’origine. Les points anormaux s’écartent sensiblement des valeurs de base attendues.

Prévision de séries chronologiques

La fonction series_decompose_forecast() prédit les valeurs futures d’un ensemble de séries chronologiques. Cette fonction appelle series_decompose() pour générer le modèle de décomposition, puis, pour chaque série chronologique, extrapole le composant de ligne de base dans le futur.

La requête suivante permet de prédire le trafic du service web de la semaine suivante :

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
let horizon=7d;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t+horizon step dt by sid 
| where sid == 'TS1'   //  select a single time series for a cleaner visualization
| extend forecast = series_decompose_forecast(num, toint(horizon/dt))
| render timechart with(title='Web app. traffic of a month, forecasting the next week by Time Series Decomposition')

Prévisions de série chronologique.

  • Métrique d’origine (en rouge). Les valeurs futures sont manquantes et définies sur 0, la valeur par défaut.
  • Extrapolez le composant de base de référence (en bleu) pour prédire les valeurs de la semaine prochaine.

Extensibilité

Langage de requête Kusto syntaxe active un seul appel pour traiter plusieurs séries chronologiques. Son implémentation optimisée unique permet d’accélérer les performances, ce qui est essentiel pour une prévision et une détection des anomalies efficaces lors de la surveillance de milliers de compteurs dans des scénarios en quasi-temps réel.

La requête suivante montre le traitement simultané de trois séries chronologiques :

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
let horizon=7d;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t+horizon step dt by sid
| extend offset=case(sid=='TS3', 4000000, sid=='TS2', 2000000, 0)   //  add artificial offset for easy visualization of multiple time series
| extend num=series_add(num, offset)
| extend forecast = series_decompose_forecast(num, toint(horizon/dt))
| render timechart with(title='Web app. traffic of a month, forecasting the next week for 3 time series')

Scalabilité de série chronologique.

Résumé

Ce document détaille les fonctions KQL natives pour la détection et la prévision des anomalies de série chronologique. Chaque série chronologique d’origine est décomposée en composants saisonniers, de tendance et résiduels pour la détection des anomalies et/ou la prévision. Ces fonctionnalités peuvent être utilisées pour des scénarios de surveillance en quasi-temps réel, tels que la détection des erreurs, la maintenance prédictive et la prévision de charge à la demande.