series_decompose_anomalies()
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
A detecção de anomalias é baseada na decomposição em série. Para obter mais informações, consulte series_decompose().
A função recebe uma expressão contendo uma série (matriz numérica dinâmica) como entrada e extrai pontos anômalos com pontuações.
Sintaxe
series_decompose_anomalies (
Série,
[ Tendência,
de sazonalidade ,
do limiar ,
Test_points ,
AD_method,
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 . |
Limite | real |
O limiar de anomalia. O padrão é 1,5, valor k, para detectar anomalias leves ou mais fortes. | |
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 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 compartimentos, um período semanal será de 1h 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. | |
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 faixa de percentil 10 a 90 personalizada. Esse é o padrão.- tukey : Teste de cerca de Tukey com faixa padrão de percentil 25 a 75.Para obter mais informações sobre séries temporais residuais, consulte series_outliers. |
|
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:
ad_flag
: Uma série ternária contendo (+1, -1, 0) marcação para cima/para baixo/sem anomalia, respectivamentead_score
: Pontuação de anomaliabaseline
: O valor previsto da série, de acordo com a decomposição
O algoritmo
Esta função segue estas etapas:
- Chama series_decompose() com os respectivos parâmetros, para criar a série de linha de base e resíduos.
- Calcula ad_score série aplicando series_outliers() com o método de detecção de anomalias escolhido na série de resíduos.
- Calcula a série ad_flag aplicando o limite no ad_score para marcar para cima/para baixo/sem anomalia, respectivamente.
Exemplos
Detectar anomalias na sazonalidade semanal
No exemplo a seguir, gere uma série com sazonalidade semanal e adicione alguns valores discrepantes a ela. series_decompose_anomalies
Detecta automaticamente a sazonalidade e gera uma linha de base que captura o padrão repetitivo. Os valores discrepantes adicionados podem ser claramente identificados 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
Detecte 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, alguns dos valores discrepantes inseridos nos dados não são detectados 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. Todos os outliers inseridos são detectados e também alguns falsos positivos. Veja 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
Ajuste o limite de detecção de anomalias
Alguns pontos ruidosos 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, apenas os outliers que você inseriu nos dados serão detectados.
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