Prácticas recomendadas para crear datos de entrenamiento tabular

En esta página, se proporcionan algunos conceptos básicos a tener en cuenta cuando se recopilan datos para un conjunto de datos tabular de Vertex AI. La misma no está pensada para ser un procedimiento exhaustivo.

Algunas de estas recomendaciones se aplican si creas datos de entrenamiento tabulares para un modelo personalizado o un modelo de AutoML. Otros son específicamente para los modelos tabulares de AutoML.

Introducción

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.

Si tienes experiencia en la creación de datos de entrenamiento para modelos de aprendizaje automático y deseas entrenar un modelo de AutoML, revisa las transformaciones que aplica AutoML. Cuando entrenas un modelo de AutoML, Vertex AI realiza muchas tareas de preparación de datos por ti.

Prácticas recomendadas para la preparación 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 la pérdida de datos

La pérdida de datos se produce cuando los datos de entrenamiento incluyen información predictiva que no está disponible cuando se solicita una predicción. La pérdida 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.

Evita 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

Para los modelos de clasificación y regresión, si es probable que el patrón subyacente en los datos cambie con el tiempo (no se distribuye al azar en el tiempo), asegúrate de ingresar esa información a la IA de Vertex. 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 pérdida 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 la preparación de datos tabulares para modelos 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 los datos usan caracteres especiales o números para representar valores nulos, incluido cero, estos valores se malinterpretan, 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 cuidado adicional con clases desequilibradas para 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 debes proporcionar.

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

En la siguiente tabla, se proporciona heurística para la cantidad de datos de entrenamiento que deseas proporcionar, según tu objetivo.

Objetivo Cantidad mínima sugerida de datos de entrenamiento
Clasificación Al menos 10 veces más filas que columnas.
Previsión (vista previa) Al menos 10 series temporales para cada columna que se usa para entrenar el modelo.
Regresión Al menos, 50 veces más filas que 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 la preparación de datos de previsión

Los datos de entrenamiento de modelos de previsión (vista previa) tienen algunas consideraciones especiales.

Identificador de la serie temporal

Una de tus columnas en los datos de entrenamiento para un modelo de predicción debe especificarse como el identificador de serie temporal. Por lo general, los datos de entrenamiento de previsión incluyen varias series temporales, y el identificador le dice a Vertex AI de qué serie temporal forma parte de una observación determinada en los datos de entrenamiento. Todas las filas de una serie temporal determinada tienen el mismo valor en la columna del identificador de la serie temporal.

Algunos identificadores comunes de series temporales pueden ser el ID del producto, el ID de una tienda o una región. Cuando tienes varias series temporales en tus datos de entrenamiento, debe haber una columna específica que las diferencie.

Puedes entrenar un modelo de previsión en una sola serie temporal (en otras palabras, la columna de identificador de serie temporal contiene el mismo valor para todas las filas). Sin embargo, Vertex AI es la mejor opción para los datos de entrenamiento que contienen dos o más series temporales. A fin de obtener mejores resultados, debes tener al menos 10 series temporales para cada columna que se usa a fin de entrenar el modelo.

Consideraciones para elegir el nivel de detalle de los datos

Cuando entrenes un modelo de previsión, especificas los datos sobre la nivel de detalle o el intervalo de tiempo entre las filas de datos de entrenamiento. Puede ser por hora, diaria, 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 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. Si hay varias filas en la misma serie temporal con la misma marca de tiempo (como lo determina el nivel de detalle), se considera un error de validación en el entrenamiento.

En general, tus prácticas de recopilación de datos determinan tu nivel de detalle sobre los datos.

Prácticas recomendadas para dividir manualmente los datos de entrenamiento de series temporales

Si la división cronológica predeterminada (80/10/10) no es adecuada para tus datos de entrenamiento, puedes especificar de forma manual qué filas de tus datos de entrenamiento se usan para qué división. Por ejemplo, quizás desees que un porcentaje diferente de tus datos de entrenamiento se use en las divisiones.

Asegúrate de evitar la filtración de datos entre tus series temporales, lo que puede suceder cuando los datos de la misma fecha se usan para un conjunto para una serie temporal y para otro diferente.

Consideraciones para establecer el período de contexto y el horizonte de previsión

Debes establecer la ventana de contexto y el horizonte de previsión cuando entrenes un modelo de previsión.

  • La ventana de contexto establece el tiempo que debe retroceder el modelo durante el entrenamiento (y para las previsiones). En otras palabras, para cada punto de datos de entrenamiento, la ventana de contexto determina qué tan alejada el modelo busca patrones predictivos.

  • El horizonte de previsión determina en qué momento el modelo predice el valor objetivo para cada fila de datos de predicción.

El aumento de la ventana de contexto tiene 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 hace que el tiempo de entrenamiento aumente.

  • Aumenta la cantidad requerida de historial de datos de predicción.

    Tus datos de predicción deben proporcionar tantos datos históricos como el valor de la ventana de contexto.

Si esperas tener muchos datos de predicción que no se extiendan en el pasado (inicios en frío), comienza configurando la ventana de contexto en 0. De lo contrario, una ventana de contexto entre el tamaño del horizonte de previsión y 10 veces el tamaño 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 el presupuesto de entrenamiento en al menos 6 horas.

  2. Vuelve a entrenar el modelo con el mismo presupuesto de entrenamiento, pero duplica el tamaño de la ventana de contexto a 2 veces el tamaño del horizonte de previsión.

  3. Si las métricas de evaluación del segundo modelo muestran una mejora sustancial, vuelve a entrenar el modelo, lo que aumenta el período del contexto a 5 veces el tamaño del horizonte de previsión. Considera aumentar de manera proporcional el presupuesto de entrenamiento (si entrenaste durante 10 horas en el primer paso, aumenta el presupuesto de entrenamiento a 50 horas).

  4. Sigue aumentando la ventana de contexto hasta que dejes de ver las 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 que produjo los resultados aceptables.

Cómo se usan la ventana de contexto y el horizonte de previsión durante el entrenamiento y las previsiones

Supongamos que tienes datos que se recopilan mensualmente, con una ventana de contexto de 5 (meses) y un horizonte de previsión de 5 (meses). El entrenamiento de tu modelo con 12 meses de datos daría como resultado los siguientes conjuntos de entradas y previsiones:

  • [1-5]:[6-10]
  • [2-6]:[7-11]
  • [3-7]:[8-12]

Después del entrenamiento, el modelo se puede usar para predecir los meses 13 a 17:

  • [8-12]:[13-17]

El modelo usa solo los datos que se encuentran en la ventana contextual para realizar la previsión. Podrías proporcionar datos que volvieran más, pero no afectaría la previsión. se ignorará.

Después de que se recopilan los datos del mes 13, se pueden usar para predecir el mes 18:

  • [9-13]:[14-18]

Esto puede continuar en el futuro, siempre y cuando obtengas buenos resultados. Finalmente, podrías volver a entrenar el modelo con los datos nuevos. Por ejemplo, si entrenaste el modelo después de agregar 6 meses más de datos, los datos de entrenamiento se usarán de la siguiente manera:

  • [2-6]:[7-11]
  • [3-7]:[8-12]
  • [4-8]:[9-13]
  • [5-9]:[10-14]
  • [6-10]:[11-15]
  • [7-11]:[12-16]
  • [8-12]:[13-17]
  • [9-13]:[14-18]

Luego, puedes usar el modelo para predecir los meses 19 a 23:

  • [14-18]:[19-23]

Acerca del formato de datos

Puedes crear tus datos de entrenamiento en formato amplio o estrecho. Para los modelos de regresión y clasificación, el formato amplio se usa mucho y puede ser más fácil de ensamblar y revisar. Para los modelos de previsión (Vista previa), el uso de formatos estrechos puede ayudarte a evitar la configuración de conexiones no intencionales entre tus datos y tu objetivo (datos exagerados).

Cuando creas datos de entrenamiento para entrenar un modelo de previsión, cada fila debe representar una vista única en una sola serie temporal. Debes tener una columna que represente tu identificador de serie temporal (cómo se distinguen las series temporales de la otra), y una columna que represente el valor que vas a predecir (tu objetivo). Luego, todos los demás valores en la fila que se usen para entrenar el modelo deben estar presentes en el momento en que solicitas una predicción para 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

En esta tabla, en formato amplio, se muestran los datos de la empresa por fecha, pero no se podrían usar para un modelo de previsión en su forma actual. No hay una sola columna objetivo, ninguna columna de ID de series temporales y, para una fecha determinada, no conocerás la demanda de los otros widgets en el momento de la predicción.

Podrías convertir esta tabla a este 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 series temporales, producto. Sin embargo, este formato se podría usar solo para predecir una de las regiones, y los datos de la otra región deben conocerse en el momento de la predicción.

La solución es convertir a un formato reducido, de modo que cada fila represente una sola observación. Todos los datos que son independientes de la serie temporal se repiten para cada fila:

Fecha Demanda Producto Promo Región
01/01/2019 112 Widget_1 0 CA
01/02/2019 141 Widget_1 1 CA
01/03/2019 149 Widget_1 0 CA
01/01/2019 52 Widget_1 0 IL
01/02/2019 81 Widget_1 1 IL
01/03/2019 89 Widget_1 0 IL
01/01/2019 241 Widget_2 0 CA
01/02/2019 219 Widget_2 1 CA
01/03/2019 244 Widget_2 0 CA
01/01/2019 0 Widget_2 0 IL
01/02/2019 0 Widget_2 1 IL
01/03/2019 0 Widget_2 0 IL
01/01/2019 0 Widget_3 0 CA
01/02/2019 0 Widget_3 1 CA
01/03/2019 0 Widget_3 0 CA
01/01/2019 43 Widget_3 0 IL
01/02/2019 26 Widget_3 1 IL
01/03/2019 86 Widget_3 0 IL

Ahora tenemos un identificador de serie temporal (Producto), una columna objetivo (Demanda) y una columna de Tiempo (Fecha). Además, cada fila se basa en una sola observación, que se puede usar para predecir el valor objetivo. Las columnas Región y Promo se usan como atributos para entrenar el modelo.

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

¿Qué sigue?