Recomendaciones para crear datos de entrenamiento

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

Introducción

Un conjunto de datos bien diseñado genera un modelo de aprendizaje automático de mayor calidad. Puedes usar los lineamientos de esta página para mejorar la calidad de tu conjunto de datos y modelo.

Si tienes experiencia en la creación de datos de entrenamiento para modelos de aprendizaje automático, revisa la lista de tareas de las que no debes preocuparte. AutoML Tables realiza muchas tareas de preparación de datos por ti.

Prácticas recomendadas para la preparación de datos

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 usados para crear el modelo refleje con exactitud la diferencia entre el conjunto de datos de entrenamiento y los datos en los que realizarás predicciones en el entorno de producción. AutoML Tables 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

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 en AutoML Tables. Puedes proporcionar una señal horaria de varias maneras:

  • Si cada fila de datos tiene una marca de tiempo, asegúrate de que esa columna se incluya, tenga un tipo de datos de Timestamp y se establezca como la columna de tiempo cuando crees el conjunto de datos. 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

Por lo general, no es necesario que emplees ingeniería de atributos cuando creas un modelo con AutoML Tables. Sin embargo, 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

AutoML Tables usa solo los datos de entrada de la fila para predecir el valor objetivo de esa misma 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.

Representa los valores nulos como strings vacías

Si tus datos usan números o caracteres especiales para representar valores nulos, le podría presentar problemas a AutoML Tables porque no se sabe qué representan. Si importas datos desde CSV, debes usar strings vacías para representar valores nulos. En BigQuery, usa el valor NULL.

Evita valores faltantes cuando sea posible

Verifica tus datos, busca valores faltantes y corrígelos si es posible. De lo contrario, si la columna se establece como anulable, puedes dejar el valor en blanco.

Usa espacios para separar texto

AutoML Tables 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”, aunque hayan sido pensadas para estar en la misma categoría, AutoML Tables tomará esos valores como categorías distintas. 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

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 solo unas 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

AutoML Tables selecciona las filas para el conjunto de datos de prueba de forma aleatoria (aunque 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.

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.

Proporciona suficientes datos de entrenamiento

Si no proporcionas suficientes datos de entrenamiento (filas), el modelo resultante podría tener un bajo rendimiento. Cuantos más atributos (columnas) uses para entrenar el modelo, más datos (filas) deberás proporcionar. Un buen objetivo para los modelos de clasificación es, al menos, 10 veces más filas que columnas. Para los modelos de regresión, deberías proporcionar, al menos, 50 veces más filas que columnas.

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

Deja que AutoML Tables realice todos los demás procesamientos previos y transformaciones

A menos que se indique lo contrario más arriba, deja que AutoML Tables emplee la ingeniería de atributos por ti. AutoML Tables trabaja mejor cuando tiene acceso a tus datos subyacentes. Consulta la sección sobre la preparación de datos que AutoML Tables hace por ti.

Preparación de datos que AutoML Tables hace por ti

En esta sección se mencionan los requisitos más comunes de los datos de entrenamiento a fin de que AutoML Tables los cumpla para ti de forma automática. No es necesario que incluyas estos cálculos en los datos de entrenamiento. De hecho, si tú realizas estas transformaciones y las incluyes en los datos de entrenamiento, podrías disminuir la calidad del modelo resultante.

Según el tipo de columna, se aplican las siguientes transformaciones automáticas a cada columna de atributos:

Tipo de columna Transformación
Numérico
  • El valor se convierte en float32.
  • El z_score del valor.
  • Un índice de bucket del valor basado en cuantiles. El tamaño del bucket es 100.
  • log(value+1) cuando el valor es mayor o igual que 0. De lo contrario, esta transformación no se genera y el valor se considera faltante.
  • El z_score del log(value+1) cuando el valor es mayor o igual que 0. De lo contrario, esta transformación no se genera y el valor se considera faltante.
  • Un valor booleano que indica si el valor es nulo.
  • Las filas con entradas numéricas no válidas (por ejemplo, una string que no se puede analizar como float32) no se incluyen en el entrenamiento ni la predicción.
  • Los valores extremos o atípicos no reciben ningún tratamiento especial.
Arreglo numérico
  • Todas las transformaciones para los tipos Numérico se aplican al promedio de los últimos N elementos en que N = {1, 2, 4, 8, todos}. Por lo tanto, los elementos más destacados son los que están más cerca del final del arreglo y no al comienzo.
  • El promedio de arreglos vacíos se considera cero.
Categórico
  • La string categórica tal como está: sin cambios en mayúsculas y minúsculas, puntuación, ortografía, tiempo verbal, etcétera.
  • Convierte el nombre de la categoría en un índice de búsqueda en el diccionario y genera una incorporación para cada índice.
  • Las categorías que aparecen menos de 5 veces en el conjunto de datos de entrenamiento se consideran de categoría “desconocida”. La categoría “desconocida” obtiene su propio índice de búsqueda especial y su consecuente incorporación.
Arreglo categórico
  • Para cada elemento del arreglo de los últimos N elementos en el que N = {1, 2, 4, 8, todos}, el nombre de la categoría se convierte en un índice de búsqueda del diccionario y se genera una incorporación para cada índice. Se combina la incorporación de todos los elementos en una sola incorporación mediante la media.
  • Los arreglos vacíos se consideran como una incorporación de ceros.
Texto
  • El texto tal como está: sin cambios en mayúsculas y minúsculas, puntuación, ortografía, tiempo verbal, etcétera.
  • Al texto se le asignan tokens de palabras y se generan 1-grama y 2-gramas a partir de palabras. Se convierte cada n-grama en un índice de búsqueda de diccionario y se genera una incorporación para cada índice. Se combina la incorporación de todos los elementos en una sola incorporación mediante la media.

    La asignación de token se basa en los límites de la secuencia de comandos de Unicode.

  • Los valores faltantes obtienen su propio índice de búsqueda e incorporación consecuente.
  • Las palabras vacías no reciben ningún tratamiento especial y no se quitan.
Arreglo de texto
  • Se concatenan todos los valores de texto del arreglo en un solo valor de texto mediante el uso de un espacio (“ ”) como delimitador y, luego, se considera al resultado como un solo valor de texto. Se aplican las transformaciones para las columnas de Texto.
  • Los arreglos vacíos se consideran como una incorporación de ceros.
Marca de tiempo
  • Se aplican las transformaciones para las columnas de tipo Numérico.
  • Se determina el año, el mes, el día y el día de la semana. Se trata cada valor de la marca de tiempo como una columna de tipo Categórico.
  • Los valores numéricos no válidos (por ejemplo, los valores que están fuera de un rango de marca de tiempo típico o que son valores extremos) no reciben un tratamiento especial y no se quitan.
  • Las filas con entradas de marca de tiempo no válidas (por ejemplo, una string de marca de tiempo no válida) no se incluyen para el entrenamiento ni la predicción.
Arreglo de marca de tiempo
  • Se aplican las transformaciones de las columnas de tipo Numérico al promedio de los últimos N elementos del arreglo. N = {1, 2, 4, 8, todo}. Esto significa que los elementos más destacados son los que están más cerca del final del arreglo.
Struct
  • Los valores de Struct se acoplan en campos de forma automática. Los campos acoplados reciben distinto trato según su tipo de columna.

Valores nulos o faltantes

Puedes elegir cómo se manejan los valores nulos para tus datos de entrenamiento si configuras esa columna como anulable o no en el esquema de tu conjunto de datos. Para obtener más información, consulta la página sobre cómo crear un conjunto de datos.

Si aparece un valor nulo en una columna no anulables, la fila completa se excluye del entrenamiento.

Los valores nulos en las columnas anulables se representan con una variable de indicador especial que indica que el valor era nulo o faltante. Para las transformaciones categóricas y de texto, el indicador genera una incorporación.

AutoML Tables considera los siguientes elementos como valores nulos:

  • Un valor NULL de BigQuery.

  • Valores NaN o numéricos infinitos.

  • Una string vacía. AutoML Tables no corta espacios de strings. Es decir, “ ” no se considera un valor nulo.

  • Una string que se puede convertir en un valor NaN o numérico infinito.

    • “NAN”: se ignorarán mayúsculas y minúsculas, con un signo de más o menos opcional antepuesto.
    • “INF”: se ignorarán mayúsculas y minúsculas, con un signo de más o menos opcional antepuesto.
  • Valores faltantes.

¿Qué sigue?