Compartir a través de


Preparación y procesamiento de datos AutoML de Azure Databricks

En este artículo se describe cómo Azure Databricks AutoML prepara los datos para el entrenamiento de aprendizaje automático y describe la configuración de datos configurable. Puede ajustar estas opciones durante la configuración del experimento en la Interfaz de usuario de AutoML. Para configurar estas opciones mediante la API de AutoML), consulte la Referencia de la API de Python de AutoML.

Tipos de características de datos admitidos

Los tipos de características que no sean los anteriores no se admiten. Por ejemplo, no se admiten imágenes.

Se admiten los siguientes tipos de características:

  • Numérica (ByteType, ShortType, IntegerType, LongType, FloatType, y DoubleType)
  • Boolean
  • Cadena (texto categórico o en inglés)
  • Marcas de tiempo (TimestampType, DateType)
  • ArrayType[Numeric] (Databricks Runtime 10.4 LTS ML y posteriores)
  • DecimalType (Databricks Runtime 11.3 LTS ML y versiones posteriores)

Selección de columnas

Nota:

Esta funcionalidad solo está disponible para problemas de clasificación y regresión

En Databricks Runtime 10.3 ML y posteriores, puede especificar qué columnas debe usar AutoML para el entrenamiento. Para excluir una columna de la interfaz de usuario, desactive la columna Incluir. En la API, use el parámetro exclude_cols. Para más información, vea Referencia de la API de Python de AutoML de Azure Databricks.

No se puede quitar la columna seleccionada como destino de predicción o como columna de tiempo para dividir los datos.

De manera predeterminada, se incluyen todas las columnas.

Atribución de valores que faltan

En Databricks Runtime 10.4 LTS ML y posteriores, puede especificar cómo se imputan los valores NULL. En la interfaz de usuario, seleccione un método en la lista desplegable de la columna Impute with en el esquema de tabla. En la API, use el parámetro imputers. Para más información, vea Referencia de la API de Python de AutoML de Azure Databricks.

De forma predeterminada, AutoML selecciona un método de imputación basado en el tipo de columna y el contenido.

Nota:

Si elige un método de imputación distinto del predeterminado, AutoML no realiza la detección de tipos semánticos.

División de los datos en conjuntos de entrenamiento, validación y prueba

AutoML divide los datos en tres divisiones para el entrenamiento, la validación y las pruebas. Dependiendo del tipo de problema de ML, tiene diferentes opciones para dividir los datos.

División de datos para tareas de regresión y clasificación

Use los métodos siguientes para dividir los datos en conjuntos de entrenamiento, validación y prueba para hacer tareas de regresión y clasificación:

(Valor predeterminado) División aleatoria: Si no se especifica una estrategia de división de datos, el conjunto de datos se divide aleatoriamente en división de entrenamiento del 60 %, 20 % de validación de división y 20 % división de prueba. Para la clasificación, una división aleatoria estratificada garantiza que cada clase se represente adecuadamente en los conjuntos de entrenamiento, validación y pruebas.

División cronológica: en Databricks Runtime 10.4 LTS ML y versiones posteriores, puede seleccionar una columna de tiempo para crear divisiones cronológicas de entrenamiento, validación y prueba. Las divisiones cronológicas usan los puntos de datos más antiguos para el entrenamiento; los siguientes en antigüedad, para la validación, y los más recientes, en las pruebas. La columna de hora puede ser una marca de tiempo, un entero o una columna de cadena.

División manual: en Databricks Runtime 15.3 ML y versiones posteriores, puede usar la API para configurar una división manual. Especifique una columna dividida y use los valores train, validateo test para identificar las filas que quiere usar para los conjuntos de datos de entrenamiento, validación y prueba. Se omiten todas las filas con valores de columna divididos distintos de train, testo validate y se genera la alerta correspondiente.

División de datos para pronósticos

Para las tareas de pronóstico, AutoML usa la validación cruzada de series temporales. Este método amplía gradualmente el conjunto de datos de entrenamiento cronológicamente y procede con la validación en los puntos de tiempo posteriores. La validación cruzada proporciona una evaluación sólida del rendimiento de un modelo en distintos segmentos temporales. De este modo se garantiza que el modelo de pronóstico se pruebe rigurosamente con datos futuros inadvertidos, con lo que se mantiene la relevancia y la precisión de las predicciones.

El número de plegamientos de validación cruzada depende de las características de la tabla de entrada, como el número de series temporales, la presencia de covariados y la longitud de la serie temporal.

Muestreo de grandes conjuntos de datos

Nota:

El muestreo no se aplica a los problemas de previsión.

Aunque AutoML distribuye las pruebas de ajuste de hiperparámetros entre los nodos de trabajo de un clúster, cada modelo se entrena en un único nodo de trabajo.

AutoML calcula automáticamente la memoria necesaria para cargar y entrenar el conjunto de datos, y muestrea el conjunto de datos si es necesario.

En Databricks Runtime 9.1 LTS ML mediante Databricks Runtime 10.4 LTS ML, la fracción de muestreo no depende del tipo de nodo del clúster ni de la cantidad de memoria de cada nodo.

En Databricks Runtime 11.x ML:

  • La fracción de muestreo aumenta para los nodos de trabajo que tienen más memoria por núcleo. Puede aumentar el tamaño de la muestra si elige un tipo de instancia optimizada para memoria.
  • También puede aumentar el tamaño de la muestra si elige un valor mayor para spark.task.cpus en la configuración de Spark para el clúster. El valor predeterminado es 1; el valor máximo es el número de CPU del nodo de trabajo. Al aumentar este valor, el tamaño de la muestra es mayor, pero se ejecutan menos pruebas en paralelo. Por ejemplo, en una máquina con cuatro núcleos y 64GB de RAM total, el spark.task.cpus=1 predeterminado ejecuta cuatro pruebas por trabajo, con cada prueba limitada a 16GB de RAM. Si establece spark.task.cpus=4, cada trabajo solo ejecuta una versión de prueba, pero esa versión de prueba puede usar 64GB de RAM.

En Databricks Runtime 12.2 LTS ML y versiones posteriores, AutoML se puede entrenar en conjuntos de datos más grandes mediante la asignación de más núcleos de CPU por tarea de entrenamiento. Puede aumentar el tamaño de la muestra eligiendo un tamaño de instancia con más memoria total.

En Databricks Runtime 11.3 LTS ML y versiones posteriores, si AutoML muestrea el conjunto de datos, la fracción de muestreo se muestra en la pestaña Información general de la interfaz de usuario.

Para problemas de clasificación, AutoML usa el método sampleBy PySpark para el muestreo estratificado para conservar la distribución de etiquetas de destino.

Para problemas de regresión, AutoML usa el método sample PySpark.

Compatibilidad con conjuntos de datos desequilibrados para problemas de clasificación

Tanto en Databricks Runtime 11.3 LTS ML como en las versiones posteriores, si AutoML detecta que un conjunto de datos está desequilibrado, intentará reducir el desequilibrio del conjunto de datos de entrenamiento mediante un proceso de reducción de muestreo de las clases principales y adición de ponderaciones de clase. AutoML solo equilibra el conjunto de datos de entrenamiento, no los de prueba y validación. Al hacerlo, se garantiza que el rendimiento del modelo siempre se evalúa en el conjunto de datos no enriquecido con la distribución de clase de entrada verdadera.

Para equilibrar un conjunto de datos de entrenamiento desequilibrado, AutoML usa ponderaciones de clase que están inversamente relacionadas con el grado por el que se reduce el muestreo de una clase determinada. Por ejemplo, si un conjunto de datos de entrenamiento con 100 muestras tiene 95 muestras pertenecientes a la clase A y cinco muestras pertenecientes a la clase B, AutoML reduce este desequilibrio al reducir el muestreo de la clase A a 70 muestras, es decir, la clase de muestreo inferior A por una proporción de 70/95 o 0,736 mientras mantiene el número de muestras de la clase B en 5. Para asegurarse de que el modelo final esta calibrado correctamente y de que la distribución de la probabilidad de la salida del modelo es la misma que la de la entrada, AutoML escala verticalmente la ponderación de la clase A utilizando la proporción 1/0,736 o 1,358, al tiempo que mantiene la ponderación de la clase B en 1. Luego, AutoML usa estas ponderaciones de clase en el entrenamiento del modelo como parámetro para asegurarse de que las muestras de cada clase se ponderan de forma correcta al entrenar el modelo.

Agregación de serie temporal

Para los problemas de previsión, cuando hay varios valores para una marca de tiempo en una serie temporal, AutoML usa el promedio de los valores.

Para usar la suma en su lugar, edite el cuaderno de código fuente generado por la versión de prueba. En la celda Agregar datos por..., cambie .agg(y=(target_col, "avg")) a .agg(y=(target_col, "sum")), como se muestra aquí:

group_cols = [time_col] + id_cols
df_aggregation = df_loaded \
  .groupby(group_cols) \
  .agg(y=(target_col, "sum")) \
  .reset_index() \
  .rename(columns={ time_col : "ds" })

Detección de tipos semánticos

Nota:

  • La detección de tipos semánticos no se aplica a los problemas de previsión.
  • AutoML no realiza la detección de tipos semánticos para las columnas que tienen especificados métodos de imputación personalizados.

Con Databricks Runtime 9.1 LTS ML y versiones posteriores, AutoML intenta detectar si las columnas tienen un tipo semántico diferente del tipo de datos Spark o pandas en el esquema de tabla. AutoML trata estas columnas como el tipo semántico detectado. Estas detecciones son el mejor esfuerzo y, a veces, pueden perder la existencia de tipos semánticos. También puede establecer manualmente el tipo semántico de una columna, o decirle a AutoML que no aplique la detección de tipos semánticos a una columna mediante anotaciones.

En concreto, AutoML realiza estos ajustes:

  • Las columnas de cadena e entero que representan datos de fecha o marca de tiempo se tratan como un tipo de marca de tiempo.
  • Las columnas de cadena que representan datos numéricos se tratan como un tipo numérico.

Con Databricks Runtime 10.1 ML y posteriores, AutoML también realiza estos ajustes:

  • Las columnas numéricas que contienen Ids. de categorías se tratan como una característica de categorías.
  • Las columnas de cadena que contienen texto en inglés se tratan como una característica de texto.

Anotaciones de tipos semánticos

Con Databricks Runtime 10.1 ML y versiones posteriores, puede controlar manualmente el tipo semántico asignado, colocando una anotación de tipo semántico en una columna. Para anotar manualmente el tipo semántico de una columna <column-name> como <semantic-type>, use la sintaxis siguiente:

metadata_dict = df.schema["<column-name>"].metadata
metadata_dict["spark.contentAnnotation.semanticType"] = "<semantic-type>"
df = df.withMetadata("<column-name>", metadata_dict)

<semantic-type> puede ser uno de los siguientes:

  • categorical: la columna contiene valores categóricos (por ejemplo, valores numéricos que deben tratarse como Ids.).
  • numeric: la columna contiene valores numéricos (por ejemplo, valores de cadena que se pueden analizar en números).
  • datetime: la columna contiene valores de marca de tiempo (valores de cadena, numéricos o de fecha, que se pueden convertir en marcas de tiempo).
  • text: la columna de cadena contiene texto en inglés.

Para deshabilitar la detección de tipos semánticos en una columna, use la anotación de palabra clave especial native.

Integración del Almacén de características

Con Databricks Runtime 11.3 LTS ML y superiores, puede utilizar tablas de características existentes en Almacén de características para aumentar el conjunto de datos de entrada original para sus problemas de clasificación y regresión.

Con Databricks Runtime 12.2 LTS ML y superior, puede utilizar las tablas de características existentes en Almacén de características para aumentar el conjunto de datos de entrada original para todos sus problemas de AutoML: clasificación, regresión y previsión.

Para crear una tabla de características, consulte Ingeniería y servicio de características.

Para usar tablas de características existentes, puede seleccionar las tablas de características con la interfaz de usuario de AutoML o establecer el parámetro feature_store_lookups en la especificación de ejecución de AutoML.

feature_store_lookups = [
  {
     "table_name": "example.trip_pickup_features",
     "lookup_key": ["pickup_zip", "rounded_pickup_datetime"],
  },
  {
      "table_name": "example.trip_dropoff_features",
     "lookup_key": ["dropoff_zip", "rounded_dropoff_datetime"],
  }
]

Cuaderno de ejemplo: experimento de AutoML con el Almacén de características

En el cuaderno siguiente se muestra cómo entrenar un modelo de ML con AutoML y tablas de características del almacén de características.

Experimento de AutoML con el cuaderno de ejemplo del Almacén de características

Obtener el cuaderno