Detectie van afwijkingen en prognoses

Cloudservices en IoT-apparaten genereren telemetriegegevens die kunnen worden gebruikt om inzichten te verkrijgen, zoals het bewaken van de servicestatus, fysieke productieprocessen en gebruikstrends. Het uitvoeren van een tijdreeksanalyse is een manier om afwijkingen in het patroon van deze metrische gegevens te identificeren ten opzichte van hun typische basislijnpatroon.

Kusto-querytaal (KQL) bevat systeemeigen ondersteuning voor het maken, bewerken en analyseren van meerdere tijdreeksen. Met KQL kunt u duizenden tijdreeksen in seconden maken en analyseren, waardoor bewakingsoplossingen en werkstromen in bijna realtime mogelijk zijn.

In dit artikel worden de mogelijkheden voor het detecteren en voorspellen van afwijkingen van tijdreeksen van KQL beschreven. De toepasselijke tijdreeksfuncties zijn gebaseerd op een robuust bekend ontledingsmodel, waarbij elke oorspronkelijke tijdreeks wordt opgesplitst in seizoensgebonden, trend- en restcomponenten. Afwijkingen worden gedetecteerd door uitbijters op het resterende onderdeel, terwijl prognoses worden uitgevoerd door de seizoensgebonden en trendcomponenten te extrapoleren. De KQL-implementatie verbetert het basisontledingsmodel aanzienlijk door automatische seizoensgebondenheidsdetectie, robuuste uitbijteranalyse en vectorized implementatie om duizenden tijdreeksen in seconden te verwerken.

Vereisten

  • Een Microsoft-account of een Microsoft Entra gebruikersidentiteit. Er is geen Azure-abonnement vereist.
  • Lees Tijdreeksanalyse voor een overzicht van de mogelijkheden van tijdreeksen.

Tijdreeksontledingsmodel

De systeemeigen KQL-implementatie voor tijdreeksvoorspelling en anomaliedetectie maakt gebruik van een bekend uitsplitsingsmodel. Dit model wordt toegepast op tijdreeksen van metrische gegevens die naar verwachting periodiek en trendgedrag vertonen, zoals serviceverkeer, heartbeats van onderdelen en periodieke IoT-metingen om toekomstige metrische waarden te voorspellen en afwijkende waarden te detecteren. De veronderstelling van dit regressieproces is dat, afgezien van het eerder bekende seizoensgebonden en trendgedrag, de tijdreeks willekeurig wordt verdeeld. U kunt vervolgens toekomstige metrische waarden voorspellen op basis van de seizoensgebonden en trendonderdelen, gezamenlijk basislijn genoemd, en het residugedeelte negeren. U kunt ook afwijkende waarden detecteren op basis van uitbijteranalyse met behulp van alleen het restgedeelte. Als u een uitgevouwen model wilt maken, gebruikt u de functie series_decompose(). De series_decompose() functie maakt gebruik van een set tijdreeksen en breidt elke tijdreeks automatisch uit naar de onderdelen seizoensgebonden, trend, rest en basislijn.

U kunt bijvoorbeeld het verkeer van een interne webservice opsplitsen met behulp van de volgende query:

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t step dt by sid 
| where sid == 'TS1'   //  select a single time series for a cleaner visualization
| extend (baseline, seasonal, trend, residual) = series_decompose(num, -1, 'linefit')  //  decomposition of a set of time series to seasonal, trend, residual, and baseline (seasonal+trend)
| render timechart with(title='Web app. traffic of a month, decomposition', ysplit=panels)

Tijdreeksontleding.

  • De oorspronkelijke tijdreeks heeft het label num (in rood).
  • Het proces begint met automatische detectie van de seizoensgebondenheid met behulp van de functie series_periods_detect() en extraheert het seizoensgebonden patroon (in paars).
  • Het seizoensgebonden patroon wordt afgetrokken van de oorspronkelijke tijdreeks en er wordt een lineaire regressie uitgevoerd met behulp van de functie series_fit_line() om de trendcomponent te vinden (in lichtblauw).
  • De functie trekt de trend af en de rest is het restbestanddeel (in het groen).
  • Ten slotte voegt de functie de onderdelen seizoensgebonden en trend toe om de basislijn te genereren (in blauw).

Detectie van afwijkingen in tijdreeksen

De functie series_decompose_anomalies() vindt afwijkende punten op een set tijdreeksen. Deze functie roept series_decompose() aan om het ontledingsmodel te bouwen en wordt vervolgens uitgevoerd series_outliers() op het residuonderdeel. series_outliers() berekent anomaliescores voor elk punt van de restcomponent met behulp van de hektest van Tukey. Anomaliescores boven 1,5 of lager dan -1,5 duiden respectievelijk op een lichte stijging of afname van de anomalie. Anomaliescores boven 3,0 of lager dan -3,0 duiden op een sterke anomalie.

Met de volgende query kunt u afwijkingen in intern webserviceverkeer detecteren:

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t step dt by sid 
| where sid == 'TS1'   //  select a single time series for a cleaner visualization
| extend (anomalies, score, baseline) = series_decompose_anomalies(num, 1.5, -1, 'linefit')
| render anomalychart with(anomalycolumns=anomalies, title='Web app. traffic of a month, anomalies') //use "| render anomalychart with anomalycolumns=anomalies" to render the anomalies as bold points on the series charts.

Detectie van afwijkingen in tijdreeksen.

  • De oorspronkelijke tijdreeks (in rood).
  • Het basislijnonderdeel (seizoensgebonden + trend) (in blauw).
  • De afwijkende punten (in paars) boven op de oorspronkelijke tijdreeks. De afwijkende punten wijken aanzienlijk af van de verwachte basislijnwaarden.

Tijdreeksvoorspelling

De functie series_decompose_forecast() voorspelt toekomstige waarden van een set tijdreeksen. Met deze functie wordt aangeroepen series_decompose() om het uitgevouwen model te bouwen en vervolgens voor elke tijdreeks het basislijnonderdeel naar de toekomst te extrapoleren.

Met de volgende query kunt u het webserviceverkeer van de volgende week voorspellen:

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
let horizon=7d;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t+horizon step dt by sid 
| where sid == 'TS1'   //  select a single time series for a cleaner visualization
| extend forecast = series_decompose_forecast(num, toint(horizon/dt))
| render timechart with(title='Web app. traffic of a month, forecasting the next week by Time Series Decomposition')

Prognose van tijdreeksen.

  • Oorspronkelijke metrische waarde (in rood). Toekomstige waarden ontbreken en zijn standaard ingesteld op 0.
  • Extrapoleren van het basislijnonderdeel (blauw) om de waarden van volgende week te voorspellen.

Schaalbaarheid

Kusto-querytaal syntaxis zorgt ervoor dat één aanroep meerdere tijdreeksen kan verwerken. De unieke geoptimaliseerde implementatie maakt snelle prestaties mogelijk, wat essentieel is voor effectieve anomaliedetectie en -prognoses bij het bewaken van duizenden tellers in bijna realtime scenario's.

De volgende query toont de verwerking van drie tijdreeksen tegelijk:

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
let horizon=7d;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t+horizon step dt by sid
| extend offset=case(sid=='TS3', 4000000, sid=='TS2', 2000000, 0)   //  add artificial offset for easy visualization of multiple time series
| extend num=series_add(num, offset)
| extend forecast = series_decompose_forecast(num, toint(horizon/dt))
| render timechart with(title='Web app. traffic of a month, forecasting the next week for 3 time series')

Schaalbaarheid van tijdreeksen.

Samenvatting

In dit document vindt u informatie over systeemeigen KQL-functies voor het detecteren en voorspellen van afwijkingen in tijdreeksen. Elke oorspronkelijke tijdreeks wordt opgesplitst in seizoensgebonden, trend- en restcomponenten voor het detecteren van afwijkingen en/of prognoses. Deze functies kunnen worden gebruikt voor bijna realtime bewakingsscenario's, zoals foutdetectie, voorspellend onderhoud en prognose van vraag en belasting.