Partilhar via


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 a startTime. Se endTime 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. Se endTime for igual a startTime, 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. Se slidingWindow for k para treinamento de modelo, pelo menos k 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 um slidingWindow valor:

    1. 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 de slidingWindow.
    2. 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 maiores slidingWindowlevarão a ganhos de precisão. Um pequeno slidingWindow pode fazer com que o modelo seja difícil de convergir para uma solução ideal. Por exemplo, é difícil detetar anomalias quando slidingWindow tem apenas dois pontos.
  • alignMode - Como alinhar múltiplas variáveis (séries temporais) em carimbos de data/hora. Há duas opções para esse parâmetro Inner e Outer, 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áveis

    carimbo 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áveis

    carimbo 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 preencher nan 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ão Linear, Previous, Subsequent, Zeroe Fixed o valor padrão é Linear.

    Opção Método
    Linear Valores de preenchimento nan por interpolação linear
    Previous 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 em paddingValue.
  • paddingValue - O valor de preenchimento é usado para preencher nan quando fillNAMethod é 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 e value, 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 e valueprecisas.

  • Os timestamp valores devem estar em conformidade com a norma ISO 8601, podendo value 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, e series_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 à esquerda slidingWindow 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 e endTime 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 sua startTime. A inferência em tais cenários é realizada de forma de "janela móvel". Por exemplo, o MVAD usará dados de 2021-01-01T00:00:00Z até 2021-01-01T23:59:00Z (inclusive) para determinar se os dados em 2021-01-02T00:00:00Z são anômalos. Em seguida, ele avança e usa dados de 2021-01-01T00:01:00Z para 2021-01-02T00:00:00Z (inclusive) para determinar se os dados em 2021-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 por endTime (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 tamanho slidingWindow + ().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