Detectar anomalias em várias séries temporais com o modelo TimesFM

Neste tutorial, você vai aprender a usar a função AI.DETECT_ANOMALIES com o modelo TimesFM integrado do BigQuery ML para detectar anomalias em dados de série temporal.

Neste tutorial, usamos dados da tabela pública bigquery-public-data.san_francisco_bikeshare.bikeshare_trips.

Objetivos

Neste tutorial, você vai aprender a usar a função AI.DETECT_ANOMALIES com o modelo TimesFM integrado para detectar anomalias em viagens de aluguel de bicicletas. A primeira seção mostra como detectar anomalias e visualizar resultados para uma única série temporal. A segunda seção aborda como detectar anomalias em várias série temporal.

Custos

Neste tutorial, usamos componentes faturáveis do Cloud de Confiance by S3NS, incluindo:

  • BigQuery
  • BigQuery ML

Para mais informações sobre os custos do BigQuery, consulte a página de preços.

Para mais informações sobre os custos do BigQuery ML, consulte os preços do BigQuery ML.

Antes de começar

  1. In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Cloud de Confiance project.

  3. O BigQuery é ativado automaticamente em novos projetos. Para ativar o BigQuery em um projeto preexistente,

    Ative a API BigQuery, se ainda não tiver feito isso.

    Funções necessárias para ativar APIs

    Para ativar APIs, você precisa da permissão serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão com o papel de Proprietário (roles/owner). Caso contrário, é possível receber essa permissão com o papel de Administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.

    Ativar a API

Detectar anomalias em uma única série temporal de viagens de aluguel de bicicletas

Detecte anomalias em dados de série temporal usando a função AI.DETECT_ANOMALIES.

A consulta a seguir detecta anomalias no número de viagens de aluguel de bicicletas por hora no mês de agosto de 2017, com base nos dados históricos do mês anterior. O argumento anomaly_prob_threshold indica o limite para identificar uma anomalia.

Siga estas etapas para detectar anomalias com o modelo TimesFM:

  1. No console do Cloud de Confiance , acesse a página BigQuery.

    Acessar o BigQuery

  2. No editor de consultas, cole a consulta a seguir e clique em Executar. A consulta leva de 1 a 2 minutos para ser concluída:

    WITH
      bike_share_trips AS (
        SELECT
          TIMESTAMP_TRUNC(start_date, HOUR) AS trip_hour, COUNT(*) AS num_trips
        FROM `bigquery-public-data.san_francisco_bikeshare.bikeshare_trips`
        GROUP BY TIMESTAMP_TRUNC(start_date, HOUR)
      )
    SELECT *
    FROM
      AI.DETECT_ANOMALIES(
        (
          SELECT *
          FROM bike_share_trips
          WHERE trip_hour >= TIMESTAMP('2017-07-01') AND trip_hour < TIMESTAMP('2017-08-01')
        ),
        (
          SELECT *
          FROM bike_share_trips
          WHERE trip_hour >= TIMESTAMP('2017-08-01') AND trip_hour < TIMESTAMP('2017-09-01')
        ),
        anomaly_prob_threshold => 0.95,
        timestamp_col => 'trip_hour',
        data_col => 'num_trips');

    Os resultados são semelhantes aos seguintes:

    +-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    | time_series_timestamp   | time_series_data | is_anomaly | lower_bound        | upper_bound         | anomaly_probability | ai_detect_anomalies_status|
    +-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    | 2017-08-01 00:00:00 UTC | 13.0             | false      | -1.97939332204...  | 27.604928623830...  | 0.38048622012138... |                           |
    +-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    | 2017-08-01 01:00:00 UTC | 6.0              | false      | -9.42939322810...  | 20.154928628380...  | 0.38048622012138... |                           |
    +-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    | ...                     | ...              | ...        | ...                | ...                 | ...                 | ...                       |
    +-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    
  3. Quando a consulta terminar de ser executada, clique na guia Visualização. O gráfico resultante será semelhante a este:

    Crie um gráfico com os pontos de tempo de um mês dos dados de entrada e os dados de saída da função AI.DETECT_ANOMALIES para mostrar anomalias.

    É possível identificar as anomalias em que o valor time_series_data está fora do intervalo lower_bound e upper_bound.

Detectar anomalias em várias série temporal de viagens de aluguel de bicicletas

A consulta a seguir detecta anomalias no número de viagens de aluguel de bicicletas por tipo de assinante e por hora no mês de agosto de 2017, com base nos dados históricos do mês anterior.

Siga estas etapas para detectar anomalias com o modelo TimesFM:

  1. No console do Cloud de Confiance , acesse a página BigQuery.

    Acessar o BigQuery

  2. No editor de consultas, cole a consulta a seguir e clique em Executar:

    WITH
      bike_share_trips AS (
        SELECT
          TIMESTAMP_TRUNC(start_date, HOUR) AS trip_hour, COUNT(*) AS num_trips, subscriber_type
        FROM `bigquery-public-data.san_francisco_bikeshare.bikeshare_trips`
        GROUP BY TIMESTAMP_TRUNC(start_date, HOUR), subscriber_type
      )
    SELECT *
    FROM
      AI.DETECT_ANOMALIES(
        (
          SELECT *
          FROM bike_share_trips
          WHERE trip_hour >= TIMESTAMP('2017-07-01') AND trip_hour < TIMESTAMP('2017-08-01')
        ),
        (
          SELECT *
          FROM bike_share_trips
          WHERE trip_hour >= TIMESTAMP('2017-08-01') AND trip_hour < TIMESTAMP('2017-09-01')
        ),
        anomaly_prob_threshold => 0.95,
        timestamp_col => 'trip_hour',
        data_col => 'num_trips',
        id_cols => ['subscriber_type']);

    Os resultados são semelhantes aos seguintes:

    +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    | subscriber_type | time_series_timestamp   | time_series_data | is_anomaly | lower_bound        | upper_bound         | anomaly_probability | ai_detect_anomalies_status|
    +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    | Customer        | 2017-08-01 00:00:00 UTC | 13.0             | false      | -1.97939332204...  | 27.604928623830...  | 0.38048622012138... |                           |
    +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    | Customer        | 2017-08-01 01:00:00 UTC | 3.0              | false      | -5.12345678901...  | 10.123456789012...  | 0.12345678901234... |                           |
    +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    | ...             | ...                     | ...              | ...        | ...                | ...                 | ...                 | ...                       |
    +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    | Subscriber      | 2017-08-01 00:00:00 UTC | 13.0             | false      | -1.97939332204...  | 27.604928623830...  | 0.38048622012138... |                           |
    +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    | Subscriber      | 2017-08-01 01:00:00 UTC | 3.0              | false      | -5.12345678901...  | 10.123456789012...  | 0.12345678901234... |                           |
    +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    | ...             | ...                     | ...              | ...        | ...                | ...                 | ...                 | ...                       |
    +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

Excluir o projeto

Para excluir o projeto:

  1. No console Cloud de Confiance , acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

A seguir