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 markeertad_score
: Anomaliescorebaseline
: De voorspelde waarde van de reeks, afhankelijk van de uitgevouwen
Het algoritme
Deze functie volgt deze stappen:
- Roept series_decompose() aan met de respectieve parameters om de reeks basislijn en residuen te maken.
- Berekent ad_score reeks door series_outliers() toe te passen met de gekozen anomaliedetectiemethode op de residuenreeks.
- 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
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
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
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
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor