Prácticas recomendadas para crear datos de entrenamiento tabular

Los datos bien diseñados aumentan la calidad del modelo de aprendizaje automático resultante. Puedes usar los lineamientos de esta página para mejorar la calidad de tu modelo y tus datos de entrenamiento.

Se tratan los siguientes temas:

Prácticas recomendadas para todos los modelos de datos tabulares

Las siguientes prácticas recomendadas se aplican si creas un modelo de AutoML o un modelo de entrenamiento personalizado que usa datos tabulares.

Evita que se filtren datos

La filtración de datos se produce cuando los datos de entrenamiento incluyen información predictiva que no está disponible cuando se solicita una predicción. La filtración de datos puede hacer que tu modelo muestre excelentes métricas de evaluación, pero que tenga un bajo rendimiento en datos reales.

Por ejemplo, supongamos que deseas saber cuánto venderá tu heladería mañana. No se puede ingresar la temperatura del día en cuestión a tus datos de entrenamiento porque no sabes cuál será la temperatura (aun no ocurrió). Sin embargo, puedes usar la temperatura predicha del día anterior, que podría estar incluida en la solicitud de predicción.

La filtración de datos también puede ocurrir cuando usas los mismos datos en varias divisiones de datos. Si usas datos de series temporales, asegúrate de que los datos de la misma fecha solo se usen en una de las tres divisiones de datos.

Evitar las desviaciones entre el entrenamiento y la entrega

Las desviaciones entre el entrenamiento y la entrega se producen cuando se generan datos de entrenamiento de manera diferente a como se generan los datos que se usan para solicitar predicciones.

Por ejemplo, usar valores promedio y promediar a más de 10 días a los fines del entrenamiento, pero cuando se solicita una predicción, promediar a más del último mes.

En general, a fin de evitar desviaciones entre el entrenamiento y la entrega, debes revisar cualquier diferencia entre la forma en que generas tus datos de entrenamiento y tus datos de entrega (los datos que usas para generar predicciones).

Distribución de datos y desviaciones entre el entrenamiento y la entrega

Las desviaciones entre el entrenamiento y la entrega también se pueden generar en función de la distribución de datos en las divisiones de datos de entrenamiento, la validación y prueba. Con frecuencia, se produce una diferencia entre la distribución de datos que verá un modelo cuando se implemente en producción, en comparación con la distribución de datos del conjunto de datos en el que se entrena. Por ejemplo, en producción, un modelo puede aplicarse a una población de usuarios muy diferente de los usados durante el entrenamiento, o el modelo puede usarse para hacer predicciones 30 días después de registrar los datos del entrenamiento finales.

Con el fin de obtener mejores resultados, asegúrate de que la distribución de las divisiones de datos usada para crear el modelo refleje con exactitud la diferencia entre los datos de entrenamiento y los datos en los que realizarás predicciones en el entorno de producción. Vertex AI produce predicciones no monótonas. Si los datos de producción se muestrean con una distribución muy diferente a los datos de entrenamiento, las predicciones no monótonas no serán muy confiables.

Además, la diferencia entre los datos de producción y entrenamiento debe reflejarse en la diferencia entre la división de datos de validación y la de datos de entrenamiento, además de entre la división de datos de prueba y la división de datos de validación.

Por ejemplo, si piensas hacer predicciones sobre el valor del ciclo de vida del usuario (LTV) durante los próximos 30 días, asegúrate de que los datos de la división de datos de validación sean de 30 días después a los datos de la división de datos de entrenamiento. Además, los datos de la división de datos de prueba deberán ser de 30 días después de la división de los datos de validación.

Del mismo modo, si quieres que tu modelo esté adaptado para poder hacer predicciones generalizadas a nuevos usuarios, asegúrate de que los datos de un usuario específico solo se encuentren en una sola división de tus datos de entrenamiento. Por ejemplo, todas las filas que pertenecen al user1 están en la división de datos de entrenamiento, todas las filas que pertenecen al user2 están en la división de datos de validación y todas las filas que pertenecen al user3 están en la división de datos de prueba.

Proporciona una señal horaria

En el caso e los modelos de clasificación y regresión, si es probable que el patrón subyacente en tus datos cambie con el tiempo (no se distribuye al azar en el tiempo), asegúrate de proporcionar esa información en Vertex AI. Puedes proporcionar una señal horaria de varias maneras:

  • Si cada fila de datos tiene una marca de tiempo, asegúrate de que la columna esté incluida, tenga un tipo de transformación de Timestamp y se configure como la columna Tiempo cuando entrenes tu modelo. Este orden se usa para dividir los datos más recientes, como los datos de prueba, y los datos más antiguos, como los datos de entrenamiento. Más información

  • Si la columna de tiempo no tiene muchos valores diferentes, debes hacer una división manual, en lugar de usar la columna de tiempo para dividir los datos. De lo contrario, es posible que no obtengas suficientes filas en cada conjunto de datos, lo que puede hacer que el entrenamiento falle.

  • Si la información de tiempo no se encuentra en una sola columna, puedes usar una división manual de datos para usar los más recientes como datos de prueba y los más antiguos como datos de entrenamiento.

Haz que la información sea explícita cuando sea necesario

Para ciertos datos elementales, puedes mejorar la calidad del modelo mediante el diseño de atributos.

Por ejemplo, si tus datos incluyen longitud y latitud, estas columnas se consideran como numéricas, sin cálculos especiales. Si la ubicación o la distancia representan un problema de señal, debes diseñar un atributo que proporcione esa información de forma explícita.

Estos son algunos tipos de datos que pueden requerir ingeniería de atributos:

  • Longitud y latitud
  • URL
  • Direcciones IP
  • Direcciones de correo electrónico
  • Números de teléfono
  • Otros códigos geográficos (por ejemplo, códigos postales)

Incluye datos calculados o agregados en una fila

Vertex AI usa solo los datos de entrada de una única fila para predecir el valor objetivo de esa fila. Si calculaste o agregaste datos de otras filas o fuentes que serán importantes a fin de determinar el valor de predicción de una fila, debes incluir esos datos en la fila de origen. Asegúrate de que la nueva columna no genere filtración de datos ni desviaciones entre el entrenamiento y la entrega.

Por ejemplo, si deseas predecir la demanda de un producto para la semana próxima, puedes mejorar la calidad de la predicción mediante la adición de columnas con los siguientes valores:

  • La cantidad total de artículos en existencia de la misma categoría que el producto.
  • El precio promedio de los artículos en existencia de la misma categoría que el producto.
  • La cantidad de días antes de un día festivo cuando se solicita la predicción.
  • Y así de forma sucesiva…

En otro ejemplo, si deseas predecir si un usuario específico comprará un producto, puedes mejorar la calidad de la predicción mediante la adición de columnas con los siguientes valores:

  • El porcentaje de conversiones histórico promedio o la tasa de clics del usuario específico.
  • La cantidad de productos que se encuentran en el carrito de compras del usuario en ese momento.

Evita sesgos

Asegúrate de que los datos de entrenamiento representen todo el universo de datos potenciales para los que harás predicciones. Por ejemplo, si tienes clientes de todo el mundo, no debes usar datos de entrenamiento de un solo país.

Prácticas recomendadas para modelos tabulares de AutoML

Las siguientes prácticas recomendadas se aplican a la creación de datos de entrenamiento tabulares para los modelos tabulares de AutoML.

Representa los valores nulos de manera adecuada

Si importas datos desde CSV, debes usar strings vacías para representar valores nulos. En BigQuery, usa el valor NULL.

Si tus datos usan números o caracteres especiales para representar valores nulos, incluido el cero, estos se interpretarán de forma errónea, lo que reduce la calidad del modelo.

Evita valores faltantes cuando sea posible

Verifica tus datos, busca valores faltantes y corrígelos si es posible. De lo contrario, puedes dejar el valor en blanco, y se tratará como un valor nulo.

Usa espacios para separar texto

Vertex AI asigna tokens a las strings de texto y puede obtener señales de entrenamiento de palabras individuales. Se usan espacios para separar palabras. Las palabras separadas por otros caracteres se tratan como una sola entidad.

Por ejemplo, si ingresas el texto “rojo/verde/azul”, no se le asignará los tokens “rojo”, “verde” ni “azul”. Si esas palabras individuales fueran importantes para entrenar el modelo, debes cambiar el texto a “rojo verde azul” antes de ingresarlo en tus datos de entrenamiento.

Asegúrate de que los atributos categóricos sean precisos y claros

Las inconsistencias de datos pueden hacer que las categorías se dividan de manera incorrecta. Por ejemplo, si tus datos incluyen “Marrón” y “marrón”, Vertex AI usa esos valores como categorías distintas, pero quizás quieras que sean la misma. Lo mismo puede pasarles a los errores ortográficos. Antes de crear tus datos de entrenamiento, asegúrate de quitar estos tipos de inconsistencias de los datos categóricos.

Ten mucho cuidado con las clases desequilibradas en el caso de los modelos de clasificación

Si tiene clases desequilibradas (un problema de clasificación muy poco común, con uno o más resultados), revisa las siguientes sugerencias.

Proporciona suficientes datos de entrenamiento para la clase minoritaria

Si tienes muy pocas filas de datos para una clase, bajará la calidad del modelo. Si es posible, debes proporcionar, al menos, 100 filas de datos para cada clase.

Considera usar una división manual

Vertex AI selecciona las filas para el conjunto de datos de prueba de forma aleatoria (pero determinista). En el caso de las clases desequilibradas, podrías obtener una pequeña cantidad de la clase minoritaria en tu conjunto de datos de prueba o, incluso, ninguna, lo que hace que el entrenamiento falle.

Si tienes clases desequilibradas, sería conveniente que asignes una división manual para asegurarte de que se incluyan suficientes filas con los resultados minoritarios en cada división.

Proporciona suficientes datos de entrenamiento

Si no proporcionas suficientes datos de entrenamiento, el modelo resultante podría tener un bajo rendimiento. Cuantas más columnas uses para entrenar tu modelo, más datos deberás proporcionar.

Tu conjunto de datos siempre debe incluir, como mínimo, 1,000 filas.

En la siguiente tabla, se proporcionan algunas heurísticas para indicar cuántos datos de entrenamiento se deben proporcionar según tu objetivo.

Objetivo Cantidad mínima de datos de entrenamiento sugeridos
Clasificación Una cantidad de filas al menos 10 veces mayor que la de las columnas.
Previsión Al menos 10 series temporales para cada columna usada a fin de entrenar el modelo.
Regresión Una cantidad de filas al menos 50 veces mayor que la de las columnas.

Deja todos los demás procesamientos previos y transformaciones a Vertex AI

A menos que se indique lo contrario más arriba, permite que Vertex AI realice la ingeniería de atributos por ti cuando entrenas un modelo de AutoML. AutoML trabaja mejor cuando tiene acceso a tus datos subyacentes. Para obtener una lista de todas las transformaciones que realiza AutoML por tipo de transformación, consulta Transformaciones de Vertex AI.

Prácticas recomendadas para modelos de previsión tabulares

Los datos de entrenamiento de los modelos de previsión tienen algunas consideraciones especiales.

Consideraciones para elegir el nivel de detalle de los datos

Cuando entrenas un modelo de previsión, debes especificar el nivel de detalle de los datos o el intervalo de tiempo que existe entre las filas de los datos de entrenamiento. Puede ser un intervalo por hora, diario, semanal, mensual o anual. Además, puede ser cada 1, 5, 10, 15 o 30 minutos.

El nivel de detalle de los datos debe ser coherente en todos los datos de entrenamiento y en todos los datos de predicción por lotes. Si especificas un nivel de detalle diario y hay un intervalo de 2 días entre dos filas de datos de entrenamiento, Vertex AI trata el día provisional como datos faltantes, lo que puede degradar el rendimiento del modelo. Cuando hay varias filas en la misma serie temporal que tienen la misma marca de tiempo (según lo determina el nivel de detalle), estas se consideran un error de validación en el momento del entrenamiento.

Por lo general, las prácticas de recopilación de datos determinan el nivel de detalle de los datos.

Cómo encontrar un valor adecuado para la ventana de contexto

Si esperas tener muchos datos de predicción que no consideren el pasado (inicios en frío), comienza por configurar la ventana de contexto en 0. De lo contrario, una ventana de contexto con el tamaño del horizonte de previsión o un tamaño hasta 10 veces mayor que el del horizonte de previsión debería funcionar bien.

Puedes probar los siguientes pasos a fin de encontrar un buen valor para tus datos:

  1. En la primera iteración de entrenamiento, configura la ventana de contexto y el horizonte de previsión en el mismo valor y establece al menos 6 horas para el presupuesto de entrenamiento.

  2. Vuelve a entrenar el modelo con el mismo presupuesto de entrenamiento, pero asegúrate de que el tamaño del período de contexto sea 2 veces mayor que el del horizonte de previsión.

  3. Si las métricas de evaluación del segundo modelo muestran una mejora sustancial, vuelve a entrenarlo estableciendo una ventana de contexto 5 veces mayor que el horizonte de previsión. Considera aplicar un aumento proporcional al presupuesto de entrenamiento (si realizaste un entrenamiento de 10 horas en el primer paso, aumenta el presupuesto de entrenamiento a 50 horas).

  4. Continúa aumentando la ventana de contexto hasta que ya no veas métricas de evaluación mejoradas o hasta que estés satisfecho con los resultados. Vuelve al valor más bajo de la ventana de contexto con el que se generaron resultados aceptables.

Aumentar la ventana de contexto produce los siguientes efectos:

  • Aumenta el tiempo de entrenamiento.

    Con una ventana de contexto más grande, el modelo usa más datos en el entrenamiento, lo que aumenta el tiempo de entrenamiento.

  • Aumenta el historial requerido para los datos de predicción.

    Tus datos de predicción deben proporcionar todos los datos históricos que correspondan al valor de la ventana de contexto.

Prácticas recomendadas para el formato de datos

Puedes crear tus datos de entrenamiento en formato ancho o acotado. Para los modelos de regresión y clasificación, el formato ancho se usa ampliamente y puede ser más fácil de ensamblar y revisar. Para los modelos de previsión, el uso del formato acotado puede ayudarte a evitar la configuración de conexiones erróneas entre tus datos y tu objetivo (filtración de datos).

Cuando creas datos de entrenamiento para entrenar un modelo de previsión, cada fila debe representar una única observación en una sola serie temporal. Debes tener una columna que represente el identificador de serie temporal (cómo se distinguen las series temporales) y una columna que represente el valor que predecirás (tu objetivo). Todos los demás valores de la fila que se usan con el fin de entrenar el modelo deben estar presentes cuando solicitas una predicción de tu objetivo.

Considera los siguientes datos de entrenamiento de muestra (simplificados y abreviados):

Fecha Widget_1_Demand Widget_2_Demand Widget_3_Demand Promo Región
01/01/2019 112 241 0 0 CA
01/02/2019 141 219 0 1 CA
01/03/2019 149 244 0 0 CA
01/01/2019 52 0 43 0 IL
01/02/2019 81 0 26 1 IL
01/03/2019 89 0 86 0 IL

Esta tabla muestra los datos de la empresa por fecha en formato ancho, pero no se podrían usar para un modelo de previsión en su forma actual. No hay una sola columna de destino, no hay una columna de ID de serie temporal y no conocerás la demanda de los otros widgets en el momento de la predicción para ninguna fecha.

Puedes convertir esta tabla en el siguiente formato:

Fecha Producto Region_CA_Demand Region_IL_Demand Promo
01/01/2019 Widget_1 112 52 0
01/02/2019 Widget_1 141 81 1
01/03/2019 Widget_1 149 89 0
01/01/2019 Widget_2 241 0 0
01/02/2019 Widget_2 219 0 1
01/03/2019 Widget_2 244 0 0
01/01/2019 Widget_3 0 43 0
01/02/2019 Widget_3 0 26 1
01/03/2019 Widget_3 0 86 0

Ahora tenemos una posible columna de ID de serie temporal, Product. Sin embargo, este formato podría usarse solo para predecir una de las regiones, y sería necesario conocer los datos de la otra región en el momento de la predicción.

La solución es convertir a un formato acotado, de modo que cada fila represente una sola observación. Todos los datos que son independientes de las series temporales se repiten para cada fila:

Fecha Demanda ID Promo
01/01/2019 112 Widget_1_CA 0
01/02/2019 141 Widget_1_CA 1
01/03/2019 149 Widget_1_CA 0
01/01/2019 52 Widget_1_IL 0
01/02/2019 81 Widget_1_IL 1
01/03/2019 89 Widget_1_IL 0
01/01/2019 241 Widget_2_CA 0
01/02/2019 219 Widget_2_CA 1
01/03/2019 244 Widget_2_CA 0
01/01/2019 0 Widget_2_IL 0
01/02/2019 0 Widget_2_IL 1
01/03/2019 0 Widget_2_IL 0
01/01/2019 0 Widget_3_CA 0
01/02/2019 0 Widget_3_CA 1
01/03/2019 0 Widget_3_CA 0
01/01/2019 43 Widget_3_IL 0
01/02/2019 26 Widget_3_IL 1
01/03/2019 86 Widget_3_IL 0

Ahora tenemos un identificador de serie temporal (ID), una columna objetivo (Demanda) y una columna de tiempo (Fecha). Además, cada fila se basa en una sola observación, que puede usarse para predecir el valor objetivo. La columna Promo se usa como un atributo para entrenar el modelo.

En realidad, tendrás muchas más filas y muchas más columnas que en estos ejemplos. Sin embargo, debes seguir los lineamientos que se indican a continuación para estructurar los datos a fin de evitar la filtración de datos.

¿Qué sigue?