series_decompose_anomalies()series_decompose_anomalies()

La détection des anomalies est basée sur la décomposition des séries.Anomaly Detection is based on series decomposition. Pour plus d’informations, consultez series_decompose ().For more information, see 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.The function takes an expression containing a series (dynamic numerical array) as input, and extracts anomalous points with scores.

SyntaxeSyntax

series_decompose_anomalies (Série [, Seuil , Caractère saisonnier , Tendance , Test_points , AD_method , Seasonality_threshold])series_decompose_anomalies (Series [, Threshold, Seasonality, Trend, Test_points, AD_method, Seasonality_threshold ])

ArgumentsArguments

  • Série: cellule de tableau dynamique qui est un tableau de valeurs numériques, généralement le résultat des opérateurs Make-Series ou make_listSeries: Dynamic array cell that is an array of numeric values, typically the resulting output of make-series or make_list operators
  • Seuil: seuil d’anomalies, 1,5 par défaut (valeur k) pour la détection des anomalies légères ou plus fortesThreshold: Anomaly threshold, default 1.5 (k value) for detecting mild or stronger anomalies
  • Caractère saisonnier: un entier contrôlant l’analyse saisonnière, contenant soitSeasonality: An integer controlling the seasonal analysis, containing either
    • -1 : détection automatique du caractère saisonnier (à l’aide de series_periods_detect) [Default]-1: Autodetect seasonality (using series_periods_detect) [default]
    • 0 : aucun caractère saisonnier (c’est-à-dire, ignorer l’extraction de ce composant)0: No seasonality (that is, skip extracting this component)
    • period : entier positif, qui spécifie la période attendue en nombre d’unités d’emplacements.period: Positive integer, specifying the expected period in number of bins unit. Par exemple, si la série est dans des emplacements d’une heure, une période hebdomadaire est de 168 emplacementsFor example, if the series is in one hour bins, a weekly period is 168 bins
  • Tendance: chaîne contrôlant l’analyse des tendances, contenant soitTrend: A string controlling the trend analysis, containing either
    • « AVG » : définir le composant de tendance en moyenne des séries [par défaut]"avg": Define trend component as average of the series [default]
    • « None » : aucune tendance, ignorer l’extraction de ce composant"none": No trend, skip extracting this component
    • « linefit » : extraction du composant de tendance à l’aide de la régression linéaire"linefit": Extract trend component using linear regression
  • Test_points: 0 [Default] ou un entier positif qui spécifie le nombre de points à la fin de la série à exclure du processus d’apprentissage (régression).Test_points: 0 [default] or a positive integer, that specifies the number of points at the end of the series to exclude from the learning (regression) process. Ce paramètre doit être défini à des fins de prévisionThis parameter should be set for forecasting purposes
  • AD_method: chaîne contrôlant la méthode de détection des anomalies sur la série chronologique résiduelle, contenant un des éléments suivants :AD_method: A string controlling the anomaly detection method on the residual time series, containing one of:
  • Seasonality_threshold: seuil du score saisonnier lorsque le caractère saisonnier est défini sur détection automatique.Seasonality_threshold: The threshold for seasonality score when Seasonality is set to autodetect. Le seuil de score par défaut est 0.6 .The default score threshold is 0.6. Pour plus d’informations, consultez series_periods_detectFor more information, see series_periods_detect

RetoursReturns

La fonction retourne les séries correspondantes suivantes :The function returns the following respective series:

  • ad_flag: Série ternaire contenant (+ 1,-1, 0) marquage/baisse/aucune anomalie, respectivementad_flag: A ternary series containing (+1, -1, 0) marking up/down/no anomaly respectively
  • ad_score: Score d’anomaliead_score: Anomaly score
  • baseline: Valeur prédite de la série, en fonction de la décompositionbaseline: The predicted value of the series, according to the decomposition

L’algorithmeThe algorithm

Cette fonction suit les étapes suivantes :This function follows these steps:

  1. Appelle series_decompose () avec les paramètres respectifs pour créer la série de lignes de base et les résidus.Calls series_decompose() with the respective parameters, to create the baseline and residuals series.
  2. Calcule ad_score série en appliquant series_outliers () à la méthode de détection d’anomalie choisie sur la série des résidus.Calculates ad_score series by applying series_outliers() with the chosen anomaly detection method on the residuals series.
  3. Calcule la série d’ad_flag en appliquant le seuil sur la ad_score à marquer/baisser/ne pas anomalie, respectivement.Calculates the ad_flag series by applying the threshold on the ad_score to mark up/down/no anomaly respectively.

ExemplesExamples

Détecter les anomalies dans le caractère saisonnier hebdomadaireDetect anomalies in weekly seasonality

Dans l’exemple suivant, générez une série avec un caractère saisonnier hebdomadaire, puis ajoutez des valeurs hors norme.In the following example, generate a series with weekly seasonality, and then add some outliers to it. series_decompose_anomalies détecte automatiquement le caractère saisonnier et génère une ligne de base qui capture le modèle répétitif.series_decompose_anomalies autodetects the seasonality and generates a baseline that captures the repetitive pattern. Les valeurs hors norme que vous avez ajoutées peuvent être clairement repérées dans le composant ad_score.The outliers you added can be clearly spotted in the ad_score component.

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  

Caractère saisonnier hebdomadaire présentant les lignes de base et les valeurs hors norme

Détecter les anomalies dans le caractère saisonnier hebdomadaire avec tendanceDetect anomalies in weekly seasonality with trend

Dans cet exemple, ajoutez une tendance à la série de l’exemple précédent.In this example, add a trend to the series from the previous example. Tout d’abord, exécutez series_decompose_anomalies avec les paramètres par défaut dans lesquels la avg valeur par défaut de tendance prend uniquement la moyenne et ne calcule pas la tendance.First, run series_decompose_anomalies with the default parameters in which the trend avg default value only takes the average and doesn't compute the trend. La ligne de base générée ne contient pas la tendance et est moins exacte, par rapport à l’exemple précédent.The generated baseline doesn't contain the trend and is less exact, compared to the previous example. Par conséquent, certains 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 supérieure.Consequently, some of the outliers you inserted in the data aren't detected because of the higher variance.

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

Caractère saisonnier hebdomadaire présentant les lignes de base et les valeurs hors norme

Ensuite, exécutez le même exemple, mais comme vous attendez une tendance dans la série, spécifiez linefit dans le paramètre Trend.Next, run the same example, but since you're expecting a trend in the series, specify linefit in the trend parameter. Vous pouvez voir que la ligne de base est plus proche de la série d’entrée.You can see that the baseline is much closer to the input series. Tous les valeurs hors norme insérées sont détectées, ainsi que des faux positifs.All the inserted outliers are detected, and also some false positives. Consultez l’exemple suivant sur la modification du seuil.See the next example on tweaking the threshold.

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  

Caractère saisonnier hebdomadaire présentant les lignes de base et les valeurs hors norme

Ajuster le seuil de détection des anomaliesTweak the anomaly detection threshold

Quelques points bruyants ont été détectés comme des anomalies dans l’exemple précédent.A few noisy points were detected as anomalies in the previous example. Maintenant, augmentez le seuil de détection des anomalies d’une valeur par défaut de 1,5 à 2,5.Now increase the anomaly detection threshold from a default of 1.5 to 2.5. Utilisez cette plage intercentile, afin que seules les anomalies plus fortes soient détectées.Use this interpercentile range, so that only stronger anomalies are detected. À présent, seuls les valeurs hors norme que vous avez insérées dans les données seront détectées.Now, only the outliers you inserted in the data, will be detected.

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  

Caractère saisonnier hebdomadaire présentant les lignes de base et les valeurs hors norme