Partilhar via


series_decompose()

Aplica-se a: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft 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:
  1. Extrair a série sazonal
  2. Subtraia-o de x, gerando a série dessazonal
  3. Extrair o componente de tendência da série de dessazonalidade
  4. Crie a linha de base = sazonal + tendência
  5. 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  

A série se decompõe 1.

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  

A série se decompõe 2.

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  

A série se decompõe 3.

  • Visualize os resultados com um gráfico de anomalia