Freigeben über


series_decompose()

Gilt für: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

Wendet eine Analysetransformation auf eine Datenreihe an.

Verwendet einen Ausdruck, der eine Datenreihe (dynamische numerische Matrix) enthält, als Eingabe und dekompiliert ihn in saisonale, Trend- und Restkomponenten.

Syntax

series_decompose(Serie [ Saisonalitätstrend ,,Test_points, Seasonality_threshold ] ,)

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Type Erforderlich Beschreibung
Reihen dynamic ✔️ Ein Array numerischer Werte, in der Regel die resultierende Ausgabe von Make-Series - oder make_list Operatoren.
Saisonalität int Steuert die saisonale Analyse. Mögliche Werte sind:

- -1: Autodet die Saisonalität mithilfe von series_periods_detect. Dies ist der Standardwert.
- Punkt: Eine positive ganze Zahl, die den erwarteten Zeitraum in der Anzahl der Bins angibt. Wenn sich die Datenreihe beispielsweise in 1 - h Fächern befindet, beträgt eine wöchentliche Periode 168 Bins.
- 0: Keine Saisonalität, also überspringen Sie das Extrahieren dieser Komponente.
Trend string Steuert die Trendanalyse. Mögliche Werte sind:

- avg: Definieren der Trendkomponente als average(x). Dies ist die Standardeinstellung.
- linefit: Extrahieren Der Trendkomponente mithilfe der linearen Regression.
- none: Kein Trend, also überspringen Sie das Extrahieren dieser Komponente.
Test_points int Eine positive ganze Zahl, die die Anzahl der Punkte am Ende der Datenreihe angibt, die vom Lern- oder Regressionsprozess ausgeschlossen werden sollen. Dieser Parameter sollte für Prognosezwecke festgelegt werden. Der Standardwert ist 0.
Seasonality_threshold real Der Schwellenwert für die Saisonalitätsbewertung, wenn "Saisonalität " auf "autodetect" festgelegt ist. Der Schwellenwert für die Standardbewertung beträgt 0,6.

Weitere Informationen finden Sie unter series_periods_detect.

Gibt zurück

Die Funktion gibt die folgende Datenreihe zurück:

  • baseline: der prognostizierte Wert der Datenreihe (Summe der saisonal und trendbedingten Komponenten, siehe unten).
  • seasonal: die Serie der saisonbedingten Komponente:
    • wenn der Punkt nicht erkannt wird oder explizit auf 0 festgelegt ist: Konstante 0.
    • wenn erkannt oder auf eine positive ganze Zahl festgelegt: Median der Datenreihenpunkte in derselben Phase
  • trend: die Reihe der Trendkomponente.
  • residual: die Reihe der Restkomponente (d. h. x - Basisplan).

Hinweis

  • Ausführungsreihenfolge der Komponente:
  1. Extrahieren der saisonalen Serie
  2. Subtrahieren sie von x, wobei die deseasonale Serie generiert wird
  3. Extrahieren der Trendkomponente aus der Deseasonalreihe
  4. Erstellen des Basisplans = saisonal + Trend
  5. Erstellen des Restwerts = x - Basisplan
  • Saisonalität und Trend sollten aktiviert werden. Andernfalls ist die Funktion redundant und gibt einfach den Basiswert = 0 und rest = x zurück.

Weitere Informationen zur Analyse von Serien

Diese Methode wird in der Regel auf Zeitreihen von Metriken angewendet, die erwartet werden, um periodisches und/oder Trendverhalten zu manifestieren. Mit der Methode können Sie zukünftige Metrikwerte prognostizieren und/oder anomale Werte erkennen. Die implizite Annahme dieses Regressionsprozesses besteht darin, dass die Zeitreihe abgesehen von saisonalem und Trendverhalten stochastisch und zufällig verteilt ist. Prognostizieren Sie zukünftige Metrikwerte aus den saisonalen und Trendkomponenten, während sie den Restteil ignorieren. Erkennen Sie anomaliele Werte basierend auf der Ausreißererkennung nur auf dem Restteil. Weitere Details finden Sie im Kapitel "Analyse der Zeitreihen".

Beispiele

Wöchentliche Saisonalität

Im folgenden Beispiel generieren wir eine Serie mit wöchentlicher Saisonalität und ohne Trend, dann fügen wir ihnen einige Ausreißer hinzu. series_decompose findet und erkennt automatisch die Saisonalität und generiert einen Basisplan, der fast identisch mit dem saisonalen Bestandteil ist. Die von uns hinzugefügten Ausreißer lassen sich in der Restkomponente deutlich erkennen.

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  

Datenreihe dekompilieren 1.

Wöchentliche Saisonalität mit Trend

In diesem Beispiel fügen wir der Datenreihe aus dem vorherigen Beispiel einen Trend hinzu. Zuerst werden die Standardparameter verwendet series_decompose . Der Trendstandardwert avg nimmt nur den Mittelwert und berechnet den Trend nicht. Der generierte Basisplan enthält nicht den Trend. Bei der Beobachtung des Trends in den Resten wird deutlich, dass dieses Beispiel weniger genau ist als das vorherige Beispiel.

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  

Datenreihe dekompilieren 2.

Als Nächstes führen wir dasselbe Beispiel erneut aus. Da wir einen Trend in der Datenreihe erwarten, geben wir im Trendparameter an linefit . Wir können sehen, dass der positive Trend erkannt wird und der Basisplan viel näher an der Eingabereihe liegt. Die Reste liegen nahe null, und nur die Ausreißer heben sich hervor. Wir können alle Komponenten der Datenreihe im Diagramm sehen.

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  

Datenreihe dekompilieren 3.