En este instructivo, se explica cómo usar la función AI.DETECT_ANOMALIES con el modelo TimesFM integrado de BigQuery ML para detectar anomalías en los datos de series temporales.
En este instructivo, se usan datos de la tabla pública bigquery-public-data.san_francisco_bikeshare.bikeshare_trips.
Objetivos
En este instructivo, se explica cómo usar la función AI.DETECT_ANOMALIES con el modelo integrado TimesFM para detectar anomalías en los viajes de bicicletas compartidas. En la primera sección, se explica cómo detectar anomalías y visualizar los resultados para una sola serie temporal. En la segunda sección, se explica cómo detectar anomalías en varias series temporales.
Costos
En este instructivo, se usan los siguientes componentes facturables de Google Cloud:
- BigQuery
- BigQuery ML
Para obtener más información sobre los costos de BigQuery, consulta la página de precios de BigQuery.
Para obtener más información sobre los costos de BigQuery ML, consulta los precios de BigQuery ML.
Antes de comenzar
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud 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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud 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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- BigQuery se habilita automáticamente en proyectos nuevos.
Para activar BigQuery en un proyecto existente,
Habilita la API de BigQuery.
Roles necesarios para habilitar las APIs
Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (
roles/serviceusage.serviceUsageAdmin), que contiene el permisoserviceusage.services.enable. Obtén más información para otorgar roles.
Detecta anomalías en una sola serie temporal de viajes en bicicleta compartida
Detecta anomalías en los datos de series temporales con la función AI.DETECT_ANOMALIES.
La siguiente consulta detecta anomalías en la cantidad de viajes en bicicleta compartida por hora durante el mes de agosto de 2017, según los datos históricos del mes anterior. El argumento anomaly_prob_threshold indica el umbral para identificar una anomalía.
Sigue estos pasos para detectar anomalías con el modelo TimesFM:
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar. La consulta tarda entre 1 y 2 minutos en completarse:
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');
Los resultados son similares a los siguientes:
+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+ | 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... | | +-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+ | ... | ... | ... | ... | ... | ... | ... | +-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
Cuando termine de ejecutarse la consulta, haz clic en la pestaña Visualización. El gráfico resultante es similar al siguiente:
Puedes identificar las anomalías en las que el valor de
time_series_datase encuentra fuera del rango delower_boundyupper_bound.
Detecta anomalías en varias series temporales de viajes en bicicletas compartidas
La siguiente consulta detecta anomalías en la cantidad de viajes en bicicleta compartida por tipo de suscriptor y por hora para el mes de agosto de 2017, según los datos históricos del mes anterior.
Sigue estos pasos para detectar anomalías con el modelo TimesFM:
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, pega la siguiente consulta y haz clic en Ejecutar:
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']);
Los resultados son similares a los siguientes:
+-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+ | 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... | | +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+ | ... | ... | ... | ... | ... | ... | ... | ... | +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
Realiza una limpieza
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Borra tu proyecto
Para borrar el proyecto, haz lo siguiente:
- En la Google Cloud consola, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
¿Qué sigue?
- Para obtener una descripción general de BigQuery ML, consulta Introducción a la IA y el aprendizaje automático en BigQuery.