series_decompose_anomalies()

A Detecção de Anomalias é baseada na decomposição da série. Para obter mais informações, consulte series_decompose().

A função usa uma expressão que contém uma série (matriz numérica dinâmica) como entrada e extrai pontos anormais com pontuações.

Syntax

series_decompose_anomalies (Série, [ Limite,Sazonalidade,Tendência,, Test_points, AD_methodSeasonality_threshold ])

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Tipo Obrigatório Descrição
Série dynamic ✔️ Uma matriz de valores numéricos, normalmente a saída resultante de operadores make-series ou make_list .
Limite real O limite de anomalias. O padrão é 1,5, k valor, para detectar anomalias leves ou mais fortes.
Sazonalidade int Controla a análise sazonal. Os valores possíveis são:

- -1: detecção automática de sazonalidade usando series_periods_detect. Esse é o valor padrão.
- Período de tempo inteiro: um inteiro positivo que especifica o período esperado em número de compartimentos. Por exemplo, se a série estiver em 1h compartimentos, um período semanal será de 168 compartimentos.
- 0: sem sazonalidade, então ignore a extração desse componente.
Tendência string Controla a análise de tendência. Os valores possíveis são:

- avg: define o componente de tendência como average(x). Esse é o padrão.
- linefit: extraia o componente de tendência usando regressão linear.
- none: nenhuma tendência, portanto, ignore a extração desse componente.
Test_points int Um inteiro positivo que especifica o número de pontos no final da série a ser excluído do processo de aprendizado ou regressão. Esse parâmetro deve ser definido para fins de previsão. O valor padrão é 0.
AD_method string Controla o método de detecção de anomalias na série temporal residual, contendo um dos seguintes valores:

- ctukey: teste de cerca de Tukey com intervalo de percentil 10-90. Esse é o padrão.
- tukey: teste de cerca de Tukey com intervalo de percentil padrão 25-75.

Para obter mais informações sobre séries temporais residuais, consulte series_outliers.
Seasonality_threshold real O limite para a 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.

Retornos

A função retorna as seguintes séries:

  • ad_flag: uma série ternária que contém (+1, -1, 0) marcando anomalias para cima/para baixo/sem anomalias, respectivamente
  • ad_score: pontuação de anomalias
  • baseline: o valor previsto da série, de acordo com a decomposição

O algoritmo

Essa função segue estas etapas:

  1. Chama series_decompose() com os respectivos parâmetros para criar a linha de base e as séries residuais.
  2. Calcula ad_score série aplicando series_outliers() com o método de detecção de anomalias escolhido na série residual.
  3. Calcula a série ad_flag aplicando o limite na ad_score para marcar para cima/para baixo/sem anomalias, respectivamente.

Exemplos

Detectar anomalias na sazonalidade semanal

No exemplo a seguir, gere uma série com sazonalidade semanal e adicione algumas exceções a ela. series_decompose_anomalies faz a detecção automática da sazonalidade e gera uma linha de base que captura o padrão repetitivo. As exceções adicionadas podem ser claramente detectadas no componente ad_score.

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_anomalies(y)
| render timechart  

Sazonalidade semanal mostrando linha de base e exceções.

Detectar anomalias na sazonalidade semanal com tendência

Neste exemplo, adicione uma tendência à série do exemplo anterior. Primeiro, execute series_decompose_anomalies com os parâmetros padrão nos quais 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 e é menos exata, em comparação com o exemplo anterior. Consequentemente, algumas das exceções inseridas nos dados não são detectadas devido à maior variação.

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_anomalies(y)
| extend series_decompose_anomalies_y_ad_flag = 
series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes
| render timechart

Exceções semanais de sazonalidade com tendência.

Em seguida, execute o mesmo exemplo, mas como você está esperando uma tendência na série, especifique linefit no parâmetro de tendência. Você pode ver que a linha de base está muito mais próxima da série de entrada. Todas as exceções inseridas são detectadas e também alguns falsos positivos. Confira o próximo exemplo sobre como ajustar o limite.

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_anomalies(y, 1.5, -1, 'linefit')
| extend series_decompose_anomalies_y_ad_flag = 
series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes
| render timechart  

Anomalias semanais de sazonalidade com tendência de linefit.

Ajustar o limite de detecção de anomalias

Alguns pontos barulhentos foram detectados como anomalias no exemplo anterior. Agora, aumente o limite de detecção de anomalias de um padrão de 1,5 para 2,5. Use esse intervalo interpercentil para que apenas anomalias mais fortes sejam detectadas. Agora, somente as exceções que você inseriu nos dados serão detectadas.

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 onlgoing 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_anomalies(y, 2.5, -1, 'linefit')
| extend series_decompose_anomalies_y_ad_flag = 
series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes
| render timechart  

Anomalias de série semanal com limite de anomalias mais alto.