Detekce a předpovědi anomálií

Cloudové služby a zařízení IoT generují telemetrická data, která je možné použít k získání přehledů, jako je monitorování stavu služby, fyzické produkční procesy a trendy využití. Provedení analýzy časových řad je jedním ze způsobů, jak identifikovat odchylky ve vzorci těchto metrik v porovnání s jejich typickým vzorem směrného plánu.

dotazovací jazyk Kusto (KQL) obsahuje nativní podporu pro vytváření, manipulaci a analýzu více časových řad. S KQL můžete vytvářet a analyzovat tisíce časových řad během několika sekund, což umožňuje řešení a pracovní postupy monitorování téměř v reálném čase.

Tento článek podrobně popisuje možnosti detekce anomálií časových řad a prognózování KQL. Použitelné funkce časových řad jsou založené na robustním dobře známém rozkladovém modelu, kde se každá původní časová řada rozkládá na sezónní, trendové a zbytkové komponenty. Anomálie se detekují odlehlými složkami na reziduální komponentě, zatímco prognózování se provádí extrapolací sezónních a trendových komponent. Implementace KQL výrazně vylepšuje základní rozkladový model díky automatické detekci sezónnosti, robustní odlehlé analýze a vektorizované implementaci pro zpracování tisíců časových řad v sekundách.

Požadavky

  • Účet Microsoft nebo identita uživatele Microsoft Entra. Předplatné Azure se nevyžaduje.
  • Přehled funkcí časových řad najdete v tématu Analýza časových řad.

Model rozkladu časových řad

Nativní implementace KQL pro predikci časových řad a detekci anomálií používá dobře známý rozkladový model. Tento model se používá u časových řad metrik, u kterých se očekává, že se projeví pravidelné a trendové chování, jako jsou přenosy služeb, prezentující signály komponent a pravidelná měření IoT za účelem předpovídání budoucích hodnot metrik a zjišťování neobvyklých hodnot. Předpokladem tohoto regresního procesu je, že kromě dříve známého sezónního a trendového chování je časová řada náhodně rozdělena. Pak můžete předpovídat budoucí hodnoty metrik ze sezónních a trendových komponent, souhrnně označovaných jako směrný plán, a ignorovat zbytkovou část. Neobvyklé hodnoty můžete také detekovat na základě odlehlé analýzy s využitím pouze zbytkové části. K vytvoření rozkladového modelu použijte funkci series_decompose(). Funkce series_decompose() přebírá sadu časových řad a automaticky rozloží každou časovou řadu na její sezónní, trendové, reziduální a základní komponenty.

Pomocí následujícího dotazu můžete například rozložit provoz interní webové služby:

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)

Rozklad časových řad.

  • Původní časová řada je označená num (červeně).
  • Proces začíná automatickou detekcí sezónnosti pomocí funkce series_periods_detect() a extrahuje sezónní vzor (fialově).
  • Sezónní vzor se odečte od původní časové řady a lineární regrese se spustí pomocí funkce series_fit_line() k vyhledání komponenty trendu (ve světle modré).
  • Funkce odečítá trend a zbytek je reziduální komponenta (zeleně).
  • Nakonec funkce přidá sezónní a trendové komponenty, aby vygenerovala směrný plán (modře).

Detekce anomálií časových řad

Funkce series_decompose_anomalies() najde neobvyklé body v sadě časových řad. Tato funkce volá series_decompose() sestavení rozkladového modelu a pak se spustí series_outliers() na komponentě reziduí. series_outliers() vypočítá skóre anomálií pro každý bod reziduální komponenty pomocí testu plotu Tukey. Skóre anomálií nad 1,5 nebo nižší než -1,5 značí mírné zvýšení nebo pokles anomálií. Skóre anomálií nad 3,0 nebo nižší než -3,0 značí silnou anomálii.

Následující dotaz umožňuje detekovat anomálie v interním provozu webových služeb:

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.

Detekce anomálií časových řad.

  • Původní časová řada (červeně)
  • Základní (sezónní + trendová) složka (modře).
  • Neobvyklé body (fialové) nad původní časovou řadou Anomální body se výrazně odchylují od očekávaných hodnot směrného plánu.

Prognózování časových řad

Funkce series_decompose_forecast() předpovídá budoucí hodnoty sady časových řad. Tato funkce volá series_decompose() k sestavení modelu rozkladu a pak pro každou časovou řadu extrapoluje základní komponentu do budoucnosti.

Následující dotaz umožňuje předpovědět provoz webových služeb příští týden:

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')

Prognózování časových řad.

  • Původní metrika (červeně) Budoucí hodnoty chybí a ve výchozím nastavení jsou nastavené na 0.
  • Extrapolujte základní komponentu (modře), abyste předpověděli hodnoty příštího týdne.

Škálovatelnost

dotazovací jazyk Kusto syntaxe umožňuje jedno volání pro zpracování více časových řad. Jeho jedinečná optimalizovaná implementace umožňuje rychlý výkon, který je kritický pro efektivní detekci anomálií a prognózy při monitorování tisíců čítačů ve scénářích téměř v reálném čase.

Následující dotaz ukazuje zpracování tří časových řad současně:

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')

Škálovatelnost časových řad.

Souhrn

Tento dokument podrobně popisuje nativní funkce KQL pro detekci anomálií a prognózování časových řad. Každá původní časová řada je rozložená na sezónní, trendové a reziduální komponenty pro detekci anomálií a/nebo prognózování. Tyto funkce lze použít pro scénáře monitorování téměř v reálném čase, jako je detekce chyb, prediktivní údržba a prognózování poptávky a zatížení.