Se tratan los siguientes temas:
- Prácticas recomendadas para todos los modelos de datos tabulares
- Prácticas recomendadas para modelos de AutoML tabulares
- Prácticas recomendadas para modelos de previsión tabulares
- Prácticas recomendadas para el formato de datos
Prácticas recomendadas para todos los modelos de datos tabulares
Las siguientes prácticas recomendadas se aplican tanto si creas un modelo de AutoML como si creas un modelo entrenado de forma personalizada que utilice datos tabulares.
Evitar filtraciones de datos
Se produce una fuga de datos cuando los datos de entrenamiento incluyen información predictiva que no está disponible cuando solicitas una inferencia. La filtración de datos puede provocar que tu modelo muestre métricas de evaluación excelentes, pero que tenga un rendimiento deficiente con datos reales.
Por ejemplo, supongamos que quieres saber cuántos helados venderá tu tienda mañana. No puedes incluir la temperatura del día objetivo en tus datos de entrenamiento porque no sabes cuál es (aún no ha llegado). Sin embargo, puedes usar la temperatura predicha del día anterior, que puedes incluir en la solicitud de inferencia.
También se pueden producir fugas de datos si usa 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 la desviación entre el entrenamiento y el servicio
La desviación entre entrenamiento y servicio se produce cuando generas los datos de entrenamiento de forma diferente a como generas los datos que usas para solicitar inferencias.
Por ejemplo, si usas un valor medio y, con fines de entrenamiento, calculas la media durante 10 días, pero cuando solicitas la inferencia, calculas la media del último mes.
En general, revisa cualquier diferencia entre cómo generas los datos de entrenamiento y los datos de servicio (los datos que usas para generar inferencias) para evitar el sesgo entre el entrenamiento y el servicio.
Desviación entrenamiento-utilización y distribución de datos
También puede producirse una asimetría entre el entrenamiento y el servicio en función de la distribución de los datos en las divisiones de datos de entrenamiento, validación y prueba. A menudo, hay una diferencia entre la distribución de datos que ve un modelo cuando se implementa en producción y la distribución de datos del conjunto de datos con el que se entrena un modelo. Por ejemplo, en producción, un modelo se puede aplicar a una población de usuarios completamente diferente a la que se ha visto durante el entrenamiento, o bien se puede usar para hacer inferencias 30 días después de que se registraran los datos de entrenamiento finales.
Para obtener los mejores resultados, asegúrate de que la distribución de las divisiones de datos utilizadas para crear tu modelo refleje con precisión la diferencia entre los datos de entrenamiento y los datos con los que haces inferencias en tu entorno de producción. Vertex AI puede producir inferencias no monótonas y, si los datos de producción se muestrean a partir de una distribución muy diferente a la de los datos de entrenamiento, las inferencias no monótonas no son muy fiables.
Además, la diferencia entre los datos de producción y los datos de entrenamiento debe reflejarse en la diferencia entre la división de datos de validación y la división de datos de entrenamiento, así como entre la división de datos de prueba y la división de datos de validación.
Por ejemplo, si tiene previsto hacer inferencias sobre el valor del tiempo de vida del cliente (TVC) de los usuarios durante los próximos 30 días, asegúrese de que los datos de su división de datos de validación sean de 30 días después de los datos de su división de datos de entrenamiento, y de que los datos de su división de datos de prueba sean de 30 días después de su división de datos de validación.
Del mismo modo, si quieres que tu modelo se ajuste para hacer inferencias generalizadas sobre nuevos usuarios, asegúrate de que los datos de un usuario específico solo se incluyan en una división de tus datos de entrenamiento. Por ejemplo, todas las filas que corresponden a user1
están en la división de datos de entrenamiento, todas las filas que corresponden a user2
están en la división de datos de validación y todas las filas que corresponden a user3
están en la división de datos de prueba.
Proporcionar una señal horaria
En el caso de los modelos de clasificación y regresión, si es probable que el patrón subyacente de tus datos cambie con el tiempo (no se distribuye aleatoriamente en el tiempo), proporciona esa información a Vertex AI. Puedes proporcionar una señal de tiempo de varias formas:
Si cada fila de datos tiene una marca de tiempo, asegúrate de que esa columna esté incluida, tenga el tipo de transformación
Timestamp
y se haya definido como la columna Tiempo al entrenar el modelo. Este orden se usa para dividir los datos. Los más recientes se usan como datos de prueba y los más antiguos, como datos de entrenamiento. Más informaciónSi la columna de tiempo no tiene muchos valores distintos, utiliza 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 provocar que falle el entrenamiento.
Si la información de la hora no está en una sola columna, puede usar una división manual de los datos para usar los datos más recientes como datos de prueba y los más antiguos como datos de entrenamiento.
Hacer que la información sea explícita cuando sea necesario
En el caso de algunos tipos de datos primitivos, puedes mejorar la calidad del modelo diseñando funciones.
Por ejemplo, si sus datos incluyen longitud y latitud, estas columnas se tratarán como numéricas, sin cálculos especiales. Si la ubicación o la distancia proporcionan una señal para tu problema, diseña una función que proporcione esa información explícitamente.
Algunos tipos de datos que pueden requerir ingeniería de funciones:
- Longitud/latitud
- URLs
- Direcciones IP
- Direcciones de correo electrónico
- Números de teléfono
- Otros códigos geográficos (por ejemplo, códigos postales)
Incluir datos calculados o agregados en una fila
Vertex AI solo usa los datos de entrada de una sola fila para predecir el valor objetivo de esa fila. Si ha calculado o agregado datos de otras filas o fuentes que serían valiosos para determinar el valor previsto de una fila, inclúyalos en la fila de origen. Asegúrate de que la nueva columna no provoque filtración de datos ni desviación entre el entrenamiento y el servicio.
Por ejemplo, si quiere predecir la demanda de un producto la semana que viene, mejore la calidad de la inferencia incluyendo columnas con los siguientes valores:
- Número total de artículos en stock de la misma categoría que el producto.
- El precio medio de los artículos en stock de la misma categoría que el producto.
- Número de días antes de un festivo conocido en los que se solicita la inferencia.
En otro ejemplo, si quiere predecir si un usuario concreto comprará un producto, mejore la calidad de la inferencia incluyendo columnas con los siguientes valores:
- La tasa de conversión o de clics histórica media del usuario específico.
- Cuántos productos hay en el carrito de la compra del usuario.
Evitar los sesgos
Asegúrate de que los datos de entrenamiento sean representativos de todo el universo de datos potenciales para los que haces inferencias. Por ejemplo, si tienes clientes de todo el mundo, no uses datos de entrenamiento de un solo país.
Prácticas recomendadas para modelos de AutoML tabulares
Las siguientes prácticas recomendadas se aplican a la creación de datos de entrenamiento tabulares para modelos tabulares de AutoML.
Representar los valores nulos de forma adecuada
Si importa datos de un archivo CSV, utilice cadenas vacías para representar los valores nulos. En BigQuery, use el valor NULL.
Si tus datos usan caracteres especiales o números para representar valores nulos, incluido el cero, estos valores se interpretan de forma incorrecta, lo que reduce la calidad del modelo.
Evita los valores que faltan siempre que sea posible
Comprueba si faltan valores en tus datos y corrígelos si es posible. De lo contrario, puedes dejar el valor en blanco, y se tratará como un valor nulo.
Usar espacios para separar el texto
Vertex AI tokeniza cadenas de texto y puede obtener señales de entrenamiento de palabras concretas. Usa espacios para separar las palabras. Las palabras separadas por otros caracteres se tratan como una sola entidad.
Por ejemplo, si proporciona el texto "rojo/verde/azul", no se tokeniza en "rojo", "verde" y "azul". Si esas palabras concretas pueden ser importantes para entrenar el modelo, transforma el texto a "rojo verde azul" antes de incluirlo en tus datos de entrenamiento.
Asegúrate de que tus funciones categóricas sean precisas y estén limpias
Las incoherencias en los datos pueden provocar que las categorías se dividan de forma incorrecta. Por ejemplo, si sus datos incluyen "Brown" y "brown", Vertex AI usa esos valores como categorías independientes, aunque es posible que su intención fuera que fueran la misma. Los errores ortográficos pueden tener un efecto similar. Asegúrate de eliminar este tipo de incoherencias de tus datos categóricos antes de crear los datos de entrenamiento.
Tenga especial cuidado con las clases desequilibradas en los modelos de clasificación
Si tienes clases desequilibradas (un problema de clasificación con uno o varios resultados que se dan con poca frecuencia), consulta los siguientes consejos.
Proporcionar suficientes datos de entrenamiento para la clase minoritaria
Si hay muy pocas filas de datos de una clase, la calidad del modelo se reduce. Si es posible, proporcione al menos 100 filas de datos por clase.
Considera la posibilidad de usar una división manual
Vertex AI selecciona las filas del conjunto de datos de prueba de forma aleatoria (pero determinista). Si las clases están desequilibradas, es posible que el conjunto de datos de prueba contenga un número reducido de la clase minoritaria o incluso ninguno, lo que provoca que falle el entrenamiento.
Si las clases están desequilibradas, puedes asignar una división manual para asegurarte de que se incluyan suficientes filas con los resultados minoritarios en cada división.
Proporcionar suficientes datos de entrenamiento
Si no proporcionas suficientes datos de entrenamiento, el modelo resultante puede tener un rendimiento deficiente. Cuantas más columnas uses para entrenar tu modelo, más datos tendrás que proporcionar.
El conjunto de datos debe incluir siempre al menos 1000 filas.
En la siguiente tabla se muestran algunas heurísticas sobre la cantidad de datos de entrenamiento que debes proporcionar en función de tu objetivo.
Objetivo | Cantidad mínima sugerida de datos de entrenamiento |
---|---|
Clasificación | Al menos 10 veces más filas que columnas. |
Previsión | Al menos 10 series temporales por cada columna usada para entrenar el modelo. |
Regresión | Al menos 50 veces más filas que columnas. |
Deja que Vertex AI se encargue del resto del preprocesamiento y las transformaciones
A menos que se indique lo contrario, deja que Vertex AI haga la ingeniería de funciones por ti cuando entrenes un modelo de AutoML. AutoML funciona mejor cuando tiene acceso a los datos subyacentes. Para ver 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 la granularidad de los datos
Cuando entrenas un modelo de previsión, especificas la granularidad de los datos o el intervalo de tiempo entre las filas de los datos de entrenamiento. Puede ser horaria, diaria, semanal, mensual o anual. Además, puede ser cada 1, 5, 10, 15 o 30 minutos.
La granularidad de los datos debe ser coherente en todos los datos de entrenamiento y en todos los datos de inferencia por lotes. Si especificas una granularidad diaria y hay dos días entre dos filas de datos de entrenamiento, Vertex AI tratará el día intermedio como datos que faltan, lo que puede reducir el rendimiento del modelo. Si hay varias filas en la misma serie temporal con la misma marca de tiempo (determinada por la granularidad), se considera un error de validación durante el entrenamiento.
Por lo general, tus prácticas de recogida de datos determinan la granularidad de los datos.
Cómo encontrar un buen valor para la ventana de contexto
Si prevés que vas a tener muchos datos de inferencia que no se extiendan al pasado (arranque en frío), empieza configurando la ventana de contexto en 0. De lo contrario, debería funcionar bien una ventana de contexto con un tamaño comprendido entre el horizonte de previsión y 10 veces el horizonte de previsión.
Puedes probar los siguientes pasos para encontrar un valor adecuado para tus datos:
En la primera iteración del entrenamiento, asigna el mismo valor a la ventana de contexto y al horizonte de previsión, y define un presupuesto de entrenamiento de al menos 6 horas.
Vuelve a entrenar el modelo con el mismo presupuesto de entrenamiento, pero duplica el tamaño de la ventana de contexto hasta que sea el doble del horizonte de previsión.
Si las métricas de evaluación del segundo modelo muestran una mejora sustancial, vuelve a entrenar el modelo y aumenta la ventana de contexto hasta 5 veces el tamaño del horizonte de previsión. Te recomendamos que aumentes el presupuesto de entrenamiento de forma proporcional (si has entrenado durante 10 horas en el primer paso, aumenta el presupuesto de entrenamiento a 50 horas).
Sigue aumentando la ventana de contexto hasta que las métricas de evaluación mejoren o hasta que estés satisfecho con los resultados. Vuelve al valor más bajo de la ventana de contexto que ha producido resultados aceptables.
Si aumentas la ventana de contexto, ocurrirá lo siguiente:
Aumenta el tiempo de entrenamiento
Con una ventana de contexto más grande, el modelo usa más puntos de datos en el entrenamiento, lo que provoca que aumente el tiempo de entrenamiento.
Aumenta la cantidad de historial necesaria para los datos de inferencia.
Los datos de inferencia deben proporcionar tantos puntos de datos históricos como el valor de la ventana de contexto.
Prácticas recomendadas para el formato de los datos
Puedes crear tus datos de entrenamiento en formato ancho o estrecho. En el caso de los modelos de regresión y clasificación, se suele usar el formato ancho, que puede ser más fácil de montar y revisar. En los modelos de previsión, el formato estrecho puede ayudarte a evitar que se establezcan conexiones no intencionadas entre tus datos y tu objetivo (fugas de datos).
Cuando creas datos de entrenamiento para entrenar un modelo de previsión, cada fila debe representar una sola observación de una sola serie temporal. Debe tener una columna que represente el identificador de la serie temporal (cómo se distinguen las series temporales entre sí) y otra columna que represente el valor que va a predecir (su objetivo). Después, todos los demás valores de la fila que se usen para entrenar el modelo deben estar presentes cuando solicites una inferencia para tu objetivo.
Veamos los siguientes datos de entrenamiento de ejemplo (simplificados y abreviados):
Fecha | Widget_1_Demand | Widget_2_Demand | Widget_3_Demand | Promoción | 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, en formato ancho, muestra los datos empresariales por fecha, pero no se podría usar en un modelo de previsión en su forma actual. No hay una sola columna de destino, ni una columna de ID de serie temporal y, para cualquier fecha, no sabrá la demanda de los otros widgets en el momento de la inferencia.
Podrías convertir esta tabla a este formato:
Fecha | Producto | Region_CA_Demand | Region_IL_Demand | Promoción |
---|---|---|---|---|
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 solo se podría usar para predecir una de las regiones, y los datos de la otra región deberían conocerse en el momento de la inferencia.
La solución es convertirlo al formato estrecho para que cada fila represente una sola observación. Los datos que no dependen de la serie temporal se repiten en cada fila:
Fecha | Demanda | ID | Promoción |
---|---|---|---|
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 de destino (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. La columna Promoción se usa como una característica para entrenar el modelo.
En realidad, tendrá muchas más filas y columnas que en estos ejemplos. Sin embargo, debes seguir las directrices que se indican en este artículo para estructurar tus datos y evitar fugas de datos.
Siguientes pasos
- ¿Son buenos mis datos? Lista de comprobación previa a la implementación del aprendizaje automático
- Preparar y seleccionar datos para el aprendizaje automático