series_decompose_anomalies()
S’applique à : ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
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 respectivementad_score
: score d’anomaliebaseline
: Valeur prédite de la série, selon la décomposition
Algorithme
Cette fonction suit les étapes suivantes :
- Appelle series_decompose() avec les paramètres respectifs pour créer la série de lignes de base et de résidus.
- 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.
- 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
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
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
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