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

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 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 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 (vista previa) 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 preparar los datos de las previsiones

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

Identificador de la serie temporal

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

Algunos identificadores de series temporales comunes 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 más adecuada 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 use a fin de entrenar el modelo.

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.

Prácticas recomendadas para dividir de forma manual los datos de entrenamiento de las series temporales

Si la división cronológica predeterminada (80/10/10) no es correcta para tus datos de entrenamiento, puedes especificar manualmente qué filas de tus datos de entrenamiento se usan para cada división. Por ejemplo, puede que quieras que se use un porcentaje diferente de tus datos de entrenamiento para las divisiones. Para obtener más información, consulta Controla las divisiones de datos.

Asegúrate de evitar la filtración de datos entre tus series temporales, lo que puede ocurrir cuando, a partir de los datos de una misma fecha, se usan distintos conjuntos para diferentes series temporales.

Consideraciones para configurar la ventana de contexto y el horizonte de previsión

Debes configurar el período del contexto y el horizonte de previsión cuando entrenas un modelo de previsión.

  • La ventana de contexto establece la extensión del período que el modelo consulta durante el entrenamiento (y para las previsiones). En otras palabras, para cada dato de entrenamiento, la ventana de contexto determina la extensión del período en el que el modelo busca patrones predictivos.

  • El horizonte de previsión determina hasta qué punto del futuro el modelo predice el valor objetivo de cada fila de datos de predicción.

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.

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.

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 de forma mensual con una ventana de contexto de 5 (meses) y un horizonte de previsión de 5 (meses). Entrenar 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, se puede usar el modelo para predecir desde el mes 13 hasta el 17:

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

El modelo usa solo los datos que están dentro de la ventana de contexto para realizar la previsión. Puedes proporcionar datos de un período anterior, pero esto no afectaría la previsión, ya que se ignorarán.

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

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

Esto puede continuar en el futuro, siempre y cuando obtengas buenos resultados. Con el tiempo, podrías volver a entrenar el modelo con los datos nuevos. Por ejemplo, si vuelves a entrenar 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 desde el mes 19 hasta el 23:

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

Acerca del formato de los 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 (vista previa), 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 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 (Product), una columna objetivo (Demand) y una columna de tiempo (Date). Además, cada fila se basa en una sola observación, que puede usarse para predecir el valor objetivo. Las columnas de región y de promoción se usan como atributos 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?