Práticas recomendadas para usar a API do Detetor de Anomalias Multivariadas
Importante
A partir de 20 de setembro de 2023, você não poderá criar novos recursos do Detetor de Anomalias. O serviço de Detetor de Anomalias está a ser desativado no dia 1 de outubro de 2026.
Este artigo fornece orientação sobre as práticas recomendadas a serem seguidas ao usar as APIs MVAD (Detetor de Anomalias Multivariadas). Neste tutorial, você:
- Uso da API: saiba como usar o MVAD sem erros.
- Engenharia de dados: saiba como preparar melhor seus dados para que o MVAD funcione com melhor precisão.
- Armadilhas comuns: saiba como evitar armadilhas comuns que os clientes encontram.
- FAQ: Saiba as respostas às perguntas frequentes.
Uso da API
Siga as instruções nesta seção para evitar erros ao usar o MVAD. Se você ainda receber erros, consulte a lista completa de códigos de erro para obter explicações e ações a serem tomadas.
Parâmetros de entrada
Parâmetros obrigatórios
Esses três parâmetros são necessários em solicitações de API de treinamento e inferência:
source
- O link para seu arquivo zip localizado no Armazenamento de Blob do Azure com Assinaturas de Acesso Compartilhado (SAS).startTime
- A hora de início dos dados utilizados para treinamento ou inferência. Se for anterior ao carimbo de data/hora mais antigo real nos dados, o carimbo de data/hora mais antigo real será usado como ponto de partida.endTime
- A hora final dos dados utilizados para formação ou inferência, que deve ser posterior ou igual astartTime
. SeendTime
for posterior ao carimbo de data/hora mais recente real nos dados, o carimbo de data/hora mais recente real será usado como ponto final. SeendTime
for igual astartTime
, significa inferência de um único ponto de dados que é frequentemente usado em cenários de streaming.
Parâmetros opcionais para API de treinamento
Outros parâmetros para API de treinamento são opcionais:
slidingWindow
- Quantos pontos de dados são usados para determinar anomalias. Um número inteiro entre 28 e 2.880. O valor padrão é 300. SeslidingWindow
fork
para treinamento de modelo, pelo menosk
pontos devem ser acessíveis a partir do arquivo de origem durante a inferência para obter resultados válidos.O MVAD usa um segmento de pontos de dados para decidir se o próximo ponto de dados é uma anomalia. O comprimento do segmento é
slidingWindow
. Por favor, tenha duas coisas em mente ao escolher umslidingWindow
valor:- As propriedades dos seus dados: se são periódicos e a taxa de amostragem. Quando seus dados são periódicos, você pode definir a duração de 1 a 3 ciclos como o
slidingWindow
. Quando seus dados estão em uma alta frequência (pequena granularidade), como nível de minuto ou segundo nível, você pode definir um valor relativamente maior deslidingWindow
. - O trade-off entre o tempo de treinamento/inferência e o potencial impacto no desempenho. Um maior
slidingWindow
pode causar maior tempo de treinamento/inferência. Não há garantia de que s maioresslidingWindow
levarão a ganhos de precisão. Um pequenoslidingWindow
pode fazer com que o modelo seja difícil de convergir para uma solução ideal. Por exemplo, é difícil detetar anomalias quandoslidingWindow
tem apenas dois pontos.
- As propriedades dos seus dados: se são periódicos e a taxa de amostragem. Quando seus dados são periódicos, você pode definir a duração de 1 a 3 ciclos como o
alignMode
- Como alinhar múltiplas variáveis (séries temporais) em carimbos de data/hora. Há duas opções para esse parâmetroInner
eOuter
, e o valor padrão éOuter
.Este parâmetro é crítico quando há desalinhamento entre as sequências de carimbo de data/hora das variáveis. O modelo precisa alinhar as variáveis na mesma sequência de carimbo de data/hora antes de continuar o processamento.
Inner
significa que o modelo reportará os resultados da deteção apenas em carimbos de data/hora nos quais cada variável tem um valor, ou seja, a interseção de todas as variáveis.Outer
significa que o modelo relatará resultados de deteção em carimbos de data/hora nos quais qualquer variável tem um valor, ou seja, a união de todas as variáveis.Aqui está um exemplo para explicar diferentes
alignModel
valores.Variável-1
carimbo de data/hora valor 2020-11-01 1 2020-11-02 2 2020-11-04 4 2020-11-05 5 Variável-2
carimbo de data/hora valor 2020-11-01 1 2020-11-02 2 2020-11-03 3 2020-11-04 4 Inner
Junte duas variáveiscarimbo de data/hora Variável-1 Variável-2 2020-11-01 1 1 2020-11-02 2 2 2020-11-04 4 4 Outer
Junte duas variáveiscarimbo de data/hora Variável-1 Variável-2 2020-11-01 1 1 2020-11-02 2 2 2020-11-03 nan
3 2020-11-04 4 4 2020-11-05 5 nan
fillNAMethod
- Como preenchernan
a tabela mesclada. Pode haver valores ausentes na tabela mesclada e eles devem ser manipulados corretamente. Nós fornecemos vários métodos para preenchê-los. As opções sãoLinear
,Previous
,Subsequent
,Zero
eFixed
o valor padrão éLinear
.Opção Método Linear
Valores de preenchimento nan
por interpolação linearPrevious
Propagar o último valor válido para preencher lacunas. Exemplo: [1, 2, nan, 3, nan, 4]
->[1, 2, 2, 3, 3, 4]
Subsequent
Use o próximo valor válido para preencher lacunas. Exemplo: [1, 2, nan, 3, nan, 4]
->[1, 2, 3, 3, 4, 4]
Zero
Preencha nan
os valores com 0.Fixed
Preencha nan
os valores com um valor válido especificado que deve ser fornecido empaddingValue
.paddingValue
- O valor de preenchimento é usado para preenchernan
quandofillNAMethod
éFixed
e deve ser fornecido nesse caso. Noutros casos, é opcional.displayName
- Este é um parâmetro opcional que é usado para identificar modelos. Por exemplo, você pode usá-lo para marcar parâmetros, fontes de dados e quaisquer outros metadados sobre o modelo e seus dados de entrada. O valor padrão é uma cadeia de caracteres vazia.
Esquema de dados de entrada
O MVAD deteta anomalias de um grupo de métricas, e chamamos cada métrica de variável ou série temporal.
Você pode baixar o arquivo de dados de exemplo da Microsoft para verificar o esquema aceito de: https://aka.ms/AnomalyDetector/MVADSampleData
Cada variável deve ter dois e apenas dois campos,
timestamp
evalue
, e deve ser armazenada em um arquivo CSV (valores separados por vírgula).Os nomes das colunas do arquivo CSV devem diferenciar
timestamp
maiúsculas de minúsculas evalue
precisas.Os
timestamp
valores devem estar em conformidade com a norma ISO 8601, podendovalue
ser inteiros ou decimais com qualquer número de casas decimais. Um bom exemplo do conteúdo de um arquivo CSV:carimbo de data/hora valor 2019-04-01T00:00:00Z 5 2019-04-01T00:01:00Z 3.6 2019-04-01T00:02:00Z 4 ... ... Nota
Se seus carimbos de data/hora tiverem horas, minutos e/ou segundos, certifique-se de que eles estejam devidamente arredondados antes de chamar as APIs.
Por exemplo, se a frequência dos dados deve ser um ponto de dados a cada 30 segundos, mas você está vendo carimbos de data/hora como "12:00:01" e "12:00:28", é um sinal forte de que você deve pré-processar os carimbos de data/hora para novos valores como "12:00:00" e "12:00:30".
Para obter detalhes, consulte a seção "Resumo do carimbo de data/hora" no documento de práticas recomendadas.
O nome do arquivo csv será usado como o nome da variável e deve ser exclusivo. Por exemplo, "temperature.csv" e "humidity.csv".
As variáveis para treinamento e variáveis para inferência devem ser consistentes. Por exemplo, se você estiver usando
series_1
,series_2
,series_3
,series_4
, eseries_5
para treinamento, você deve fornecer exatamente as mesmas variáveis para inferência.Os arquivos CSV devem ser compactados em um arquivo zip e carregados em um contêiner de blob do Azure. O arquivo zip pode ter o nome que você quiser.
Estrutura de pastas
Um erro comum na preparação de dados são pastas extras no arquivo zip. Por exemplo, suponha que o nome do arquivo zip seja series.zip
. Em seguida, depois de descompactar os arquivos para uma nova pasta ./series
, o caminho correto para arquivos CSV é ./series/series_1.csv
e um caminho errado pode ser ./series/foo/bar/series_1.csv
.
O exemplo correto da árvore de diretórios depois de descompactar o arquivo zip no Windows
.
└── series
├── series_1.csv
├── series_2.csv
├── series_3.csv
├── series_4.csv
└── series_5.csv
Um exemplo incorreto da árvore de diretórios depois de descompactar o arquivo zip no Windows
.
└── series
└── series
├── series_1.csv
├── series_2.csv
├── series_3.csv
├── series_4.csv
└── series_5.csv
Engenharia de dados
Agora você pode executar seu código com APIs MVAD sem qualquer erro. O que poderia ser feito para melhorar a precisão do seu modelo?
Qualidade de dados
- Como o modelo aprende padrões normais a partir de dados históricos, os dados de treinamento devem representar o estado normal geral do sistema. É difícil para o modelo aprender esses tipos de padrões se os dados de treinamento estiverem cheios de anomalias. Um limiar empírico de taxa anormal é de 1% e abaixo para uma boa precisão.
- Em geral, a razão de valor em falta dos dados de formação deve ser inferior a 20%. Muitos dados ausentes podem acabar com valores preenchidos automaticamente (geralmente valores lineares ou valores constantes) sendo aprendidos como padrões normais. Isso pode resultar na deteção de pontos de dados reais (não ausentes) como anomalias.
Quantidade de dados
O modelo subjacente do MVAD tem milhões de parâmetros. Ele precisa de um número mínimo de pontos de dados para aprender um conjunto ideal de parâmetros. A regra empírica é que você precisa fornecer 5.000 ou mais pontos de dados (carimbos de data/hora) por variável para treinar o modelo para uma boa precisão. Em geral, quanto mais dados de treinamento, melhor a precisão. No entanto, nos casos em que você não é capaz de acumular tantos dados, ainda encorajamos você a experimentar menos dados e ver se a precisão comprometida ainda é aceitável.
Sempre que você chamar a API de inferência, precisará garantir que o arquivo de dados de origem contenha apenas pontos de dados suficientes. Isso é normalmente
slidingWindow
+ número de pontos de dados que realmente precisam de resultados de inferência. Por exemplo, em um caso de streaming quando você quiser inferir em UM novo carimbo de data/hora, o arquivo de dados pode conter apenas o ponto de dados à esquerdaslidingWindow
mais UM , então você pode seguir em frente e criar outro arquivo zip com o mesmo número de pontos de dados (slidingWindow
+ 1), mas movendo UMA etapa para o lado "direito" e enviar para outro trabalho de inferência.Qualquer coisa além disso ou "antes" da janela deslizante principal não afetará o resultado da inferência e só pode causar downgrade de desempenho. Qualquer coisa abaixo disso pode levar a um
NotEnoughInput
erro.
Resumo do carimbo de data/hora
Num grupo de variáveis (séries temporais), cada variável pode ser recolhida a partir de uma fonte independente. Os carimbos de data/hora de diferentes variáveis podem ser inconsistentes entre si e com as frequências conhecidas. Aqui está um exemplo simples.
Variável-1
carimbo de data/hora | valor |
---|---|
12:00:01 | 1.0 |
12:00:35 | 1.5 |
12:01:02 | 0,9 |
12:01:31 | 2.2 |
12:02:08 | 1.3 |
Variável-2
carimbo de data/hora | valor |
---|---|
12:00:03 | 2.2 |
12:00:37 | 2.6 |
12:01:09 | 1.4 |
12:01:34 | 1.7 |
12:02:04 | 2.0 |
Temos duas variáveis coletadas de dois sensores que enviam um ponto de dados a cada 30 segundos. No entanto, os sensores não estão enviando pontos de dados em uma frequência estrita mesmo, mas às vezes mais cedo e às vezes mais tarde. Como o MVAD leva em consideração correlações entre diferentes variáveis, os carimbos de data/hora devem ser devidamente alinhados para que as métricas possam refletir corretamente a condição do sistema. No exemplo acima, os carimbos de data/hora das variáveis 1 e 2 devem ser devidamente «arredondados» para a sua frequência antes do alinhamento.
Vamos ver o que acontece se eles não forem pré-processados. Se definirmos alignMode
como sendo Outer
(o que significa união de dois conjuntos), a tabela mesclada é:
carimbo de data/hora | Variável-1 | Variável-2 |
---|---|---|
12:00:01 | 1.0 | nan |
12:00:03 | nan |
2.2 |
12:00:35 | 1.5 | nan |
12:00:37 | nan |
2.6 |
12:01:02 | 0,9 | nan |
12:01:09 | nan |
1.4 |
12:01:31 | 2.2 | nan |
12:01:34 | nan |
1.7 |
12:02:04 | nan |
2.0 |
12:02:08 | 1.3 | nan |
nan
indica valores em falta. Obviamente, a tabela mesclada não é o que você poderia esperar. As variáveis 1 e 2 intercalam-se, e o modelo MVAD não consegue extrair informações sobre correlações entre elas. Se definirmos alignMode
como Inner
, a tabela mesclada estará vazia, pois não há um carimbo de data/hora comum nas variáveis 1 e 2.
Portanto, os carimbos de data/hora das variáveis 1 e 2 devem ser pré-processados (arredondados para os carimbos de data/hora de 30 segundos mais próximos) e as novas séries cronológicas são:
Variável-1
carimbo de data/hora | valor |
---|---|
12:00:00 | 1.0 |
12:00:30 | 1.5 |
12:01:00 | 0,9 |
12:01:30 | 2.2 |
12:02:00 | 1.3 |
Variável-2
carimbo de data/hora | valor |
---|---|
12:00:00 | 2.2 |
12:00:30 | 2.6 |
12:01:00 | 1.4 |
12:01:30 | 1.7 |
12:02:00 | 2.0 |
Agora, a tabela mesclada é mais razoável.
carimbo de data/hora | Variável-1 | Variável-2 |
---|---|---|
12:00:00 | 1.0 | 2.2 |
12:00:30 | 1.5 | 2.6 |
12:01:00 | 0,9 | 1.4 |
12:01:30 | 2.2 | 1.7 |
12:02:00 | 1.3 | 2.0 |
Os valores de diferentes variáveis em carimbos de data/hora próximos estão bem alinhados, e o modelo MVAD agora pode extrair informações de correlação.
Limitações
Existem algumas limitações nas APIs de treinamento e inferência, você deve estar ciente dessas limitações para evitar erros.
Limitações gerais
- Janela deslizante: 28-2880 carimbos de data/hora, o padrão é 300. Para dados periódicos, defina a duração de 2-4 ciclos como a janela deslizante.
- Números de variáveis: Para treinamento e inferência de lote, no máximo 301 variáveis.
Limitações de treinamento
- Carimbos de data/hora: No máximo 1000000. Poucos carimbos de data/hora podem diminuir a qualidade do modelo. Recomendo ter mais de 5.000 carimbos de data/hora.
- Granularidade: A granularidade mínima é
per_second
.
Limitações de inferência em lote
- Carimbos de data/hora: No máximo 20000, pelo menos 1 comprimento de janela deslizante.
Limitações de inferência de streaming
- Carimbos de data/hora: No máximo 2880, pelo menos 1 comprimento de janela deslizante.
- Deteção de carimbos de data/hora: De 1 a 10.
Qualidade do modelo
Como lidar com falsos positivos e falsos negativos em cenários reais?
Fornecemos gravidade que indica a significância das anomalias. Os falsos positivos podem ser filtrados através da definição de um limiar de gravidade. Às vezes, muitos falsos positivos podem aparecer quando há mudanças de padrão nos dados de inferência. Nesses casos, um modelo pode precisar ser retreinado em novos dados. Se os dados de treinamento contiverem muitas anomalias, pode haver falsos negativos nos resultados da deteção. Isso ocorre porque o modelo aprende padrões com os dados de treinamento e anomalias podem trazer viés para o modelo. Assim, uma limpeza adequada dos dados pode ajudar a reduzir os falsos negativos.
Como estimar qual modelo é melhor usar de acordo com a perda de treinamento e perda de validação?
De um modo geral, é difícil decidir qual modelo é o melhor sem um conjunto de dados rotulado. No entanto, podemos aproveitar as perdas de treinamento e validação para ter uma estimativa aproximada e descartar esses modelos ruins. Primeiro, precisamos observar se as perdas de treinamento convergem. Perdas divergentes geralmente indicam má qualidade do modelo. Em segundo lugar, os valores de perda podem ajudar a identificar se ocorre subajuste ou sobreajuste. Os modelos com subajuste ou sobremontagem podem não ter o desempenho desejado. Em terceiro lugar, embora a definição da função de perda não reflita diretamente o desempenho de deteção, os valores de perda podem ser uma ferramenta auxiliar para estimar a qualidade do modelo. O baixo valor de perda é uma condição necessária para um bom modelo, assim podemos descartar modelos com altos valores de perda.
Dificuldades comuns
Além da tabela de códigos de erro, aprendemos com clientes como você algumas armadilhas comuns ao usar APIs MVAD. Esta tabela irá ajudá-lo a evitar esses problemas.
Armadilha | Consequência | Explicação e solução |
---|---|---|
Os carimbos de data/hora nos dados de treinamento e/ou dados de inferência não foram arredondados para alinhar com a respetiva frequência de dados de cada variável. | Os carimbos de data/hora dos resultados de inferência não são os esperados: poucos carimbos de data/hora ou muitos carimbos de data/hora. | Consulte o resumo do carimbo de data/hora. |
Muitos pontos de dados anômalos nos dados de treinamento | A precisão do modelo é afetada negativamente porque trata pontos de dados anômalos como padrões normais durante o treinamento. | Empiricamente, manter a taxa anormal em ou abaixo de 1% ajudará. |
Poucos dados de treinamento | A precisão do modelo está comprometida. | Empiricamente, o treinamento de um modelo MVAD requer 15.000 ou mais pontos de dados (carimbos de data/hora) por variável para manter uma boa precisão. |
Tomando todos os pontos de dados como isAnomaly =true anomalias |
Demasiados falsos positivos | Você deve usar ambos isAnomaly e severity (ou score ) para filtrar anomalias que não são graves e (opcionalmente) usar o agrupamento para verificar a duração das anomalias para suprimir ruídos aleatórios. Consulte a secção FAQ abaixo para saber a diferença entre severity e score . |
As subpastas são compactadas no arquivo de dados para treinamento ou inferência. | Os arquivos de dados csv dentro de subpastas são ignorados durante o treinamento e/ou inferência. | Nenhuma subpasta é permitida no arquivo zip. Consulte Estrutura de pastas para obter detalhes. |
Demasiados dados no ficheiro de dados de inferência: por exemplo, comprimir todos os dados históricos no ficheiro zip de dados de inferência | Você pode não ver nenhum erro, mas terá um desempenho degradado ao tentar carregar o arquivo zip no Blob do Azure, bem como ao tentar executar a inferência. | Consulte Quantidade de dados para obter detalhes. |
Criando recursos do Detetor de Anomalias em regiões do Azure que ainda não oferecem suporte ao MVAD e chamando APIs do MVAD | Você receberá um erro "recurso não encontrado" ao chamar as APIs MVAD. | Durante o estágio de visualização, o MVAD está disponível apenas em regiões limitadas. Marque o que há de novo no Detetor de anomalias para se manter atualizado com as implementações da região MVAD. Você também pode registrar um problema no GitHub ou entrar em contato conosco para AnomalyDetector@microsoft.com solicitar regiões específicas. |
FAQ
Como funciona a janela deslizante MVAD?
Vamos usar dois exemplos para aprender como funciona a janela deslizante do MVAD. Suponha que você tenha definido slidingWindow
= 1.440 e seus dados de entrada estejam com granularidade de um minuto.
Cenário de streaming: você deseja prever se o ponto de dados ONE em "2021-01-02T00:00:00Z" é anômalo. O seu
startTime
eendTime
será o mesmo valor ("2021-01-02T00:00:00Z"). Sua fonte de dados de inferência, no entanto, deve conter pelo menos 1.440 + 1 carimbos de data/hora. Porque o MVAD usará os dados principais antes do ponto de dados de destino ("2021-01-02T00:00:00Z") para decidir se o destino é uma anomalia. O comprimento dos dados principais necessários éslidingWindow
de ou 1.440 neste caso. 1.440 = 60 * 24, portanto, seus dados de entrada devem começar a partir de, o mais tardar, "2021-01-01T00:00:00Z".Cenário em lote: você tem vários pontos de dados de destino para prever. A sua
endTime
vontade será maior do que a suastartTime
. A inferência em tais cenários é realizada de forma de "janela móvel". Por exemplo, o MVAD usará dados de2021-01-01T00:00:00Z
até2021-01-01T23:59:00Z
(inclusive) para determinar se os dados em2021-01-02T00:00:00Z
são anômalos. Em seguida, ele avança e usa dados de2021-01-01T00:01:00Z
para2021-01-02T00:00:00Z
(inclusive) para determinar se os dados em2021-01-02T00:01:00Z
são anômalos. Ele segue da mesma maneira (tomando 1.440 pontos de dados para comparar) até o último carimbo de data/hora especificado porendTime
(ou o carimbo de data/hora mais recente real). Portanto, sua fonte de dados de inferência deve conter dados começando estartTime
-slidingWindow
, idealmente, contém no total de tamanhoslidingWindow
+ ().endTime
-startTime
Qual é a diferença entre severity
e score
?
Normalmente, recomendamos que você use severity
como filtro para filtrar "anomalias" que não são tão importantes para o seu negócio. Dependendo do seu cenário e padrão de dados, essas anomalias que são menos importantes geralmente têm valores relativamente mais baixos severity
ou valores altos severity
autônomos (descontínuos), como picos aleatórios.
Nos casos em que você encontrou a necessidade de regras mais sofisticadas do que limites ou severity
duração de valores altos severity
contínuos, convém usar score
para criar filtros mais poderosos. Entender como o MVAD está usando score
para determinar anomalias pode ajudar:
Consideramos se um ponto de dados é anômalo de uma perspetiva global e local. Se score
em um carimbo de data/hora for maior do que um determinado limite, o carimbo de data/hora será marcado como uma anomalia. Se score
for inferior ao limiar, mas for relativamente maior em um segmento, também será marcado como uma anomalia.
Próximos passos
- Guia de início rápido: use a biblioteca de cliente multivariada do Detetor de Anomalias.
- Saiba mais sobre os algoritmos subjacentes que alimentam o Detetor de Anomalias Multivariado