Cuando usas un conjunto de datos para entrenar un modelo de AutoML, Vertex AI divide tus datos en tres partes: una parte de entrenamiento, una parte de validación y una parte de prueba. El objetivo principal al crear divisiones de datos es asegurarse de que el conjunto de prueba represente con precisión los datos de producción. De esta forma, las métricas de evaluación proporcionan una señal precisa sobre el rendimiento del modelo con datos reales.
En esta página se explica cómo usa Vertex AI los conjuntos de datos de entrenamiento, validación y prueba para entrenar un modelo de AutoML. También se describe cómo puedes controlar la forma en que se dividen tus datos entre estos tres conjuntos. Los algoritmos de división de datos para clasificación y regresión son distintos de los algoritmos de división de datos para previsión.
Divisiones de datos para clasificación y regresión
Cómo se usan las divisiones de datos
Las divisiones de datos se usan en el proceso de entrenamiento de la siguiente manera:
Pruebas de modelos
El conjunto de entrenamiento se usa para entrenar modelos con diferentes combinaciones de opciones de preprocesamiento, arquitectura e hiperparámetros. Vertex AI evalúa estos modelos en el conjunto de validación para determinar su calidad, lo que guía la exploración de combinaciones de opciones adicionales. El conjunto de validación también se usa para seleccionar el mejor punto de control de la evaluación periódica durante el entrenamiento. Vertex AI usa los mejores parámetros y arquitecturas determinados en la fase de ajuste paralelo para entrenar dos modelos de conjunto, tal como se describe a continuación.
Evaluación de modelos
Vertex AI entrena un modelo de evaluación con los conjuntos de entrenamiento y de validación como datos de entrenamiento. Vertex AI genera las métricas de evaluación del modelo finales de este modelo con el conjunto de datos de prueba. Es la primera vez en el proceso que se usa el conjunto de pruebas. De esta forma, las métricas de evaluación finales reflejan de forma objetiva el rendimiento del modelo entrenado final en producción.
Modelo de publicación
Vertex AI entrena un modelo con los conjuntos de entrenamiento, validación y prueba para maximizar la cantidad de datos de entrenamiento. Usa este modelo para solicitar predicciones online o predicciones por lotes.
División de datos predeterminada
De forma predeterminada, Vertex AI usa un algoritmo de división aleatoria para separar los datos en tres divisiones. Vertex AI selecciona aleatoriamente el 80% de las filas de datos para el conjunto de entrenamiento, el 10% para el conjunto de validación y el 10% para el conjunto de prueba. Recomendamos la división predeterminada para los conjuntos de datos que cumplan los siguientes requisitos:
- No cambia con el tiempo.
- Relativamente equilibrado.
- Se distribuyen como los datos que se usan para las predicciones en producción.
Para usar la división de datos predeterminada, acepta el valor predeterminado en la Google Cloud consola o deja el campo split vacío en la API.
Opciones para controlar las divisiones de datos
Puedes controlar qué filas se seleccionan para cada división mediante uno de los siguientes métodos:
- División aleatoria: define los porcentajes de división y asigna las filas de datos de forma aleatoria.
- División manual: selecciona filas específicas para usarlas en el entrenamiento, la validación y las pruebas en la columna de división de datos.
- División cronológica: divide los datos por tiempo en la columna Tiempo.
Elige solo una de estas opciones cuando entrenes tu modelo. Algunas de estas opciones requieren que se modifiquen los datos de entrenamiento (por ejemplo, la columna de división de datos o la columna de tiempo). Incluir datos para las opciones de división de datos no significa que tengas que usar esas opciones. Puedes elegir otra opción cuando entrenes el modelo.
La división predeterminada no es la mejor opción si:
No estás entrenando un modelo de previsión, pero tus datos son sensibles al tiempo.
En este caso, utiliza una división cronológica o una división manual que dé como resultado que los datos más recientes se utilicen como conjunto de prueba.
Los datos de prueba incluyen datos de poblaciones que no estarán representadas en producción.
Por ejemplo, supongamos que entrenas un modelo con datos de compra de varias tiendas. Sin embargo, sabes que el modelo se usará principalmente para hacer predicciones sobre tiendas que no están en los datos de entrenamiento. Para asegurarte de que el modelo se puede generalizar a tiendas no vistas, separa tus conjuntos de datos por tiendas. Es decir, el conjunto de prueba solo debe incluir tiendas diferentes del conjunto de validación, y el conjunto de validación solo debe incluir tiendas diferentes del conjunto de entrenamiento.
Tus clases están desequilibradas.
Si tienes muchos más ejemplos de una clase que de otra en tus datos de entrenamiento, puede que tengas que incluir manualmente más ejemplos de la clase minoritaria en tus datos de prueba. Vertex AI no realiza un muestreo estratificado, por lo que el conjunto de pruebas podría incluir muy pocos ejemplos de la clase minoritaria o incluso ninguno.
División aleatoria
La división aleatoria también se conoce como "división matemática" o "división de fracciones".
De forma predeterminada, los porcentajes de datos de entrenamiento que se usan para los conjuntos de entrenamiento, validación y prueba son 80, 10 y 10, respectivamente. Si usas Google Cloud console, puedes cambiar los porcentajes a cualquier valor que sume 100. Si usas la API de Vertex AI, usa fracciones que sumen 1,0.
Para cambiar los porcentajes (fracciones), usa el objeto FractionSplit para definir las fracciones.
Vertex AI selecciona las filas de una división de datos de forma aleatoria, pero determinista. Si no estás satisfecho con la composición de las divisiones de datos generadas, usa una división manual o cambia los datos de entrenamiento. Si entrenas un modelo nuevo con los mismos datos de entrenamiento, se obtendrá la misma división de datos.
División manual
La división manual también se conoce como "división predefinida".
Una columna de división de datos te permite seleccionar filas específicas para usarlas en el entrenamiento, la validación y las pruebas. Cuando crees los datos de entrenamiento, añade una columna que pueda contener uno de los siguientes valores (distingue entre mayúsculas y minúsculas):
TRAIN
VALIDATE
TEST
UNASSIGNED
Los valores de esta columna deben ser una de las dos combinaciones siguientes:
- Todos los usuarios de
TRAIN
,VALIDATE
yTEST
- Solo
TEST
yUNASSIGNED
Cada fila debe tener un valor en esta columna. No puede ser una cadena vacía.
Por ejemplo, con todos los conjuntos especificados:
"TRAIN","John","Doe","555-55-5555" "TEST","Jane","Doe","444-44-4444" "TRAIN","Roger","Rogers","123-45-6789" "VALIDATE","Sarah","Smith","333-33-3333"
Si solo se especifica el conjunto de pruebas:
"UNASSIGNED","John","Doe","555-55-5555" "TEST","Jane","Doe","444-44-4444" "UNASSIGNED","Roger","Rogers","123-45-6789" "UNASSIGNED","Sarah","Smith","333-33-3333"
La columna de división de datos puede tener cualquier nombre de columna válido. Su tipo de transformación puede ser Categoría, Texto o Automático.
Si el valor de la columna de división de datos es UNASSIGNED
, Vertex AI asigna automáticamente esa fila al conjunto de entrenamiento o de validación.
Designa una columna como columna de división de datos durante el entrenamiento del modelo.
División cronológica
La división cronológica también se conoce como "división por marca de tiempo".
Si tus datos dependen del tiempo, puedes designar una columna como columna de tiempo. Vertex AI usa la columna Tiempo para dividir los datos. Las filas más antiguas se usan para el entrenamiento, las siguientes para la validación y las más recientes para las pruebas.
Vertex AI trata cada fila como un ejemplo de entrenamiento independiente y distribuido de forma idéntica. Si se define la columna Tiempo, esto no cambia. La columna Tiempo solo se usa para dividir el conjunto de datos.
Si especifica una columna de tiempo, incluya un valor para cada fila del conjunto de datos. Asegúrate de que la columna Tiempo tenga suficientes valores distintos para que los conjuntos de validación y de prueba no estén vacíos. Por lo general, con al menos 20 valores distintos debería ser suficiente.
Los datos de la columna Hora deben tener uno de los formatos admitidos por la transformación de marca de tiempo. Sin embargo, la columna Tiempo puede tener cualquier transformación admitida, ya que la transformación solo afecta a cómo se usa esa columna en el entrenamiento. Las transformaciones no afectan a la división de datos.
También puede especificar los porcentajes de los datos de entrenamiento que se asignan a cada conjunto.
Designa una columna como columna de tiempo durante el entrenamiento del modelo.
Divisiones de datos para las previsiones
De forma predeterminada, Vertex AI usa un algoritmo de división cronológica para separar los datos de previsión en tres divisiones. Te recomendamos que uses la división predeterminada. Sin embargo, si quieres controlar qué filas de datos de entrenamiento se usan para cada división, usa una división manual.
Cómo se usan las divisiones de datos
Las divisiones de datos se usan en el proceso de entrenamiento de la siguiente manera:
Pruebas de modelos
El conjunto de entrenamiento se usa para entrenar modelos con diferentes combinaciones de opciones de preprocesamiento, arquitectura e hiperparámetros. Vertex AI evalúa estos modelos en el conjunto de validación para determinar su calidad, lo que guía la exploración de combinaciones de opciones adicionales. El conjunto de validación también se usa para seleccionar el mejor punto de control de la evaluación periódica durante el entrenamiento. Vertex AI usa los mejores parámetros y arquitecturas determinados en la fase de ajuste paralelo para entrenar dos modelos de conjunto, tal como se describe a continuación.
Evaluación de modelos
Vertex AI entrena un modelo de evaluación con los conjuntos de entrenamiento y de validación como datos de entrenamiento. Vertex AI genera las métricas de evaluación del modelo finales de este modelo mediante el conjunto de datos de prueba. Es la primera vez en el proceso que se usa el conjunto de pruebas. De esta forma, las métricas de evaluación finales reflejan de forma objetiva el rendimiento del modelo entrenado final en producción.
Modelo de publicación
Vertex AI entrena un modelo con el conjunto de entrenamiento y el de validación. El modelo se valida (para seleccionar el mejor punto de control) mediante el conjunto de prueba. El conjunto de pruebas nunca se entrena en el sentido de que la pérdida se calcula a partir de él. Puedes usar este modelo para obtener inferencias.
División predeterminada
La división de datos predeterminada (cronológica) funciona de la siguiente manera:
- Vertex AI ordena los datos de entrenamiento por fecha.
- Vertex AI usa los porcentajes predeterminados (80/10/10) para separar el periodo cubierto por los datos de entrenamiento en tres bloques, uno para cada conjunto de entrenamiento.
- Vertex AI añade filas vacías al principio de cada serie temporal para que el modelo pueda aprender de las filas que no tienen suficiente historial (ventana de contexto). El número de filas añadidas es el tamaño de la ventana de contexto definida durante el entrenamiento.
Vertex AI usa cada fila cuyos datos futuros (horizonte de previsión) se incluyen por completo en uno de los conjuntos de datos de ese conjunto, con el tamaño del horizonte de previsión definido durante el entrenamiento. (Vertex AI descarta las filas cuyo horizonte de previsión se extiende a dos conjuntos para evitar fugas de datos).
División manual
Una columna de división de datos te permite seleccionar filas específicas para usarlas en el entrenamiento, la validación y las pruebas. Cuando crees los datos de entrenamiento, añade una columna que pueda contener uno de los siguientes valores (distingue entre mayúsculas y minúsculas):
TRAIN
VALIDATE
TEST
Cada fila debe tener un valor en esta columna. No puede ser una cadena vacía.
Por ejemplo:
"TRAIN","sku_id_1","2020-09-21","10" "TEST","sku_id_1","2020-09-22","23" "TRAIN","sku_id_2","2020-09-22","3" "VALIDATE","sku_id_2","2020-09-23","45"
La columna de división de datos puede tener cualquier nombre de columna válido. Su tipo de transformación puede ser Categoría, Texto o Automático.
Designa una columna como columna de división de datos durante el entrenamiento del modelo.
Asegúrate de evitar las filtraciones de datos entre tus series temporales.