Wykrywanie i prognozowanie anomalii
Usługi w chmurze i urządzenia IoT generują dane telemetryczne, których można użyć do uzyskania szczegółowych informacji, takich jak monitorowanie kondycji usługi, fizycznych procesów produkcyjnych i trendów użycia. Przeprowadzanie analizy szeregów czasowych to jeden ze sposobów identyfikowania odchyleń we wzorcu tych metryk w porównaniu z typowym wzorcem punktu odniesienia.
język zapytań Kusto (KQL) zawiera natywną obsługę tworzenia, manipulowania i analizowania wielu szeregów czasowych. Za pomocą języka KQL można tworzyć i analizować tysiące szeregów czasowych w sekundach, umożliwiając rozwiązania do monitorowania niemal w czasie rzeczywistym i przepływy pracy.
W tym artykule szczegółowo przedstawiono możliwości wykrywania anomalii szeregów czasowych i prognozowania języka KQL. Odpowiednie funkcje szeregów czasowych są oparte na niezawodnym dobrze znanym modelu dekompozycji, w którym każdy oryginalny szereg czasowy jest rozłożony na składniki sezonowe, trendy i reszty. Anomalie są wykrywane przez wartości odstające w składniku reszty, podczas gdy prognozowanie odbywa się przez ekstrapolację składników sezonowych i trendów. Implementacja języka KQL znacznie zwiększa podstawowy model dekompozycji dzięki automatycznemu wykrywaniu sezonowości, niezawodnej analizie odstających i implementacji wektoryzowanej w celu przetwarzania tysięcy szeregów czasowych w sekundach.
Wymagania wstępne
- Konto Microsoft lub tożsamość użytkownika Microsoft Entra. Subskrypcja platformy Azure nie jest wymagana.
- Przeczytaj artykuł Analiza szeregów czasowych , aby zapoznać się z omówieniem możliwości szeregów czasowych.
Model dekompozycji szeregów czasowych
Natywna implementacja języka KQL na potrzeby przewidywania szeregów czasowych i wykrywania anomalii używa dobrze znanego modelu dekompozycji. Ten model jest stosowany do szeregów czasowych metryk, które powinny manifestować okresowe i trendy, takie jak ruch usługi, pulsy składników i okresowe pomiary IoT w celu prognozowania przyszłych wartości metryk i wykrywania nietypowych. Założeniem tego procesu regresji jest to, że poza wcześniej znanym zachowaniem sezonowym i trendowym szereg czasowy jest losowo rozłożony. Następnie można prognozować przyszłe wartości metryk ze składników sezonowych i trendów, zbiorczo nazwanych punktów odniesienia i ignorować część reszt. Można również wykrywać nietypowe wartości na podstawie analizy wartości odstających przy użyciu tylko części reszt.
Aby utworzyć model dekompozycji, użyj funkcji series_decompose()
. Funkcja series_decompose()
przyjmuje zestaw szeregów czasowych i automatycznie rozkłada szeregi czasowe do składników sezonowych, trendów, reszt i linii bazowych.
Na przykład można rozkładać ruch wewnętrznej usługi internetowej przy użyciu następującego zapytania:
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)
- Oryginalny szereg czasowy ma etykietę num (na czerwono).
- Proces rozpoczyna się od automatycznego wykrywania sezonowości przy użyciu funkcji
series_periods_detect()
i wyodrębnia wzorzec sezonowy (na fioletowo). - Wzorzec sezonowy jest odejmowany od oryginalnego szeregu czasowego, a regresja liniowa jest uruchamiana przy użyciu funkcji
series_fit_line()
w celu znalezienia składnika trendu (w kolorze jasnoniebieskim). - Funkcja odejmuje trend, a reszta jest składnikiem reszty (w kolorze zielonym).
- Na koniec funkcja dodaje składniki sezonowe i trendu w celu wygenerowania punktu odniesienia (na niebiesko).
Wykrywanie anomalii szeregów czasowych
Funkcja series_decompose_anomalies()
znajduje nietypowe punkty w zestawie szeregów czasowych. Ta funkcja wywołuje series_decompose()
funkcję w celu skompilowania modelu dekompozycji, a następnie jest uruchamiana series_outliers()
na składniku reszt. series_outliers()
oblicza wyniki anomalii dla każdego punktu składnika reszt przy użyciu testu ogrodzenia Tukeya. Wyniki anomalii powyżej 1,5 lub niższej -1,5 wskazują odpowiednio na łagodny wzrost anomalii lub spadek. Wyniki anomalii powyżej 3,0 lub starszej niż -3,0 wskazują na silną anomalię.
Następujące zapytanie umożliwia wykrywanie anomalii w wewnętrznym ruchu usługi internetowej:
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.
- Oryginalny szereg czasowy (na czerwono).
- Składnik linii bazowej (sezonowy + trend) (w kolorze niebieskim).
- Nietypowe punkty (fioletowe) na początku oryginalnego szeregu czasowego. Nietypowe punkty znacznie odbiegają od oczekiwanych wartości punktu odniesienia.
Prognozowanie szeregów czasowych
Funkcja series_decompose_forecast()
przewiduje przyszłe wartości zestawu szeregów czasowych. Ta funkcja wywołuje funkcję series_decompose()
w celu skompilowania modelu dekompozycji, a następnie, dla każdego szeregu czasowego, ekstrapoluje składnik punktu odniesienia w przyszłości.
Następujące zapytanie umożliwia przewidywanie ruchu w usłudze internetowej w przyszłym tygodniu:
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')
- Oryginalna metryka (na czerwono). Brak przyszłych wartości i domyślnie ustawiono wartość 0.
- Ekstrapoluj składnik punktu odniesienia (na niebiesko), aby przewidzieć wartości w przyszłym tygodniu.
Skalowalność
język zapytań Kusto składnia umożliwia pojedyncze wywołanie przetwarzania wielu szeregów czasowych. Jego unikatowa zoptymalizowana implementacja umożliwia szybką wydajność, co ma kluczowe znaczenie dla efektywnego wykrywania anomalii i prognozowania podczas monitorowania tysięcy liczników w scenariuszach niemal w czasie rzeczywistym.
Następujące zapytanie przedstawia przetwarzanie trzech szeregów czasowych jednocześnie:
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')
Podsumowanie
Ten dokument zawiera szczegółowe informacje o natywnych funkcjach KQL na potrzeby wykrywania anomalii szeregów czasowych i prognozowania. Każdy oryginalny szereg czasowy jest rozłożony na składniki sezonowe, trendu i reszt do wykrywania anomalii i/lub prognozowania. Te funkcje mogą być używane w scenariuszach monitorowania niemal w czasie rzeczywistym, takich jak wykrywanie błędów, konserwacja predykcyjna i prognozowanie zapotrzebowania i obciążenia.
Zawartość pokrewna
- Dowiedz się więcej o możliwościach uczenia maszynowego za pomocą języka KQL
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla