series_decompose_anomalies()

Anomaliedetectie is gebaseerd op reeksontleding. Zie series_decompose() voor meer informatie.

De functie gebruikt een expressie met een reeks (dynamische numerieke matrix) als invoer en extraheert afwijkende punten met scores.

Syntax

series_decompose_anomalies (Serie, [ Drempelwaarde,Seizoensgebonden,Trend,, Test_points, AD_methodSeasonality_threshold ])

Meer informatie over syntaxisconventies.

Parameters

Naam Type Vereist Beschrijving
Reeks dynamic ✔️ Een matrix met numerieke waarden, meestal de resulterende uitvoer van make-series of make_list operators.
Drempel real De drempelwaarde voor afwijkingen. De standaardwaarde is 1,5 k voor het detecteren van milde of sterkere afwijkingen.
Seizoensgebonden int Hiermee bepaalt u de seizoensgebonden analyse. De mogelijke waarden zijn:

- -1: Seizoensgebondenheid automatisch detecteren met behulp van series_periods_detect. Dit is de standaardwaarde.
- Gehele tijdsperiode: een positief geheel getal dat de verwachte periode in aantal bins aangeeft. Als de reeks zich bijvoorbeeld in 1h opslaglocaties bevindt, is een wekelijkse periode 168 bins.
- 0: Geen seizoensgebondenheid, dus sla het extraheren van dit onderdeel over.
Trend string Hiermee bepaalt u de trendanalyse. De mogelijke waarden zijn:

- avg: Definieer het trendonderdeel als average(x). Dit is de standaardinstelling.
- linefit: Het trendonderdeel extraheren met behulp van lineaire regressie.
- none: Geen trend, dus sla het uitpakken van dit onderdeel over.
Test_points int Een positief geheel getal dat het aantal punten aan het einde van de reeks aangeeft dat moet worden uitgesloten van het leerproces, of regressieproces. Deze parameter moet worden ingesteld voor prognosedoeleinden. De standaardwaarde is 0.
AD_method string Bepaalt de anomaliedetectiemethode voor de resterende tijdreeks, die een van de volgende waarden bevat:

- ctukey: Tukey's omheiningstest met aangepast 10e-90e percentielbereik. Dit is de standaardinstelling.
- tukey: Tukey's omheiningstest met standaard 25e-75e percentielbereik.

Zie series_outliers voor meer informatie over resterende tijdreeksen.
Seasonality_threshold real De drempelwaarde voor de seizoensgebondenheidsscore wanneer Seizoensgebondenheid is ingesteld op automatisch detecteren. De standaardscoredrempel is 0,6.

Zie series_periods_detect voor meer informatie.

Retouren

De functie retourneert de volgende respectieve reeksen:

  • ad_flag: Een ternaire reeks met (+1, -1, 0) die respectievelijk omhoog/omlaag/geen anomalie markeert
  • ad_score: Anomaliescore
  • baseline: De voorspelde waarde van de reeks, afhankelijk van de uitgevouwen

Het algoritme

Deze functie volgt deze stappen:

  1. Roept series_decompose() aan met de respectieve parameters om de reeks basislijn en residuen te maken.
  2. Berekent ad_score reeks door series_outliers() toe te passen met de gekozen anomaliedetectiemethode op de residuenreeks.
  3. Berekent de ad_flag reeks door de drempelwaarde op de ad_score toe te passen om respectievelijk anomalieën omhoog/omlaag/geen afwijking te markeren.

Voorbeelden

Afwijkingen in wekelijkse seizoensgebondenheid detecteren

In het volgende voorbeeld genereert u een reeks met wekelijkse seizoensgebondenheid en voegt u er vervolgens enkele uitbijters aan toe. series_decompose_anomalies automatisch de seizoensgebondenheid en genereert een basislijn die het herhalende patroon vastlegt. De uitbijters die u hebt toegevoegd, zijn duidelijk zichtbaar in het onderdeel 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  

Wekelijkse seizoensgebondenheid met basislijn en uitbijters.

Afwijkingen in wekelijkse seizoensgebondenheid detecteren met trend

In dit voorbeeld voegt u een trend toe aan de reeks uit het vorige voorbeeld. Voer eerst uit series_decompose_anomalies met de standaardparameters waarin de standaardwaarde van de trend avg alleen het gemiddelde neemt en de trend niet berekent. De gegenereerde basislijn bevat de trend niet en is minder exact dan in het vorige voorbeeld. Daarom worden sommige uitbijters die u in de gegevens hebt ingevoegd, niet gedetecteerd vanwege de hogere variantie.

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

Wekelijkse seizoensgebondenheid uitbijters met trend.

Voer vervolgens hetzelfde voorbeeld uit, maar omdat u een trend in de reeks verwacht, geeft u linefit op in de trendparameter. U ziet dat de basislijn veel dichter bij de invoerreeks ligt. Alle ingevoegde uitbijters worden gedetecteerd, en ook enkele fout-positieven. Zie het volgende voorbeeld over het aanpassen van de drempelwaarde.

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  

Afwijkingen in wekelijkse seizoensgebondenheid met linefit-trend.

De drempelwaarde voor anomaliedetectie aanpassen

In het vorige voorbeeld zijn enkele ruispunten gedetecteerd als afwijkingen. Verhoog nu de drempelwaarde voor anomaliedetectie van een standaardwaarde van 1,5 naar 2,5. Gebruik dit interpercentiele bereik, zodat alleen sterkere afwijkingen worden gedetecteerd. Nu worden alleen de uitbijters gedetecteerd die u in de gegevens hebt ingevoegd.

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  

Wekelijkse reeksafwijkingen met een hogere drempelwaarde voor afwijkingen.