series_decompose()
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Aplica uma transformação de decomposição em uma série.
Usa uma expressão que contém uma série (matriz numérica dinâmica) como entrada e a decompõe em componentes sazonais, de tendência e residuais.
Sintaxe
series_decompose(
Série ,
[ Tendência,
de sazonalidade,
Test_points,
Seasonality_threshold ])
Saiba mais sobre as convenções de sintaxe.
Parâmetros
Nome | Digitar | Obrigatória | Descrição |
---|---|---|---|
Série | dynamic |
✔️ | Uma matriz de valores numéricos, normalmente a saída resultante de operadores make-series ou make_list . |
Sazonalidade | int |
Controla a análise sazonal. Os valores possíveis são: - -1 : Detectar automaticamente a sazonalidade usando series_periods_detect. Este é o valor padrão.- Período: Um inteiro positivo que especifica o período esperado em número de compartimentos. Por exemplo, se a série estiver em compartimentos, um período semanal será de 1 - h 168 compartimentos.- 0 : Sem sazonalidade, então pule a extração deste componente. |
|
Tendência | string |
Controla a análise de tendências. Os valores possíveis são: - avg : Defina o componente de tendência como average(x) . Esse é o padrão.- linefit : Extraia o componente de tendência usando regressão linear.- none : Sem tendência, então pule a extração deste componente. |
|
Test_points | int |
Um número inteiro positivo que especifica o número de pontos no final da série a serem excluídos do processo de aprendizado ou regressão. Este parâmetro deve ser definido para fins de previsão. O valor padrão é 0. | |
Seasonality_threshold | real |
O limite para pontuação de sazonalidade quando Sazonalidade é definido como detecção automática. O limite de pontuação padrão é 0,6. Para obter mais informações, consulte series_periods_detect. |
Devoluções
A função retorna as seguintes séries respectivas:
baseline
: o valor previsto da série (soma dos componentes sazonais e de tendência, ver abaixo).seasonal
: a série da componente sazonal:- Se o período não for detectado ou estiver explicitamente definido como 0: constante 0.
- se detectado ou definido como inteiro positivo: mediana dos pontos da série na mesma fase
trend
: a série do componente de tendência.residual
: a série do componente residual (ou seja, x - linha de base).
Observação
- Ordem de execução do componente:
- Extrair a série sazonal
- Subtraia-o de x, gerando a série dessazonal
- Extrair o componente de tendência da série de dessazonalidade
- Crie a linha de base = sazonal + tendência
- Crie o resíduo = x - linha de base
- A sazonalidade e/ou a tendência devem ser habilitadas. Caso contrário, a função será redundante e apenas retornará baseline = 0 e residual = x.
Mais sobre decomposição de séries
Esse método geralmente é aplicado a séries temporais de métricas que devem manifestar comportamento periódico e/ou de tendência. Você pode usar o método para prever valores de métricas futuros e/ou detectar valores anômalos. A suposição implícita desse processo de regressão é que, além do comportamento sazonal e de tendência, a série temporal é estocástica e distribuída aleatoriamente. Preveja valores de métricas futuras dos componentes sazonais e de tendência, ignorando a parte residual. Detecte valores anômalos com base na detecção de valores discrepantes somente na parte residual. Mais detalhes podem ser encontrados no capítulo Decomposição de Séries Temporais.
Exemplos
Sazonalidade semanal
No exemplo a seguir, geramos uma série com sazonalidade semanal e sem tendência, adicionamos alguns outliers a ela. series_decompose
localiza e detecta automaticamente a sazonalidade e gera uma linha de base quase idêntica ao componente sazonal. Os valores discrepantes que adicionamos podem ser vistos claramente no componente de resíduos.
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
Sazonalidade semanal com tendência
Neste exemplo, adicionamos uma tendência à série do exemplo anterior. Primeiro, executamos series_decompose
com os parâmetros padrão. O valor padrão da tendência avg
usa apenas a média e não calcula a tendência. A linha de base gerada não contém a tendência. Ao observar a tendência nos resíduos, torna-se evidente que este exemplo é menos preciso do que o exemplo anterior.
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
Em seguida, executamos novamente o mesmo exemplo. Como estamos esperando uma tendência na série, especificamos linefit
no parâmetro de tendência. Podemos ver que a tendência positiva é detectada e a linha de base está muito mais próxima da série de entrada. Os resíduos são próximos de zero e apenas os outliers se destacam. Podemos ver todos os componentes da série no gráfico.
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
Conteúdo relacionado
- Visualize os resultados com um gráfico de anomalia