1. Descripción general
En este lab, aprenderás a compilar un modelo de previsión de series temporales con TensorFlow y, luego, a implementar estos modelos con Vertex AI.
Qué aprenderá
Aprenderás a hacer lo siguiente:
- Transformar los datos para que se puedan usar en un modelo de AA
- Visualiza y explora datos
- Usa BigQuery ML para crear un modelo de previsión de series temporales
- Crea un modelo de previsión de series temporales con TensorFlow usando arquitecturas de LSTM y CNN
2. Introducción a la previsión de series temporales
El objetivo de este codelab es mostrar cómo aplicar técnicas de previsión de series temporales con Google Cloud. No es un curso general de previsión de series temporales, pero un breve recorrido por los conceptos puede ser útil para nuestros usuarios.
Datos de series temporales
Primero, ¿qué es una serie temporal? Es un conjunto de datos con datos registrados en intervalos de tiempo regulares. Un conjunto de datos de series temporales contiene tanto el tiempo como al menos una variable que depende del tiempo.

Componentes
Una serie temporal se puede descomponer en componentes:
- Tendencia: Se mueve hacia arriba o hacia abajo según un patrón razonablemente predecible.
- Temporales: Se repiten durante un período específico, como un día, una semana, un mes, una temporada, etcétera.
- Aleatorio: Fluctuaciones residuales
Puede haber varias capas de estacionalidad. Por ejemplo, un centro de atención telefónica podría observar un patrón en el volumen de llamadas en ciertos días de la semana y en determinados meses. El residuo podría explicarse con otras variables además del tiempo.

Estacionariedad
Para obtener los mejores resultados en la previsión, los datos de series temporales deben ser estacionarios, es decir, las propiedades estadísticas, como la media y la varianza, deben ser constantes a lo largo del tiempo. Se pueden aplicar técnicas como la diferenciación y la eliminación de la tendencia a los datos sin procesar para que sean más estacionarios.
Por ejemplo, el siguiente gráfico de la concentración de CO2 muestra un patrón anual repetitivo con una tendencia ascendente. ( Fuente)

Después de quitar la tendencia lineal, los datos son más adecuados para la previsión, ya que ahora tienen una media constante.

Uso de datos de series temporales para el aprendizaje automático
Para usar datos de series temporales en un problema de aprendizaje automático, es necesario transformarlos de modo que los valores anteriores se puedan usar para predecir valores futuros. En esta tabla, se muestra un ejemplo de cómo se crean las variables rezagadas para ayudar a predecir el objetivo.

Ahora que ya vimos algunos conceptos básicos, comencemos a explorar los datos y a realizar previsiones.
3. Configura tu entorno de Notebook
Ahora que ya vimos una breve introducción a los datos, configuremos nuestro entorno de desarrollo de modelos.
Paso 1: Habilitar las API
El conector de BigQuery usa la API de BigQuery Storage. Busca la API de BigQuery Storage en la consola y habilítala si está inhabilitada.

Paso 2: Crea un notebook de Vertex AI Workbench
Navega a la sección Vertex AI Workbench de la consola de Cloud y haz clic en New Notebook. Luego, selecciona el tipo de notebook TensorFlow Enterprise 2.x más reciente sin GPUs:
Usa las opciones predeterminadas y haz clic en Crear. Una vez que se crea la instancia, selecciona Abrir JupyterLab:

Luego, crea un notebook de Python 3 desde JupyterLab:

Paso 3: Descarga los materiales del lab
Crea una nueva ventana de terminal desde la interfaz de JupyterLab: File -> New -> Terminal.
Desde allí, clona el material fuente con este comando:
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
4. Explora y visualiza datos
En esta sección, deberás hacer lo siguiente:
- Crea una consulta que agrupe los datos en una serie temporal
- Completa los valores faltantes
- Visualiza datos
- Descompón las series temporales en componentes de tendencia y estacionales
Paso 1
En Vertex AI Workbench, navega a training-data-analyst/courses/ai-for-time-series/notebooks y abre 01-explore.ipynb.
Paso 2
Borra todas las celdas en el notebook (Editar > Borrar todos los resultados), cambia la configuración de región, proyecto y bucket en una de las primeras celdas y, luego, ejecuta las celdas una por una.
Paso 3
En esta sección, importaste los datos y visualizaste varias de sus dimensiones. Ahora que tienes una idea más clara de los datos, podrás proceder al modelado de aprendizaje automático con ellos.

5. Crea un modelo con la previsión de series temporales de BigQuery
En esta sección, deberás hacer lo siguiente:
- Importa tus datos de entrada de series temporales a una tabla de BigQuery
- Crea un modelo de series temporales con la sintaxis de BQML
- Aprende a evaluar los parámetros y la exactitud de tu modelo
- Realiza una previsión con tu modelo
Paso 1
Crearemos una tabla de BigQuery con los datos sin procesar del CSV que acabamos de explorar. Comencemos por descargar el archivo CSV del entorno del notebook.
En el directorio training-data-analyst/courses/ai-for-time-series/notebooks/data, haz clic con el botón derecho en cta_ridership.csv y descárgalo en tu entorno local.
Paso 2
A continuación, subiremos estos datos a una tabla de BigQuery.
Navega a BigQuery en la consola (puedes buscarlo o usar este vínculo):

Puedes agregar la tabla a un conjunto de datos nuevo o existente, que agrupa tablas relacionadas. Si aún no creaste un conjunto de datos, puedes hacer clic en tu proyecto en la esquina inferior izquierda y, luego, seleccionar Crear conjunto de datos en la esquina inferior derecha.

Elige el nombre que quieras, como demo, acepta los valores predeterminados y continúa.
Con ese conjunto de datos seleccionado, elige Crear tabla en la esquina inferior derecha para crear una tabla nueva.

En las opciones de creación de tablas, selecciona lo siguiente:
- Crear tabla desde: Subir
- Selecciona el archivo: cta_ridership.csv
- Nombre de la tabla: cta_ridership
- Esquema: Marca la casilla para detectar automáticamente Esquema y parámetros de entrada

Paso 3
Ahora es momento de crear nuestro modelo. BigQuery ML proporciona una sintaxis sencilla similar a SQL que te permite crear una amplia variedad de tipos de modelos.
En el editor de consultas, pega o escribe esta consulta y reemplaza demo por el nombre de tu conjunto de datos en ambos lugares si es necesario:
CREATE OR REPLACE MODEL
`demo.cta_ridership_model` OPTIONS(MODEL_TYPE='ARIMA',
TIME_SERIES_TIMESTAMP_COL='service_date',
TIME_SERIES_DATA_COL='total_rides',
HOLIDAY_REGION='us') AS
SELECT
service_date, total_rides
FROM
`demo.cta_ridership`
Veamos los elementos clave de la sintaxis para comprenderla:
| Esta instrucción crea el modelo. Existen variantes de esta declaración, p.ej., |
| Aquí definimos las opciones del modelo, y la primera opción es el tipo de modelo. Si seleccionas ARIMA, se creará un modelo de previsión de series temporales. |
| La columna con información de fecha y hora |
| La columna de datos |
| Este parámetro opcional nos permite incluir días feriados en el modelo. Dado que nuestra exploración de datos en el paso anterior mostró que la cantidad de pasajeros era menor en los días festivos y que los datos provienen de Chicago, IL, EE.UU., incluimos los días festivos de EE.UU. en el modelo. |
| En esta sección, se seleccionan los datos de entrada que usaremos para entrenar el modelo. |
Hay varias opciones más que puedes agregar a la consulta, como definir una columna si tienes varias series temporales o elegir si deseas descubrir automáticamente los parámetros del modelo ARIMA. Puedes encontrar más detalles en la referencia de sintaxis de la declaración CREATE MODEL para modelos de series temporales.
Paso 4
Obtengamos más información sobre nuestro modelo. Una vez que finalice el entrenamiento, ejecutemos otra consulta y reemplacemos demo si es necesario:
SELECT * FROM ML.EVALUATE(MODEL `demo.cta_ridership_model`)
Interpretemos los resultados. En cada fila, verás un modelo candidato, con sus parámetros y estadísticas de evaluación. Los resultados se devuelven en orden ascendente del AIC, o criterio de información de Akaike, que proporciona un indicador relativo de la calidad del modelo. Por lo tanto, el modelo de la primera fila tiene el AIC más bajo y se considera el mejor modelo.
Podrás ver los parámetros p, d y q del modelo ARIMA, así como la estacionalidad descubierta en el modelo. En este caso, el mejor modelo incluye la estacionalidad semanal y anual.

Paso 5
Ahora, ya podemos realizar la previsión con la función ML.FORECAST.
Pega o escribe lo siguiente (reemplaza demo si es necesario):
SELECT
*
FROM
ML.FORECAST(MODEL `demo.cta_ridership_model`,
STRUCT(7 AS horizon))
Esta consulta simplemente prevé los próximos 7 días con nuestro modelo. A continuación, podemos ver las siete filas que se devolvieron. El pronóstico también incluye un intervalo de confianza, que, de forma predeterminada, es de 0.95, pero se puede configurar en la consulta.

Excelente trabajo. Creamos un modelo de series temporales con solo algunas consultas de BQML.
6. Crea un modelo de previsión personalizado
En esta sección, deberás hacer lo siguiente:
- Quita los valores atípicos de los datos
- Realiza la previsión de varios pasos
- Incluye funciones adicionales en un modelo de series temporales
- Obtén información sobre las arquitecturas de redes neuronales para la previsión de series temporales: LSTM y CNN
- Obtén información sobre los modelos estadísticos, incluido el suavizado exponencial de Holt-Winters
- Ensamblar modelos
Paso 1
En Vertex AI Workbench, navega a training-data-analyst/courses/ai-for-time-series/notebooks y abre 02-model.ipynb.
Paso 2
Borra todas las celdas en el notebook (Editar > Borrar todos los resultados), cambia la configuración de región, proyecto y bucket en una de las primeras celdas y, luego, ejecuta las celdas una por una.
Paso 3
En el notebook, ya exploraste varias arquitecturas de modelos: LSTM, CNN y modelos estadísticos. Para cada modelo, puedes ver su rendimiento en comparación con los datos de prueba:

7. Entrena y predice en la nube
En esta sección, deberás hacer lo siguiente:
- Prepara datos y modelos para el entrenamiento en la nube
- Entrena tu modelo y supervisa el progreso del trabajo con AI Platform Training
- Realiza predicciones con el modelo usando AI Platform Predictions
Paso 1
En Vertex AI Workbench, navega a training-data-analyst/courses/ai-for-time-series/notebooks y abre 03-cloud-training.ipynb.
Paso 2
Borra todas las celdas en el notebook (Editar > Borrar todos los resultados), cambia la configuración de región, proyecto y bucket en una de las primeras celdas y, luego, ejecuta las celdas una por una.
Paso 3
En la sección anterior, entrenamos un modelo y realizamos predicciones con él, todo dentro de un notebook de Workbench. En esta sección, mostramos cómo usar el SDK de Python para Vertex AI desde tu notebook para usar los servicios de Vertex AI para el entrenamiento y la implementación.

8. Desafío
En esta sección, intentarás aplicar los conceptos que aprendiste a un nuevo conjunto de datos.
No te proporcionaremos instrucciones detalladas, solo algunas pistas (si las quieres).
El objetivo es predecir las solicitudes de servicio del 311 de la ciudad de Nueva York. Estas solicitudes no urgentes incluyen reclamos por ruido, problemas con el alumbrado público, etcétera.
Paso 1
Comencemos por comprender el conjunto de datos.
Primero, accede al conjunto de datos City of New York 311 Service Requests.
Para conocer mejor los datos, prueba algunas de las consultas de muestra que se indican en la descripción del conjunto de datos:
- ¿Cuál es la cantidad de solicitudes al 311 relacionadas con los camiones de helados?
- ¿Qué días se reciben más solicitudes al 311 relacionadas con fiestas?
En la IU de BigQuery, selecciona Crear consulta para ver cómo acceder al conjunto de datos. Ten en cuenta que la sentencia select realiza una consulta desde bigquery-public-data.new_york_311.311_service_requests.
Paso 2
Ya estamos listos para comenzar. En esta sección, modificarás el notebook Explorar y visualizar para trabajar con estos datos.
Pistas
- Duplica el notebook
01-explore.ipynby comienza a trabajar en él. - Para explorar los datos, prueba esta consulta:
from google.cloud import bigquery as bq
sql = """
SELECT * FROM `bigquery-public-data.new_york_311.311_service_requests` LIMIT 5
"""
client = bq.Client(project=PROJECT)
df = client.query(sql).to_dataframe()
df.head()
- Para obtener el recuento de incidentes por mes, usa esta consulta:
SELECT
COUNT(unique_key) as y,
DATE_TRUNC(DATE(created_date), month) as ds
FROM `bigquery-public-data.new_york_311.311_service_requests`
GROUP by ds ORDER BY ds asc
- Actualiza las variables de columna en la sección de constantes. En la consulta anterior, la columna de destino es y y la columna de fecha es ds. No hay funciones adicionales.
- Considera cambiar el nombre del archivo en el que exportarás los datos para el próximo lab.
- Exporta los datos con el siguiente comando:
df.to_csv(YOUR-EXPORT-FILENAME, index=False)
Paso 3
Ahora crearemos un modelo de series temporales con los datos mensuales.
Sugerencias:
- Duplica el notebook
02-model.ipynby comienza a trabajar en él. - Actualiza los parámetros del conjunto de datos:
- Actualiza los parámetros
target_colyts_colpara que coincidan con tu nuevo conjunto de datos. - Actualiza los parámetros del modelo:
- Frecuencia mensual (el código para el inicio del mes es “MS”)
- Pasos de entrada: 12 (la ventana de visualización es de 12 meses)
- Pasos de salida: 3 (predice 3 meses hacia adelante)
- Temporadas: 12 (la estacionalidad es de 12 meses)
- Cambia el nombre del archivo de entrada si lo cambiaste en el notebook anterior.
- Si ejecutas la consulta a mitad del mes, el total mensual del mes final será mucho más bajo de lo esperado. Por lo tanto, para los fines de este lab, quitemos el mes final del conjunto de datos con el siguiente comando:
df = df[:-1] - No parece haber valores atípicos evidentes en los datos, por lo que puedes omitir o comentar esas celdas.
- Ajusta las unidades de LSTM y los filtros y el tamaño del kernel de CNN para este nuevo modelo.
9. Limpieza
Si quieres seguir usando este notebook, te recomendamos que lo desactives cuando no lo uses. En la IU de Workbench de la consola de Cloud, selecciona el notebook y, luego, haz clic en Detener:

Si quieres borrar todos los recursos que creaste en este lab, simplemente borra el notebook de Workbench en lugar de detenerlo.
En el menú de navegación de la consola de Cloud, navega a Almacenamiento y borra los dos buckets que creaste para almacenar los recursos del modelo (ADVERTENCIA: Solo haz esto si creaste buckets nuevos solo para este lab).
