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, respectivamentead_score
: pontuação de anomaliasbaseline
: o valor previsto da série, de acordo com a decomposição
O algoritmo
Essa função segue estas etapas:
- Chama series_decompose() com os respectivos parâmetros para criar a linha de base e as séries residuais.
- Calcula ad_score série aplicando series_outliers() com o método de detecção de anomalias escolhido na série residual.
- 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
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
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
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
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de