series_decompose_anomalies()

La détection d’anomalie 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.

Syntax

series_decompose_anomalies (Série, [ Seuil,Saisonnalité,Tendance,, Test_points, AD_methodSeasonality_threshold ])

Découvrez les conventions de syntaxe.

Paramètres

Nom Type Obligatoire 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 les anomalies légères ou plus fortes.
Caractère saisonnier 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 est dans 1h des bacs, une période hebdomadaire est de 168 bacs.
- 0: aucune saisonnalité, donc ignorez l’extraction de ce composant.
Tendance string Contrôle l’analyse des tendances. Les valeurs possibles sont les suivantes :

- avg: définissez le composant de tendance comme 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, qui contient l’une des valeurs suivantes :

- ctukey: test de clôture de Tukey avec une plage de centiles personnalisée du 10e au 90e centile. Il s’agit de la valeur par défaut.
- tukey: test de clôture de Tukey avec une plage standard du 25e au 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 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 les séries respectives suivantes :

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

L’algorithme

Cette fonction suit les étapes suivantes :

  1. Appelle series_decompose() avec les paramètres respectifs pour créer la ligne de base et la série 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 de résidus.
  3. Calcule la série de ad_flag en appliquant le seuil sur le ad_score pour marquer respectivement une anomalie vers le haut/vers le bas ou l’absence d’anomalie.

Exemples

Détecter les anomalies dans la saisonnalité hebdomadaire

Dans l’exemple suivant, générez une série avec une 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 la base de référence et les valeurs aberrantes.

Détecter les anomalies dans la saisonnalité hebdomadaire avec 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 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 que dans 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 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

La saisonnalité hebdomadaire dépasse les valeurs aberrantes avec la 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é hebdomadaires avec tendance linefit.

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 des anomalies d’une valeur par défaut de 1,5 à 2,5. Utilisez cette plage interpercentile pour que seules des anomalies plus fortes soient détectées. À présent, seuls les valeurs hors norme que vous avez insérées dans les données seront 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 plus élevé.