1. Descripción general
En este lab, aprenderás a compilar un modelo de previsión de series temporales con TensorFlow y, luego, a implementarlos con Vertex AI.
Qué aprenderá
Aprenderás a hacer lo siguiente:
- Transformar datos para que puedan usarse en un modelo de AA
- Visualiza y explora datos
- Usar BigQuery ML para crear un modelo de previsión de series temporales
- Crear un modelo de previsión de series temporales con TensorFlow a través de arquitecturas de LSTM y CNN
2. Introducción a la previsión de series temporales
El enfoque de este codelab es cómo aplicar técnicas de previsión de series temporales con Google Cloud Platform. No es un curso de previsión general 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 el tiempo y, al menos, una variable que depende del tiempo.
Componentes
Una serie temporal se puede descomponer en sus componentes:
- Tendencia: Se mueve hacia arriba o hacia abajo en un patrón razonablemente predecible.
- De temporada: Se repite durante un período específico, como un día, una semana, un mes, una temporada, etcétera.
- Aleatoria: Fluctuaciones residuales
Puede haber varios niveles de estacionalidad. Por ejemplo, un centro de atención telefónica puede ver un patrón en el volumen de llamadas en ciertos días de la semana y en determinados meses. El residual podría explicarse con otras variables además del tiempo.
Estacionaridad
Para obtener los mejores resultados en la previsión, los datos de las series temporales deben ser fijos, y las propiedades estadísticas, como la media y la varianza, son constantes en el tiempo. Técnicas como la diferenciación y la detendencia pueden aplicarse 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.
Usa datos de series temporales para el aprendizaje automático
Para usar datos de series temporales en un problema de aprendizaje automático, se deben transformar de modo que los valores anteriores puedan usarse 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 cubrimos algunos aspectos básicos, comencemos a explorar los datos y la previsión.
3. Configura tu entorno de notebook
Ahora que ya hicimos una breve introducción a los datos, configuremos el entorno de desarrollo de nuestro modelo.
Paso 1: Habilitar las API
El conector de BigQuery usa la API de almacenamiento de BigQuery. Busca la API de BigQuery Storage en la consola y habilítala si está inhabilitada actualmente.
Paso 2: Crea un notebook de Vertex AI Workbench
Navega hasta la sección Vertex AI Workbench de la consola de Cloud y haz clic en Nuevo notebook. Luego, selecciona el tipo de notebook TensorFlow Enterprise 2.x más reciente sin GPU:
Usa las opciones predeterminadas y, luego, 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 -> Nuevo -> Terminal.
Desde allí, clona el material de origen 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:
- Crear una consulta que agrupe los datos en una serie temporal
- Rellenar valores faltantes
- Visualiza datos
- Desglose de series temporales en componentes de tendencias y de temporada
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, ejecútalas una por una.
Paso 3
En esta sección, importaste los datos y visualizaste varias dimensiones de ellos. Ahora que tienes un panorama más claro de los datos, podrás proceder al modelado de aprendizaje automático con estos datos.
5. Crea un modelo con la previsión de series temporales de BigQuery
En esta sección, deberás hacer lo siguiente:
- Importa los datos de entrada de las series temporales a una tabla de BigQuery
- Crear un modelo de serie temporal con la sintaxis de BQML
- Aprende a evaluar la exactitud y los parámetros de tu modelo
- Realiza previsiones con tu modelo
Paso 1
Crearemos una tabla de BigQuery con los datos sin procesar del archivo CSV que acabamos de explorar. Comencemos por descargar el archivo CSV del entorno del notebook.
Desde 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.
Busca o usa este vínculo para navegar a BigQuery en la consola:
Puedes agregar la tabla a un conjunto de datos nuevo o existente, que agrupa las 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 el conjunto de datos seleccionado, selecciona Crear tabla en la esquina inferior derecha para crear una tabla nueva.
Para las opciones de creación de tablas, selecciona lo siguiente:
- Crear tabla desde: Subir
- Seleccionar archivo: cta_ridership.csv
- Nombre de la tabla: cta_ridership
- Esquema: Marca la casilla para que se detecte automáticamente Esquema y parámetros de entrada
Paso 3
Llegó el momento de crear el 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 si es necesario por el nombre de tu conjunto de datos en ambos lugares:
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`
Repasemos los elementos clave de la sintaxis para comprenderlos:
| Esta sentencia crea el modelo. Hay variantes de esta sentencia, p.ej., |
| Aquí definimos las opciones del modelo, y la primera 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 festivos en el modelo. Dado que la exploración de datos del paso anterior mostró que la cantidad de pasajeros era menor durante los días festivos, y los datos provienen de Chicago, Illinois, 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 otras opciones que puedes agregar a la consulta, como definir una columna si tienes varias series temporales o elegir si descubrir automáticamente los parámetros del modelo ARIMA. Puedes encontrar más detalles en la referencia de sintaxis de la sentencia CREATE MODEL para modelos de serie temporal.
Paso 4
Averigüemos más sobre nuestro modelo. Una vez finalizado el entrenamiento, ejecutemos otra consulta, reemplazando 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 muestran en orden ascendente de 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 modelo principal incluye la estacionalidad semanal y anual.
Paso 5
Ahora, ya está todo listo para realizar previsiones con la función ML.FORECAST
.
Pega y 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é 7 días con nuestro modelo! Podemos ver las siete filas que se devuelven a continuación. La previsión también incluye un intervalo de confianza, que tiene un valor predeterminado de 0.95, pero se puede configurar en la consulta.
Excelente trabajo. Creamos un modelo de serie temporal con solo algunas consultas en BQML.
6. Crea un modelo de previsión personalizado
En esta sección, deberás hacer lo siguiente:
- Quitar los valores atípicos de los datos
- Realiza previsiones de varios pasos
- Incluye atributos adicionales en un modelo de series temporales
- Aprende sobre arquitecturas de redes neuronales para la previsión de series temporales: LSTM y CNN
- Obtén información sobre 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, ejecútalas una por una.
Paso 3
En el notebook, exploraste varias arquitecturas de modelos: LSTM, CNN y modelos estadísticos. Para cada modelo, puedes ver su rendimiento con respecto a los datos de prueba:
7. Entrenamiento y predicciones en la nube
En esta sección, deberás hacer lo siguiente:
- Preparar datos y modelos para el entrenamiento en la nube
- Entrena tu modelo y supervisa el progreso del trabajo con AI Platform Training
- Realiza predicciones mediante el modelo con AI Platform Prediction
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, ejecútalas una por una.
Paso 3
En la sección anterior, entrenamos un modelo y lo predijimos con él, todo dentro de un notebook de Workbench. En esta sección, demostramos cómo usar el SDK de Python para Vertex AI desde tu notebook a fin de 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 sugerencias (si lo deseas).
El objetivo es predecir 311 solicitudes de servicio de la ciudad de Nueva York. Estas solicitudes que no son de emergencia incluyen reclamos por ruido, problemas de semáforos, etcétera.
Paso 1
Comencemos por entender el conjunto de datos.
Primero, accede al conjunto de datos Solicitudes de servicios del servicio 311 de la ciudad de Nueva York.
Para conocer mejor los datos, prueba un par de las consultas de muestra enumeradas en la descripción del conjunto de datos:
- ¿Cuál es la cantidad de 311 solicitudes relacionadas con camiones de helado?
- ¿Qué días se obtienen la mayor cantidad de solicitudes 311 relacionadas con partes?
En la IU de BigQuery, selecciona Crear consulta para ver cómo acceder al conjunto de datos. Ten en cuenta que la sentencia de selección consulta desde bigquery-public-data.new_york_311.311_service_requests
.
Paso 2
Estamos listos para empezar. En esta sección, realiza modificaciones en el notebook Explore and Visualize para trabajar con estos datos.
Sugerencias
- Duplica el notebook
01-explore.ipynb
y 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 los recuentos 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 objetivo 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.
- Exportar los datos usando:
df.to_csv(YOUR-EXPORT-FILENAME, index=False)
Paso 3
Ahora, creemos un modelo de series temporales con los datos mensuales.
Sugerencias:
- Duplica el notebook
02-model.ipynb
y comienza a trabajar en él. - Actualiza los parámetros del conjunto de datos:
- Actualiza los parámetros
target_col
yts_col
para que coincidan con tu nuevo conjunto de datos. - Actualiza los parámetros del modelo:
- Frecuencia a mensual (el código para comenzar el mes es "MS")
- Pasos de entrada: 12 (la ventana de visualización es de 12 meses)
- Pasos de salida: 3 (predecir dentro de 3 meses)
- 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 de mes, el total mensual para el último mes será mucho más bajo de lo esperado. Por lo tanto, a los fines de este lab, quitemos el último mes del conjunto de datos con
df = df[:-1]
. - No parecen valores atípicos obvios en los datos, así que omítelas o coméntalas.
- Ajusta las unidades LSTM, los filtros de CNN y el tamaño del kernel para este nuevo modelo.
9. Limpieza
Si quieres seguir utilizando este bloc de notas, te recomendamos que lo desactives cuando no lo utilices. En la IU de Workbench en la consola de Cloud, selecciona el notebook y, luego, selecciona Detener:
Si quieres borrar todos los recursos que creaste en este lab, solo debes borrar 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 buckets que creaste para almacenar los recursos del modelo. (ADVERTENCIA: Solo haz esto si creaste buckets nuevos solo para este lab).