Funcionamiento de AutoML de Azure Databricks

En este artículo se detalla cómo funciona AutoML de Azure Databricks y su implementación de conceptos como la imputación de valores que faltan y el muestreo de datos de gran tamaño.

AutoML de Databricks realiza lo siguiente:

  1. Prepara el conjunto de datos para el entrenamiento del modelo. Por ejemplo, AutoML lleva a cabo la detección de datos desequilibrados para problemas de clasificación antes del entrenamiento del modelo.
  2. Itera para entrenar y ajustar varios modelos, donde cada modelo se construye a partir de componentes de código abierto, y se puede editar e integrar fácilmente en las canalizaciones de aprendizaje automático.
    • AutoML distribuye automáticamente las pruebas de ajuste de hiperparámetros entre los nodos de trabajo de un clúster.
    • Gracias a Databricks Runtime 9.1 LTS ML o versiones posteriores, AutoML muestrea automáticamente el conjunto de datos, si es demasiado grande para caber en la memoria de un único nodo de trabajo. Vea Muestreo de grandes conjuntos de datos.
  3. Evalúa modelos basados en algoritmos de los paquetes scikit-learn, xgboost, LightGBM, Prophet y ARIMA.
  4. Muestra los resultados y proporciona un cuaderno de Python con el código fuente de cada ejecución de prueba para que pueda revisar, reproducir y modificar el código. AutoML también calcula las estadísticas de resumen del conjunto de datos y guarda esta información en un cuaderno que podrá revisar más adelante.

Algoritmos de AutoML

AutoML de Databricks entrena y evalúa modelos basados en los algoritmos de la tabla siguiente.

Nota:

Para los modelos de clasificación y regresión, el árbol de decisión, los bosques aleatorios, la regresión logística y la regresión lineal con algoritmos de descenso de gradiente estocástico se basan en Scikit-learn.

Modelos de clasificación Modelos de regresión Modelos de previsión
Árboles de decisión Árboles de decisión Prophet
Bosques aleatorios Bosques aleatorios Auto-ARIMA (disponible en Databricks Runtime 10.3 ML y posteriores).
Regresión logística Regresión lineal con descenso de gradiente estocástico
XGBoost XGBoost
LightGBM LightGBM

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)

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

Con Databricks Runtime 10.4 LTS ML y versiones posteriores, puedes especificar una columna de tiempo que se usará para la división de datos entrenamiento, validación y pruebas, en los problemas de clasificación y regresión. Si especifica esta columna, el conjunto de datos se divide, según la antigüedad, en entrenamiento, validación y conjuntos de prueba. Los puntos más antiguos se usan para el entrenamiento, los siguientes en antigüedad para la validación, y los puntos más recientes se usan de conjunto de pruebas. La columna de tiempo debe ser de marca de tiempo, de cadena o de entero.

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 4 núcleos y 64 GB de RAM total, el valor predeterminado spark.task.cpus=1 ejecuta 4 pruebas por trabajo con cada prueba limitada a 16 GB de RAM. Si establece spark.task.cpus=4, cada trabajo ejecuta solo una versión de prueba, pero esa versión de prueba puede usar 64 GB 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 mayor 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.

Respecto a los problemas de clasificación, AutoML usa el sampleBymétodo PySpark para el muestreo estratificado, conservando así la distribución de etiquetas de destino.

Para los problemas de regresión, AutoML usa el samplemétodo 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 que pertenecen a la clase A y 5 que pertenecen a la clase B, AutoML reduce este desequilibrio reduciendo el tamaño de la clase A a 70 muestras, es decir usando una proporción de 70/95 o 0,736, al tiempo que 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.

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 la mejor opción posible; en algunos casos, podrían pasar por alto 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 y entero que representan datos de fecha o de 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.

Valores de Shapley (SHAP) para la explicabilidad del modelo

Nota:

En el caso de MLR 11.1, y las versiones anteriores, no se generan trazados SHAP si el conjunto de datos contiene una columna datetime.

Los cuadernos generados por las ejecuciones de regresión y clasificación de AutoML incluyen código para calcular los valores de Shapley. Los valores de Shapley se basan en la teoría de juegos y estiman la importancia de cada característica en las predicciones de un modelo.

Los cuadernos de AutoML usan el paquete SHAP para calcular los valores de Shapley. Dado que estos cálculos consumen mucha memoria, no se realizan de forma predeterminada.

Para calcular y mostrar valores de Shapley:

  1. Vaya a la sección Importancia de la característica en un cuaderno de prueba generado por AutoML.
  2. Establezca shap_enabled = True.
  3. Vuelva a ejecutar el cuaderno.

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 cambiar el promedio por la suma de los valores, edite el cuaderno de código fuente. 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" })

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 ¿Qué es un almacén 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"],
  }
]

Generación de cuadernos de prueba

Para los experimentos de previsión, los cuadernos generados por AutoML se importan automáticamente al área de trabajo para todas las pruebas del experimento.

Para los experimentos de clasificación y regresión, los cuadernos generados por AutoML para la exploración de datos y la mejor prueba del experimento se importan automáticamente al área de trabajo. Los cuadernos generados para otras pruebas de experimentos se guardan como artefactos de MLflow en DBFS, en lugar de importarlos automáticamente en el área de trabajo. Para todas las pruebas además de la mejor prueba, no se establecen notebook_path ni notebook_url en la API de Python TrialInfo. Si necesita usar estos cuadernos, los puede importar manualmente en el área de trabajo con la interfaz de usuario del experimento de AutoML o la databricks.automl.import_notebookAPI de Python.

Si solo usa el cuaderno de exploración de datos o el de mejor prueba generado por AutoML, la columna Origen de la interfaz de usuario del experimento AutoML contiene el vínculo al cuaderno generado para la mejor prueba.

Si usa otros cuadernos generados en la interfaz de usuario del experimento de AutoML, estos no se importarán automáticamente en el área de trabajo. Puede encontrar los cuadernos si hace clic en cada ejecución de MLflow. El cuaderno de IPython se guarda en la sección Artefactos de la página de ejecución. Puede descargar este cuaderno e importarlo en el área de trabajo, si los administradores del área de trabajo han habilitado la descarga de artefactos.

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