Realiza la detección de anomalías con un modelo de previsión de series temporales multivariable

Para enviar comentarios o solicitar asistencia para esta función, envía un correo electrónico a [email protected].

En este instructivo, se muestra cómo realizar las siguientes tareas:

En este instructivo, se usan las siguientes tablas del conjunto de datos públicos epa_historical_air_quality, que contiene información diaria de PM 2.5, temperatura y velocidad del viento recopilada de varias ciudades de EE.UU.:

Permisos necesarios

  • Para crear el conjunto de datos, necesitas el permiso bigquery.datasets.create de IAM.
  • Para crear el recurso de conexión, necesitas los siguientes permisos:

    • bigquery.connections.create
    • bigquery.connections.get
  • Para crear el modelo, necesitas los siguientes permisos:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.connections.delegate
  • Para ejecutar inferencias, necesitas los siguientes permisos:

    • bigquery.models.getData
    • bigquery.jobs.create

Para obtener más información sobre los roles y permisos de IAM en BigQuery, consulta Introducción a IAM.

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

  • BigQuery: se generan costos por los datos que procesas en BigQuery.

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Para obtener más información, consulte los Precios de BigQuery.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. Habilita la API de BigQuery.

    Habilita la API

  5. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  6. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  7. Habilita la API de BigQuery.

    Habilita la API

Crea un conjunto de datos

Crea un conjunto de datos de BigQuery para almacenar tu modelo de AA:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a la página de BigQuery

  2. En el panel Explorador, haz clic en el nombre de tu proyecto.

  3. Haz clic en Ver acciones > Crear conjunto de datos.

    Crea un conjunto de datos.

  4. En la página Crear conjunto de datos, haz lo siguiente:

    • En ID del conjunto de datos, ingresa bqml_tutorial.

    • En Tipo de ubicación, selecciona Multirregión y, luego, EE.UU. (varias regiones en Estados Unidos).

      Los conjuntos de datos públicos se almacenan en la multirregión US. Para que sea más simple, almacena tu conjunto de datos en la misma ubicación.

    • Deja la configuración predeterminada restante como está y haz clic en Crear conjunto de datos.

      Página Crear un conjunto de datos

Prepara los datos de entrenamiento

Los datos de PM2.5, temperatura y velocidad del viento están en tablas separadas. Crea la tabla bqml_tutorial.seattle_air_quality_daily de los datos de entrenamiento mediante la combinación de los datos de estas tablas públicas. bqml_tutorial.seattle_air_quality_daily contiene las columnas siguientes:

  • date: la fecha de la observación
  • PM2.5: el valor promedio de PM2.5 de cada día.
  • wind_speed: la velocidad del viento promedio de cada día
  • temperature: la temperatura más alta de cada día

La nueva tabla contiene datos diarios del 11 de agosto de 2009 al 31 de enero de 2022.

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel del editor de SQL, ejecuta la siguiente instrucción de SQL:

    CREATE TABLE `bqml_tutorial.seattle_air_quality_daily`
    AS
    WITH
      pm25_daily AS (
        SELECT
          avg(arithmetic_mean) AS pm25, date_local AS date
        FROM
          `bigquery-public-data.epa_historical_air_quality.pm25_nonfrm_daily_summary`
        WHERE
          city_name = 'Seattle'
          AND parameter_name = 'Acceptable PM2.5 AQI & Speciation Mass'
        GROUP BY date_local
      ),
      wind_speed_daily AS (
        SELECT
          avg(arithmetic_mean) AS wind_speed, date_local AS date
        FROM
          `bigquery-public-data.epa_historical_air_quality.wind_daily_summary`
        WHERE
          city_name = 'Seattle' AND parameter_name = 'Wind Speed - Resultant'
        GROUP BY date_local
      ),
      temperature_daily AS (
        SELECT
          avg(first_max_value) AS temperature, date_local AS date
        FROM
          `bigquery-public-data.epa_historical_air_quality.temperature_daily_summary`
        WHERE
          city_name = 'Seattle' AND parameter_name = 'Outdoor Temperature'
        GROUP BY date_local
      )
    SELECT
      pm25_daily.date AS date, pm25, wind_speed, temperature
    FROM pm25_daily
    JOIN wind_speed_daily USING (date)
    JOIN temperature_daily USING (date)
    

Crea el modelo

Crea un modelo de serie temporal multivariable con los datos de bqml_tutorial.seattle_air_quality_daily como datos de entrenamiento.

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel del editor de SQL, ejecuta la siguiente instrucción de SQL:

    CREATE OR REPLACE MODEL `bqml_tutorial.arimax_model`
      OPTIONS (
        model_type = 'ARIMA_PLUS_XREG',
        auto_arima=TRUE,
        time_series_data_col = 'temperature',
        time_series_timestamp_col = 'date'
        )
    AS
    SELECT
      *
    FROM
      `bqml_tutorial.seattle_air_quality_daily`;
    

    La consulta tarda varios segundos en completarse, después de eso, el modelo arimax_model aparece en el conjunto de datos bqml_tutorial en el panel Explorador.

    Debido a que la consulta usa una declaración CREATE MODEL para crear un modelo, no hay resultados de consultas.

Realiza la detección de anomalías en datos históricos

Ejecuta la detección de anomalías en los datos históricos que usaste para entrenar el modelo.

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel del editor de SQL, ejecuta la siguiente instrucción de SQL:

    SELECT
      *
    FROM
      ML.DETECT_ANOMALIES (
       MODEL `bqml_tutorial.arimax_model`,
       STRUCT(0.6 AS anomaly_prob_threshold)
      )
    ORDER BY
      date ASC;
    

    Los resultados son similares a los siguientes:

    +-------------------------+-------------+------------+--------------------+--------------------+---------------------+
    | date                    | temperature | is_anomaly | lower_bound        | upper_bound        | anomaly_probability |
    +--------------------------------------------------------------------------------------------------------------------+
    | 2009-08-11 00:00:00 UTC | 70.1        | false      | 67.65880237416745  | 72.541197625832538 | 0                   |
    +--------------------------------------------------------------------------------------------------------------------+
    | 2009-08-12 00:00:00 UTC | 73.4        | false      | 71.715603233887791 | 76.597998485552878 | 0.20589853827304627 |
    +--------------------------------------------------------------------------------------------------------------------+
    | 2009-08-13 00:00:00 UTC | 64.6        | true       | 67.741606808079425 | 72.624002059744512 | 0.94627126678202522 |
    +-------------------------+-------------+------------+--------------------+--------------------+---------------------+
    

Realiza la detección de anomalías en datos nuevos

Ejecuta la detección de anomalías en los datos históricos que usaste para entrenar el modelo.

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel del editor de SQL, ejecuta la siguiente instrucción de SQL:

    SELECT
      *
    FROM
      ML.DETECT_ANOMALIES (
       MODEL `bqml_tutorial.arimax_model`,
       STRUCT(0.6 AS anomaly_prob_threshold),
       (
         SELECT
           *
         FROM
           UNNEST(
             [
               STRUCT<date TIMESTAMP, pm25 FLOAT64, wind_speed FLOAT64, temperature FLOAT64>
               ('2023-02-01 00:00:00 UTC', 8.8166665, 1.6525, 44.0),
               ('2023-02-02 00:00:00 UTC', 11.8354165, 1.558333, 40.5),
               ('2023-02-03 00:00:00 UTC', 10.1395835, 1.6895835, 46.5),
               ('2023-02-04 00:00:00 UTC', 11.439583500000001, 2.0854165, 45.0),
               ('2023-02-05 00:00:00 UTC', 9.7208335, 1.7083335, 46.0),
               ('2023-02-06 00:00:00 UTC', 13.3020835, 2.23125, 43.5),
               ('2023-02-07 00:00:00 UTC', 5.7229165, 2.377083, 47.5),
               ('2023-02-08 00:00:00 UTC', 7.6291665, 2.24375, 44.5),
               ('2023-02-09 00:00:00 UTC', 8.5208335, 2.2541665, 40.5),
               ('2023-02-10 00:00:00 UTC', 9.9086955, 7.333335, 39.5)
             ]
           )
         )
       );
    

    Los resultados son similares a los siguientes:

    +-------------------------+-------------+------------+--------------------+--------------------+---------------------+------------+------------+
    | date                    | temperature | is_anomaly | lower_bound        | upper_bound        | anomaly_probability | pm25       | wind_speed |
    +----------------------------------------------------------------------------------------------------------------------------------------------+
    | 2023-02-01 00:00:00 UTC | 44.0        | true       | 36.917405956304407 | 41.79980120796948  | 0.890904731626234   | 8.8166665  | 1.6525     |
    +----------------------------------------------------------------------------------------------------------------------------------------------+
    | 2023-02-02 00:00:00 UTC | 40.5        | false      | 34.622436643607685 | 40.884690866417984 | 0.53985850962605064 | 11.8354165 | 1.558333   |
    +--------------------------------------------------------------------------------------------------------------------+-------------------------+
    | 2023-02-03 00:00:00 UTC | 46.5        | true       | 33.769587937313183 | 40.7478502941026   | 0.97434506593220793 | 10.1395835 | 1.6895835  |
    +-------------------------+-------------+------------+--------------------+--------------------+---------------------+-------------------------+
    

Limpia

  1. En la consola de Google Cloud, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.