Gmania: Inteligencia Artificial en Google

Detectar Anomalías con BigQuery ML


Listen Later

Te encuentras con un problema recurrente: necesitas detectar patrones inusuales o picos inesperados en tus datos de series temporales. Quizás son las ventas diarias de tu plataforma de e-commerce, el tráfico web de tu aplicación, o incluso el rendimiento de tus sensores IoT. La frustración surge cuando te das cuenta de que la detección de anomalías suele requerir un conocimiento profundo de Machine Learning, la preparación de modelos complejos, el entrenamiento con datos etiquetados, y luego la integración de esos modelos en tus flujos de trabajo de datos. Esto se traduce en ciclos de desarrollo largos, dependencias de equipos especializados y una barrera de entrada significativa para obtener *insights* rápidos. Quieres una forma sencilla, directa y escalable de identificar esos "puntos calientes" en tus datos sin tener que convertirte en un científico de datos a tiempo completo. La necesidad es clara: una solución que te permita actuar rápidamente sobre desviaciones críticas, sin la fricción de una implementación ML tradicional.



La Herramienta

La solución a esta necesidad la encontramos en BigQuery ML, una capacidad integral dentro de Google BigQuery que extiende el poder del Machine Learning directamente a tu almacén de datos. BigQuery, como ya sabes, es el servicio de almacén de datos empresarial, sin servidor y totalmente administrado de Google Cloud, diseñado para el análisis de petabytes de datos con una velocidad y eficiencia impresionantes. Lo que lo hace particularmente potente para el caso que nos ocupa es su módulo de Machine Learning. BigQuery ML permite a los analistas de datos, que ya están familiarizados con SQL, crear y ejecutar modelos de Machine Learning utilizando comandos SQL estándar. Esto elimina la necesidad de mover datos a otras herramientas, aprender lenguajes de programación complejos como Python o R, o gestionar la infraestructura subyacente de ML. Con BigQuery ML, el ciclo completo, desde la preparación de datos hasta el entrenamiento del modelo y la inferencia, se realiza *dentro* del entorno de BigQuery, utilizando la potencia computacional distribuida que ya conoces. Es la democratización del Machine Learning, llevándolo a la capa de datos donde ya resides.



El Truco

El truco que te permitirá detectar anomalías en series temporales de manera instantánea y sin entrenar un modelo explícitamente es la función `ML.DETECT_ANOMALIES`. Esta es una de esas joyas ocultas que transforman la forma en que interactúas con tus datos. No tienes que hacer clic en una interfaz compleja ni configurar un entorno de ML. Simplemente, la invocas directamente en tu consulta SQL.

**¿Cómo funciona?**

`ML.DETECT_ANOMALIES` es una función de tabla que toma tu serie temporal como entrada y aplica un algoritmo de detección de anomalías preconfigurado y optimizado para series temporales. Internamente, utiliza técnicas avanzadas de descomposición de series temporales para separar los datos en componentes de tendencia, estacionalidad y residuo. Una vez que ha aprendido estos patrones normales, identifica los puntos de datos que se desvían significativamente de lo esperado, marcándolos como anomalías. Lo mejor de todo es que este proceso de "aprendizaje" y detección ocurre en tiempo real, cada vez que ejecutas la consulta, sin que tú tengas que definir un modelo `CREATE MODEL` explícitamente. Es Machine Learning bajo demanda, encapsulado en una función SQL.

**Paso a paso exacto para usarlo:**

1. **Identifica tu tabla de datos:** Necesitas una tabla en BigQuery que contenga tu serie temporal. Esta tabla debe tener al menos dos columnas clave:
* Una columna de tipo `DATE`, `DATETIME`, `TIMESTAMP` o `INT64` que represente el tiempo (tu serie temporal).
* Una columna numérica (por ejemplo, `INT64`, `FLOAT64`) que contenga el valor de la métrica que quieres monitorear (por ejemplo, ventas, tráfico, errores).

2. **Escribe tu consulta SQL:** La sintaxis básica es sorprendentemente sencilla:

```sql
SELECT *
FROM ML.DETECT_ANOMALIES(
TABLE `tu_proyecto.tu_dataset.tu_tabla_de_series_temporales`,
'nombre_columna_tiempo',
'nombre_columna_valor'
)
```

* `tu_proyecto.tu_dataset.tu_tabla_de_series_temporales`: Reemplaza esto con la ruta completa de tu tabla en BigQuery.
* `'nombre_columna_tiempo'`: El nombre de la columna que contiene la marca de tiempo o fecha de tu serie.
* `'nombre_columna_valor'`: El nombre de la columna numérica que contiene los valores que deseas analizar.

3. **Interpreta los resultados:** La función `ML.DETECT_ANOMALIES` devuelve una tabla con varias columnas útiles, además de las columnas originales de tu serie temporal:
* `is_anomaly`: Un valor booleano (`TRUE` o `FALSE`) que indica si el punto de datos fue detectado como una anomalía.
* `anomaly_score`: Un valor numérico que representa la "gravedad" de la anomalía. Cuanto mayor sea este valor (en valor absoluto), más anómalo es el punto.
* `expected_value`: El valor que el algoritmo esperaba para ese punto de tiempo, basado en la tendencia y estacionalidad aprendidas.
* `lower_bound` y `upper_bound`: El rango dentro del cual se esperaba que cayera el valor. Si el valor real está fuera de este rango, es un fuerte candidato a anomalía.

**Parámetros opcionales clave:**

Puedes refinar la detección de anomalías añadiendo parámetros opcionales después de las columnas de tiempo y valor:

* `horizon`: Define cuántos puntos de tiempo futuros (o pasados, si usas `include_previous_points`) quieres considerar para la detección. Por defecto es 1.
* `confidence_level`: Un valor entre 0.0 y 1.0 (por ejemplo, 0.95 para un 95% de confianza). Determina la sensibilidad del modelo. Un nivel de confianza más alto hace que el modelo sea más estricto y detecte menos anomalías (solo las más extremas).
* `include_previous_points`: Un booleano (`TRUE` o `FALSE`). Si es `TRUE`, la función también devuelve las predicciones y los límites para los puntos de datos históricos, no solo para el último punto o los puntos del `horizon`. Esto es útil para visualizar cómo el modelo habría detectado anomalías en el pasado.

Por ejemplo, si quisieras un 99% de confianza para detectar anomalías en los últimos 7 días:

```sql
SELECT *
FROM ML.DETECT_ANOMALIES(
TABLE `tu_proyecto.tu_dataset.tu_tabla_de_series_temporales`,
'nombre_columna_tiempo',
'nombre_columna_valor',
STRUCT(7 AS horizon, 0.99 AS confidence_level)
)
```

Este truco te permite integrar la detección de anomalías directamente en tus paneles de control, tus alertas o tus reportes diarios, sin la sobrecarga de un proyecto de Machine Learning completo.



Ejemplo Real

Imagina que eres el analista de datos de una gran empresa de comercio electrónico y necesitas monitorear el tráfico diario de usuarios en tu sitio web. Un pico o una caída inesperada en el número de visitas podría indicar desde una campaña de marketing exitosa o fallida, hasta un problema técnico o un ataque DDoS. Quieres una alerta temprana sin tener que revisar gráficos manualmente todos los días.

Tienes una tabla en BigQuery llamada `project.dataset.daily_website_traffic` con dos columnas relevantes: `event_date` (tipo `DATE`) y `page_views` (tipo `INT64`).

Aquí te muestro cómo usarías `ML.DETECT_ANOMALIES` para identificar esos puntos anómalos:

```sql
SELECT
event_date,
page_views,
anomalies.is_anomaly,
anomalies.anomaly_score,
anomalies.expected_value,
anomalies.lower_bound,
anomalies.upper_bound
FROM
ML.DETECT_ANOMALIES(
TABLE `project.dataset.daily_website_traffic`,
'event_date',
'page_views',
STRUCT(0.99 AS confidence_level, TRUE AS include_previous_points)
) AS anomalies
WHERE
anomalies.is_anomaly IS TRUE -- Filtrar solo las anomalías detectadas
ORDER BY
event_date DESC;
```

**Desglose del ejemplo:**

* **`TABLE project.dataset.daily_website_traffic`**: Especifica la tabla de origen.
* **`'event_date', 'page_views'`**: Indica que `event_date` es la columna de tiempo y `page_views` es la métrica a analizar.
* **`STRUCT(0.99 AS confidence_level, TRUE AS include_previous_points)`**: Aquí estamos diciendo que queremos una detección de anomalías con un nivel de confianza del 99% (lo que significa que solo los valores muy atípicos serán marcados como anomalías) y que queremos ver los resultados de detección para *todos* los puntos de datos históricos, no solo el más reciente.
* **`AS anomalies`**: Alias para la tabla de resultados de la función.
* **`WHERE anomalies.is_anomaly IS TRUE`**: Esta es una cláusula crucial. Te permite filtrar la salida para mostrar *solo* los puntos de datos que `ML.DETECT_ANOMALIES` ha marcado como anómalos. De esta manera, no te ahogas en datos normales y te centras directamente en lo que importa.
* **`ORDER BY event_date DESC`**: Ordena los resultados para ver las anomalías más recientes primero.

**¿Qué obtendrías de esta consulta?**

La consulta te devolvería una lista de fechas en las que el número de `page_views` se desvió significativamente de lo que BigQuery ML esperaba. Para cada anomalía, verías:

* La fecha (`event_date`) y el número real de visitas (`page_views`).
* `is_anomaly`: Sería `TRUE` para todos los registros en la salida filtrada.
* `anomaly_score`: Un número que te diría cuán "extraña" fue la desviación. Un `anomaly_score` positivo alto indicaría un pico inesperado, mientras que un negativo alto (en valor absoluto) señalaría una caída inesperada.
* `expected_value`: El número de visitas que el modelo predijo para ese día, basándose en la tendencia y estacionalidad históricas.
* `lower_bound` y `upper_bound`: El rango de visitas que el modelo consideraría "normal" para ese día. Si `page_views` está fuera de este rango, es una anomalía.

Por ejemplo, si un día ves un `page_views` de 500,000, un `expected_value` de 100,000, y un `lower_bound` de 80,000 y `upper_bound` de 120,000, sabrías de inmediato que hubo un pico masivo e inusual. Esto podría llevarte a investigar si una campaña viral se activó, si hubo un error en la medición o si se produjo un evento externo.

Este caso de uso es replicable para cualquier métrica de serie temporal: transacciones diarias, uso de recursos en la nube, errores de aplicación, o incluso fluctuaciones de precios. La flexibilidad y la simplicidad de `ML.DETECT_ANOMALIES` lo convierten en una herramienta indispensable para la monitorización proactiva de cualquier negocio.



Conclusión rápida

La capacidad de `ML.DETECT_ANOMALIES` en BigQuery ML es un cambio de juego para cualquiera que trabaje con series temporales. Elimina la barrera de entrada al Machine Learning, permitiéndote identificar desviaciones críticas en tus datos con una simple consulta SQL. Sin la necesidad de entrenar o mantener modelos complejos, obtienes *insights* accionables directamente desde tu almacén de datos. Esta función te empodera para reaccionar rápidamente a lo inesperado, optimizar operaciones y tomar decisiones informadas, todo ello mientras BigQuery gestiona la complejidad subyacente. Es la eficiencia del Machine Learning al alcance de tu SQL.

⏱️ Capítulos del episodio:
01:08 - La Herramienta
02:26 - El Truco
07:18 - Ejemplo Real
11:26 - Conclusión rápida
...more
View all episodesView all episodes
Download on the App Store

Gmania: Inteligencia Artificial en GoogleBy Gmania AI