series_decompose()
Dotyczy: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Stosuje przekształcenie dekompozycji w serii.
Przyjmuje wyrażenie zawierające serię (dynamiczną tablicę liczbową) jako dane wejściowe i rozkłada je do składników sezonowych, trendów i reszt.
Składnia
series_decompose(
Seria ,
[ Trend,
sezonowości ,
Test_points Seasonality_threshold ],
)
Dowiedz się więcej na temat konwencji składni.
Parametry
Nazwisko | Type | Wymagania | opis |
---|---|---|---|
Seria | dynamic |
✔️ | Tablica wartości liczbowych, zazwyczaj wynikowe dane wyjściowe operatorów make-series lub make_list . |
Sezonowości | int |
Steruje analizą sezonową. Możliwe wartości to: - -1 : Autowykrywanie sezonowości przy użyciu series_periods_detect. Jest to wartość domyślna.- Okres: dodatnia liczba całkowita określająca oczekiwany okres w liczbie pojemników. Jeśli na przykład seria znajduje się w 1 - h pojemnikach, cotygodniowy okres to 168 pojemników.- 0 : brak sezonowości, więc pomiń wyodrębnianie tego składnika. |
|
Tendencja | string |
Steruje analizą trendu. Możliwe wartości to: - avg : Zdefiniuj składnik trendu jako average(x) . Jest to opcja domyślna.- linefit : wyodrębnianie składnika trendu przy użyciu regresji liniowej.- none : Brak trendu, więc pomiń wyodrębnianie tego składnika. |
|
Test_points | int |
Dodatnia liczba całkowita określająca liczbę punktów na końcu serii do wykluczenia z procesu uczenia się lub regresji. Ten parametr należy ustawić na potrzeby prognozowania. Wartość domyślna to 0. | |
Seasonality_threshold | real |
Próg oceny sezonowości, gdy sezonowość jest ustawiona na autowykrywanie. Domyślny próg oceny wynosi 0,6. Aby uzyskać więcej informacji, zobacz series_periods_detect. |
Zwraca
Funkcja zwraca następującą serię:
baseline
: przewidywana wartość serii (suma składników sezonowych i trendów, patrz poniżej).seasonal
: seria składników sezonowych:- jeśli okres nie został wykryty lub jest jawnie ustawiony na 0: stała 0.
- jeśli wykryto lub ustawiono dodatnią liczbę całkowitą: mediana punktów serii w tej samej fazie
trend
: seria składnika trendu.residual
: seria składnika reszt (czyli x - punkt odniesienia).
Uwaga
- Kolejność wykonywania składnika:
- Wyodrębnianie serii sezonowej
- Odejmij ją od x, generując serię deseasonalną
- Wyodrębnianie składnika trendu z serii deseasonowej
- Tworzenie planu bazowego = sezon + trend
- Tworzenie reszty = x — punkt odniesienia
- Należy włączyć sezonowość lub trend. W przeciwnym razie funkcja jest nadmiarowa i po prostu zwraca punkt odniesienia = 0 i reszty = x.
Więcej informacji o dekompozycji serii
Ta metoda jest zwykle stosowana do szeregów czasowych metryk, które mają manifestować okresowe i/lub trendowe zachowanie. Za pomocą metody można prognozować przyszłe wartości metryk i/lub wykrywać nietypowe wartości. Niejawne założenie tego procesu regresji polega na tym, że oprócz zachowania sezonowego i trendu szereg czasowy jest stochastyczny i losowo rozłożony. Prognozowanie przyszłych wartości metryk ze składników sezonowych i trendów przy jednoczesnym ignorowaniu części reszt. Wykrywaj nietypowe wartości na podstawie wykrywania odstającego tylko na części reszt. Więcej szczegółów można znaleźć w rozdziale Dekompozycja szeregów czasowych.
Przykłady
Cotygodniowa sezonowość
W poniższym przykładzie wygenerujemy serię z cotygodniową sezonowością i bez trendu, a następnie dodamy do niej pewne wartości odstające. series_decompose
odnajduje i automatycznie wykrywa sezonowość i generuje punkt odniesienia, który jest niemal identyczny ze składnikiem sezonowym. Dodane wartości odstające można wyraźnie zobaczyć w składniku reszt.
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(y)
| render timechart
Cotygodniowa sezonowość z trendem
W tym przykładzie dodamy trend do serii z poprzedniego przykładu. Najpierw uruchamiamy series_decompose
polecenie z parametrami domyślnymi. Wartość domyślna trendu avg
przyjmuje tylko średnią i nie oblicza trendu. Wygenerowany punkt odniesienia nie zawiera trendu. Obserwowanie trendu w resztach staje się oczywiste, że ten przykład jest mniej dokładny niż w poprzednim przykładzie.
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(y)
| render timechart
Następnie uruchomimy ponownie ten sam przykład. Ponieważ spodziewamy się trendu w serii, określamy linefit
w parametrze trendu. Widzimy, że wykryto pozytywny trend, a punkt odniesienia jest znacznie bliżej serii danych wejściowych. Reszty są zbliżone do zera i wyróżnia się tylko wartości odstające. Na wykresie widać wszystkie składniki serii.
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(y, -1, 'linefit')
| render timechart
Powiązana zawartość
- Wizualizowanie wyników za pomocą elementu anomaliiart