Detectando Anomalias em Grandes Conjuntos de Dados

Crie um job que detecte anomalias usando detecção assíncrona.

É possível usar a detecção assíncrona para detectar anomalias em conjuntos de dados de detecção univariados e multivariados. Os casos de uso típicos adequados para detecção assíncrona são:

Detectando anomalias em conjuntos de dados muito grandes

O número máximo de pontos de dados suportados pela API Síncrona REST detectAnomalies é 30.000. Isso pode impor restrições em cenários de detecção de anomalias nos quais um grande número de pontos de dados (normalmente em milhões) precisa ser detectado. Usando a detecção assíncrona, você pode analisar e detectar anomalias em conjuntos de dados muito grandes, com mais de 10 milhões de pontos de dados.

Automatizando fluxos de trabalho de detecção

Em casos de uso do IoT, os dados de série de tempo geralmente são coletados de um grande número de sensores e dispositivos e armazenados em um armazenamento de dados persistente, como um banco de dados ou um sistema de arquivos. Geralmente, esses dados brutos devem ser pré-processados (enriquecidos) usando serviços PaaS, como Fluxo de Dados, antes que a dedução possa ser executada. Você pode integrar facilmente as APIs de detecção assíncrona dentro de pipelines de processamento de dados e automatizar workflows de detecção.

Pós-processamento de eventos anômalos

Em determinados cenários de detecção de anomalias, os dados de detecção (anomalias detectadas) podem precisar ser transformados ou enriquecidos para que possam ser consumidos por aplicativos downstream. Com a detecção assíncrona, as anomalias detectadas são salvas em um bucket do Object Storage. Você pode usar serviços PaaS, como o serviço Data Flow, para analisar, processar e enriquecer os eventos anômalos. Além disso, você pode consumir e renderizar as anomalias em gráficos de visualização no Oracle Analytics Cloud para permitir que você monitore sistemas de destino e tome ações corretivas.

  • Pré-requisitos:

    Você deve ter um projeto que contenha um modelo treinado para uso em um job assíncrono do serviço Anomaly Detection.

    1. Abra o menu de navegação e clique em Funções Analíticas & IA. Em Serviços de AI, clique em Detecção de Análise.
    2. No menu de navegação do lado esquerdo, clique em Projetos.
    3. Selecione o compartimento que contém o projeto que deseja usar.
    4. Clique no nome do projeto.

      A página de detalhes do projeto é aberta.

    5. Clique em Jobs.
    6. Clique em Criar job.
    7. (Opcional) Informe um nome exclusivo (limite de 255 caracteres) para o recurso. Se você não fornecer um nome, um será gerado automaticamente.

      Por exemplo:

      aianomalydetection<resource>20230825155844

    8. (Opcional) Informe uma descrição (limite de 400 caracteres) para o recurso.
    9. Selecione o modelo no qual você deseja executar este job.
    10. (Opcional) Selecione a quantidade de sensibilidade a ser usada pela detecção de anomalias de 0 a 1.
    11. Selecione o tipo de solicitação de entrada que você deseja usar para o job.
      • Em Linha:

        Arraste um arquivo JSON ou CSV para a caixa Arquivo ou use Selecionar arquivo para localizá-lo e selecioná-lo em uma unidade local.

      • Armazenamento de objetos:

        Selecione o bucket do Object Storage que contém o arquivo de dados de detecção e, em seguida, selecione o arquivo que você deseja usar para este job. Somente arquivos CSV são suportados.

        Você pode usar vários buckets de entrada e arquivos de dados de detecção clicando em Bucket de entrada adicional e fazendo seleções adicionais.

    12. Selecione um bucket de saída do Object Storage para armazenar os arquivos de saída.

      O namespace mostra a tenancy em que o job está sendo criado.

    13. (Opcional) Digite um prefixo a ser usado para identificar facilmente os resultados.

      Por exemplo, se myModel for o prefixo, o arquivo de resultado será myModel/results-file.json.

    14. Clique em Criar job.

      O status do job assíncrono é inicialmente Aceito até que o job comece a ser executado; em seguida, ele é Em Andamento. Quando o job terminar, o status será alterado para Bem-sucedido. O tempo necessário para executar o job depende do tamanho dos conjuntos de dados de detecção.

    15. Clique no job assíncrono concluído para exibir seus detalhes e revisar os resultados do job.

      O arquivo de resultados da detecção de anomalias é salvo em uma pasta separada no bucket de saída do Object Storage selecionado. O nome do arquivo usa a convenção de nomenclatura <model-OCID>/<output_bucket_name>.

      • <model-OCID> é o OCID do modelo do serviço Anomaly Detection.

      • <output_bucket_name> é o nome do bucket do serviço Object Storage.

      • O nome do arquivo de resultados da detecção de anomalias é igual ao nome do arquivo do conjunto de dados de detecção com o sufixo -results.

  • Recomendamos essa abordagem quando você deseja detectar anomalias e obter resultados de grandes conjuntos de dados.

    1. Faça download da CLI ou do SDK do OCI e configure-o(a) conforme descrito na documentação existente do OCI.
    2. Use um modelo treinado criando uma solicitação HTTP POST e faça a solicitação ao ponto final recebido na etapa anterior.
    3. Faça parse da resposta HTTP para obter os resultados a serem usados nos aplicativos.

    Exemplo de Chamadas de API

    Use os seguintes comandos do serviço Anomaly Detection e parâmetros necessários para ajudá-lo a detectar e obter resultados:

    1. Obtenha o modelo:

      https://anomalydetection.aiservice.us-phoenix-1.oci.oraclecloud.com/20210101/models/{ModelId}
       Method: GET
       Body:
    2. Detecte de forma assíncrona com dados:

      Endpoint: https://anomalydetection.aiservice.us-phoenix-1.oci.oraclecloud.com/20210101/detectAnomalyJobs
      {
        "compartmentId": "ocid1.compartment.oc1..aaaaaaaaaqf4b7xq6kxrrb…..rcmjpbdfmcjmzdufz6sy52pra",
        "description": Ashburn data center,
        "displayName": Ashburn data center,
        "modelId": "ocid1.aianomalydetectionmodel.oc1.iad.amaaaaaaor7l3jia2q565gumqsmurg3anj6a6xad4e5talry7ynqivboyh5a",
        "inputDetails": {
            "inputType": "INLINE",
      "signalNames":["sensor1","sensor2","sensor3","sensor4","sensor5","sensor6","sensor7","sensor8","sensor9","sensor10"],
          "data": [
              {
                  "timestamp": "2020-07-13T18:54:46.000Z",
                  "values": [ 0.2282, -0.7092, -1.2002, -0.7971, 2.0967, -0.7369, -0.5242, -0.3949, -0.6563, -0.9429 ]
              },
              {
                  "timestamp": "2020-07-13T18:55:46.000Z",
                  "values": [ -0.4359, -0.153, -1.3603, -1.4552, 1.3512, -0.3683, -0.7328, -0.5223, -2.1182, -0.6212 ]
              },
              {
                  "timestamp": "2020-07-13T18:56:46.000Z",
                  "values": [ -0.7482, -0.7112, -2.0408, -0.8236, 1.9157, -0.9435, -1.1136, 0.1365, -0.8872, -0.7323 ]
              },
              {
                  "timestamp": "2020-07-13T18:57:46.000Z",
                  "values": [ 0.2655, -1.23, -0.6551, -0.6294, 1.4812, -1.1023, -1.3472, -1.18, -1.4353, -1.1863 ]
              },
              {
                  "timestamp": "2020-07-13T18:58:46.000Z",
                  "values": [ -0.6848, -1.6165, -1.4954, -1.2594, 2.5512, -0.6693, -0.5837, -1.2494, -0.2837, -0.7751 ]
              }
          ]
        },
        "outputDetails": {
          "outputType": "OBJECT_STORAGE",
          "namespaceName": "ax3dvjxgkemg",
          "bucketName": "output-bucket",
          "prefix": "test-prefix"
        }
      }
  • Recomendamos essa abordagem quando você deseja detectar anomalias e obter resultados de grandes conjuntos de dados.

    1. Faça download da CLI ou do SDK do OCI e configure-o(a) conforme descrito na documentação existente do OCI.
    2. Use um modelo treinado criando uma solicitação HTTP POST e faça a solicitação ao ponto final recebido na etapa anterior.
    3. Faça parse da resposta HTTP para obter os resultados a serem usados nos aplicativos.

    Exemplo de Chamadas de API

    Use a operação DetectAnomalies para ajudar a detectar e obter resultados.

    1. Obtenha o modelo:

      https://anomalydetection.aiservice.us-phoenix-1.oci.oraclecloud.com/20210101/models/{ModelId}
       Method: GET
       Body:
    2. Detecte de forma assíncrona com dados:

      Endpoint: https://anomalydetection.aiservice.us-phoenix-1.oci.oraclecloud.com/20210101/detectAnomalyJobs
      {
        "compartmentId": "ocid1.compartment.oc1..aaaaaaaaaqf4b7xq6kxrrb…..rcmjpbdfmcjmzdufz6sy52pra",
        "description": Ashburn data center,
        "displayName": Ashburn data center,
        "modelId": "ocid1.aianomalydetectionmodel.oc1.iad.amaaaaaaor7l3jia2q565gumqsmurg3anj6a6xad4e5talry7ynqivboyh5a",
        "inputDetails": {
            "inputType": "INLINE",
      "signalNames":["sensor1","sensor2","sensor3","sensor4","sensor5","sensor6","sensor7","sensor8","sensor9","sensor10"],
          "data": [
              {
                  "timestamp": "2020-07-13T18:54:46.000Z",
                  "values": [ 0.2282, -0.7092, -1.2002, -0.7971, 2.0967, -0.7369, -0.5242, -0.3949, -0.6563, -0.9429 ]
              },
              {
                  "timestamp": "2020-07-13T18:55:46.000Z",
                  "values": [ -0.4359, -0.153, -1.3603, -1.4552, 1.3512, -0.3683, -0.7328, -0.5223, -2.1182, -0.6212 ]
              },
              {
                  "timestamp": "2020-07-13T18:56:46.000Z",
                  "values": [ -0.7482, -0.7112, -2.0408, -0.8236, 1.9157, -0.9435, -1.1136, 0.1365, -0.8872, -0.7323 ]
              },
              {
                  "timestamp": "2020-07-13T18:57:46.000Z",
                  "values": [ 0.2655, -1.23, -0.6551, -0.6294, 1.4812, -1.1023, -1.3472, -1.18, -1.4353, -1.1863 ]
              },
              {
                  "timestamp": "2020-07-13T18:58:46.000Z",
                  "values": [ -0.6848, -1.6165, -1.4954, -1.2594, 2.5512, -0.6693, -0.5837, -1.2494, -0.2837, -0.7751 ]
              }
          ]
        },
        "outputDetails": {
          "outputType": "OBJECT_STORAGE",
          "namespaceName": "ax3dvjxgkemg",
          "bucketName": "output-bucket",
          "prefix": "test-prefix"
        }
      }