Partager via


series_decompose_anomalies()

La détection des anomalies est basée sur la décomposition de série. Pour plus d’informations, consultez series_decompose().

La fonction prend une expression contenant une série (tableau numérique dynamique) comme entrée et extrait des points anormaux avec des scores.

Syntaxe

series_decompose_anomalies (Série, [ Tendance ,de saisonnalité, de seuil, Test_points , AD_method Seasonality_threshold ], )

En savoir plus sur les conventions de syntaxe.

Paramètres

Nom Type Requise Description
Série dynamic ✔️ Tableau de valeurs numériques, généralement la sortie résultante d’opérateurs make-series ou make_list .
Seuil real Seuil d’anomalie. La valeur par défaut est 1,5 k, pour détecter des anomalies légères ou plus fortes.
Saisonnalité int Contrôle l’analyse saisonnière. Les valeurs possibles sont les suivantes :

- -1: détection automatique de la saisonnalité à l’aide de series_periods_detect. Il s’agit de la valeur par défaut.
- Période d’entier : entier positif spécifiant la période attendue en nombre de compartiments. Par exemple, si la série se trouve dans 1h des bacs, une période hebdomadaire est de 168 bacs.
- 0: pas de saisonnalité, donc ignorer l’extraction de ce composant.
Tendance string Contrôle l’analyse des tendances. Les valeurs possibles sont les suivantes :

- avg: Définir le composant de tendance en tant que average(x). Il s’agit de la valeur par défaut.
- linefit: extraire le composant de tendance à l’aide de la régression linéaire.
- none: Aucune tendance, donc ignorer l’extraction de ce composant.
Test_points int Entier positif spécifiant le nombre de points à la fin de la série à exclure du processus d’apprentissage ou de régression. Ce paramètre doit être défini à des fins de prévision. La valeur par défaut est 0.
AD_method string Contrôle la méthode de détection d’anomalies sur la série chronologique résiduelle, contenant l’une des valeurs suivantes :

- ctukey: Test de clôture de Tukey avec une plage personnalisée de 10e à 90e centile. Il s’agit de la valeur par défaut.
- tukey: Test de clôture de Tukey avec une plage standard de 25e à 75e centile.

Pour plus d’informations sur les séries chronologiques résiduelles, consultez series_outliers.
Seasonality_threshold real Seuil du score de saisonnalité lorsque la saisonnalité est définie sur la détection automatique. Le seuil de score par défaut est 0,6.

Pour plus d’informations, consultez series_periods_detect.

Retours

La fonction retourne la série respective suivante :

  • ad_flag: série ternaire contenant (+1, -1, 0) marquage vers le haut/bas/aucune anomalie respectivement
  • ad_score: score d’anomalie
  • baseline: Valeur prédite de la série, selon la décomposition

Algorithme

Cette fonction suit les étapes suivantes :

  1. Appelle series_decompose() avec les paramètres respectifs pour créer la série de lignes de base et de résidus.
  2. Calcule ad_score série en appliquant series_outliers() avec la méthode de détection d’anomalie choisie sur la série résiduelle.
  3. Calcule la série ad_flag en appliquant le seuil sur le ad_score pour marquer respectivement une anomalie vers le haut/bas/aucun.

Exemples

Détecter les anomalies en saisonnalité hebdomadaire

Dans l’exemple suivant, générez une série avec saisonnalité hebdomadaire, puis ajoutez-y des valeurs hors norme. series_decompose_anomalies détecte automatiquement la saisonnalité et génère une ligne de base qui capture le modèle répétitif. Les valeurs hors norme que vous avez ajoutées peuvent être clairement repérées dans le composant ad_score.

let ts=range t from 1 to 24*7*5 step 1 
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t 
| extend y = 2*rand() + iff((t/24)%7>=5, 10.0, 15.0) - (((t%24)/10)*((t%24)/10)) // generate a series with weekly seasonality
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts 
| extend series_decompose_anomalies(y)
| render timechart  

Saisonnalité hebdomadaire montrant les valeurs de référence et les valeurs hors norme.

Détecter les anomalies dans la saisonnalité hebdomadaire avec la tendance

Dans cet exemple, ajoutez une tendance à la série de l’exemple précédent. Tout d’abord, exécutez series_decompose_anomalies avec les paramètres par défaut par défaut dans lesquels la valeur par défaut de tendance avg prend uniquement la moyenne et ne calcule pas la tendance. La base de référence générée ne contient pas la tendance et est moins exacte, par rapport à l’exemple précédent. Par conséquent, certaines des valeurs hors norme que vous avez insérées dans les données ne sont pas détectées en raison de la variance la plus élevée.

let ts=range t from 1 to 24*7*5 step 1 
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t 
| extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and ongoing trend
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts 
| extend series_decompose_anomalies(y)
| extend series_decompose_anomalies_y_ad_flag = 
series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes
| render timechart

Les valeurs hors norme de saisonnalité hebdomadaire avec tendance.

Ensuite, exécutez le même exemple, mais étant donné que vous attendez une tendance dans la série, spécifiez linefit dans le paramètre de tendance. Vous pouvez voir que la base de référence est beaucoup plus proche de la série d’entrée. Toutes les valeurs hors norme insérées sont détectées, ainsi que certains faux positifs. Consultez l’exemple suivant sur l’ajustement du seuil.

let ts=range t from 1 to 24*7*5 step 1 
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t 
| extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and ongoing trend
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts 
| extend series_decompose_anomalies(y, 1.5, -1, 'linefit')
| extend series_decompose_anomalies_y_ad_flag = 
series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes
| render timechart  

Anomalies de saisonnalité hebdomadaire avec tendance de trait d’ajustement.

Ajuster le seuil de détection d’anomalie

Quelques points bruyants ont été détectés comme des anomalies dans l’exemple précédent. À présent, augmentez le seuil de détection d’anomalie d’une valeur par défaut de 1,5 à 2,5. Utilisez cette plage d’interpercentiles afin que seules les anomalies plus fortes soient détectées. À présent, seules les valeurs hors norme que vous avez insérées dans les données sont détectées.

let ts=range t from 1 to 24*7*5 step 1 
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t 
| extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and onlgoing trend
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts 
| extend series_decompose_anomalies(y, 2.5, -1, 'linefit')
| extend series_decompose_anomalies_y_ad_flag = 
series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes
| render timechart  

Anomalies de série hebdomadaire avec un seuil d’anomalie supérieur.