Partage via


series_decompose()

Applique une transformation de décomposition sur une série.

Prend une expression contenant une série (tableau numérique dynamique) comme entrée et la décompose en composants saisonniers, tendances et résiduels.

Syntaxe

series_decompose(Série [ Tendance de saisonnalité, ,Test_points 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 .
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 : entier positif spécifiant la période attendue dans le nombre de compartiments. Par exemple, si la série se trouve dans 1 - h 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.
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 :

  • baseline: valeur prédite de la série (somme des composants saisonniers et de tendances, voir ci-dessous).
  • seasonal: la série du composant saisonnier :
    • si la période n’est pas détectée ou est explicitement définie sur 0 : constante 0.
    • si elle est détectée ou définie sur un entier positif : médiane des points de série dans la même phase
  • trend: série du composant de tendance.
  • residual: série du composant résiduel (autrement dit, x - ligne de base).

Remarque

  • Ordre d’exécution des composants :
  1. Extraire la série saisonnière
  2. Soustrait-la de x, générant la série deseasonal
  3. Extraire le composant de tendance de la série deseasonal
  4. Créer la base de référence = saisonnier + tendance
  5. Créer le résidu = x - ligne de base
  • La saisonnalité et ou la tendance doivent être activées. Sinon, la fonction est redondante et retourne simplement la ligne de base = 0 et résiduelle = x.

En savoir plus sur la décomposition de série

Cette méthode est généralement appliquée à des séries chronologiques de métriques censées manifester un comportement périodique et/ou de tendance. Vous pouvez utiliser la méthode pour prévoir les valeurs de métrique futures et/ou détecter des valeurs anormales. L’hypothèse implicite de ce processus de régression est qu’en dehors du comportement saisonnier et de tendance, la série chronologique est stochastique et distribuée de manière aléatoire. Prévoir les valeurs de métrique futures des composants saisonniers et de tendance tout en ignorant la partie résiduelle. Détecter des valeurs anormales basées sur une détection hors norme uniquement sur la partie résiduelle uniquement. Vous trouverez plus d’informations dans le chapitre de décomposition de la série chronologique.

Exemples

Saisonnalité hebdomadaire

Dans l’exemple suivant, nous générons une série avec une saisonnalité hebdomadaire et sans tendance, nous y ajoutons ensuite des valeurs hors norme. series_decompose recherche et détecte automatiquement la saisonnalité et génère une ligne de base presque identique au composant saisonnier. Les valeurs hors norme que nous avons ajoutées peuvent être clairement visibles dans le composant résiduel.

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(y)
| render timechart  

Séries décomposant 1.

Saisonnalité hebdomadaire avec tendance

Dans cet exemple, nous ajoutons une tendance à la série de l’exemple précédent. Tout d’abord, nous exécutons series_decompose avec les paramètres par défaut. La valeur par défaut de tendance avg prend uniquement la moyenne et ne calcule pas la tendance. La ligne de base générée ne contient pas la tendance. Lors de l’observation de la tendance dans les résidus, il devient évident que cet exemple est moins précis que l’exemple précédent.

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(y)
| render timechart  

Séries décomposant 2.

Ensuite, nous réexécutons le même exemple. Étant donné que nous attendons une tendance dans la série, nous spécifions linefit dans le paramètre de tendance. Nous pouvons voir que la tendance positive est détectée et que la ligne de base est beaucoup plus proche de la série d’entrée. Les résidus sont proches de zéro, et seuls les valeurs hors norme se distinguent. Nous pouvons voir tous les composants de la série dans le graphique.

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(y, -1, 'linefit')
| render timechart  

Séries décomposant 3.

  • Visualiser les résultats avec un diagramme d’anomalies