Entrenamiento de modelos de ML con la API de Python de AutoML en Azure Databricks

En este artículo se muestra cómo entrenar un modelo con AutoML de Azure Databricks mediante la API. Obtenga más información sobre ¿Qué es AutoML?. La API de Python proporciona funciones para iniciar las ejecuciones de AutoML de clasificación, regresión y previsión. Cada llamada de función entrena un conjunto de modelos y genera un cuaderno de prueba para cada modelo.

En los pasos siguientes se describe a grandes rasgos cómo configurar un experimento de AutoML mediante la API:

  1. Cree un cuaderno y adjúntelo a un clúster que ejecute Databricks Runtime ML.
  2. Identifique qué tabla desea usar desde el origen de datos existente o cargue un archivo de datos en DBFS y cree una tabla.
  3. Para iniciar una ejecución de AutoML, pase el nombre de tabla a la especificación de API adecuada: clasificación, regresión o previsión.
  4. Cuando se inicia la ejecución de AutoML, aparece una URL del experimento de MLflow en la consola. Use esta URL para supervisar el progreso de la ejecución. Actualice el experimento de MLflow para ver las pruebas a medida que se completan.
  5. Una vez completada la ejecución de AutoML:
    • Use los vínculos del resumen de salida para ir al experimento de MLflow o al cuaderno que generó los mejores resultados.
    • Use el vínculo al cuaderno de exploración de datos para obtener información sobre los datos pasados a AutoML. También puede adjuntar este cuaderno al mismo clúster y volver a ejecutar el cuaderno para reproducir los resultados o realizar análisis de datos adicionales.
    • Use el objeto de resumen devuelto por la llamada a AutoML para explorar más detalles sobre las pruebas, o para cargar un modelo entrenado por una prueba determinada. Obtenga más información sobre el objeto AutoMLSummary.
    • Clone los cuadernos generados a partir de las pruebas, y vuelva a ejecutar el cuaderno asociándolo al mismo clúster para reproducir los resultados. También puede realizar las modificaciones necesarias y volver a ejecutarlas, para entrenar modelos adicionales y registrarlos en el mismo experimento.

Requisitos

Consulte los requisitos para los experimentos de AutoML.

Especificación de clasificación

En el ejemplo de código siguiente se configura una ejecución de AutoML para entrenar un modelo de clasificación. Para obtener parámetros adicionales para personalizar aún más la ejecución de AutoML, consulte Parámetros de clasificación y regresión.

Nota:

El parámetro max_trials está en desuso en Databricks Runtime 10.4 ML y no es compatible con Databricks Runtime 11.0 ML y versiones posteriores. Use timeout_minutes para controlar la duración de una ejecución de AutoML.

databricks.automl.classify(
  dataset: Union[pyspark.sql.DataFrame, pandas.DataFrame, pyspark.pandas.DataFrame, str],
  *,
  target_col: str,
  data_dir: Optional[str] = None,
  exclude_cols: Optional[List[str]] = None,                      # <DBR> 10.3 ML and above
  exclude_frameworks: Optional[List[str]] = None,                   # <DBR> 10.3 ML and above
  experiment_dir: Optional[str] = None,                             # <DBR> 10.4 LTS ML and above
  experiment_name: Optional[str] = None,                            # <DBR> 12.1 ML and above
  feature_store_lookups: Optional[List[Dict]] = None,               # <DBR> 11.3 LTS ML and above
  imputers: Optional[Dict[str, Union[str, Dict[str, Any]]]] = None, # <DBR> 10.4 LTS ML and above
  max_trials: Optional[int] = None,                                 # <DBR> 10.5 ML and below
  pos_label: Optional[Union[int, bool, str] = None,                 # <DBR> 11.1 ML and above
  primary_metric: str = "f1",
  time_col: Optional[str] = None,
  timeout_minutes: Optional[int] = None,
) -> AutoMLSummary

Especificación de regresión

En el ejemplo de código siguiente se configura una ejecución de AutoML para entrenar un modelo de regresión. Para obtener parámetros adicionales para personalizar aún más la ejecución de AutoML, consulte Parámetros de clasificación y regresión.

Nota:

El parámetro max_trials está en desuso en Databricks Runtime 10.4 ML y no es compatible con Databricks Runtime 11.0 ML y versiones posteriores. Use timeout_minutes para controlar la duración de una ejecución de AutoML.

databricks.automl.regress(
  dataset: Union[pyspark.sql.DataFrame, pandas.DataFrame, pyspark.pandas.DataFrame, str],
  *,
  target_col: str,
  data_dir: Optional[str] = None,
  exclude_cols: Optional[List[str]] = None,                      # <DBR> 10.3 ML and above
  exclude_frameworks: Optional[List[str]] = None,                   # <DBR> 10.3 ML and above
  experiment_dir: Optional[str] = None,                             # <DBR> 10.4 LTS ML and above
  experiment_name: Optional[str] = None,                            # <DBR> 12.1 ML and above
  feature_store_lookups: Optional[List[Dict]] = None,               # <DBR> 11.3 LTS ML and above
  imputers: Optional[Dict[str, Union[str, Dict[str, Any]]]] = None, # <DBR> 10.4 LTS ML and above
  max_trials: Optional[int] = None,                                 # <DBR> 10.5 ML and below
  primary_metric: str = "r2",
  time_col: Optional[str] = None,
  timeout_minutes: Optional[int] = None,
) -> AutoMLSummary

Especificación de previsión

En el ejemplo de código siguiente se configura una ejecución de AutoML para entrenar un modelo de previsión. Para obtener más información sobre los parámetros de la ejecución de AutoML, consulte Parámetros de previsión. Para usar Auto-ARIMA, la serie temporal debe tener una frecuencia regular (es decir, el intervalo entre dos puntos cualquiera debe ser el mismo a lo largo de la serie temporal). La frecuencia debe coincidir con la unidad de frecuencia especificada en la llamada API. AutoML controla los pasos de tiempo que faltan, rellenando esos valores con el valor anterior.

databricks.automl.forecast(
  dataset: Union[pyspark.sql.DataFrame, pandas.DataFrame, pyspark.pandas.DataFrame, str],
  *,
  target_col: str,
  time_col: str,
  country_code: str = "US",                                         # <DBR> 12.0 ML and above
  data_dir: Optional[str] = None,
  exclude_frameworks: Optional[List[str]] = None,
  experiment_dir: Optional[str] = None,
  experiment_name: Optional[str] = None,                            # <DBR> 12.1 ML and above
  feature_store_lookups: Optional[List[Dict]] = None,               # <DBR> 12.2 LTS ML and above
  frequency: str = "D",
  horizon: int = 1,
  identity_col: Optional[Union[str, List[str]]] = None,
  output_database: Optional[str] = None,                            # <DBR> 10.5 ML and above
  primary_metric: str = "smape",
  timeout_minutes: Optional[int] = None,
) -> AutoMLSummary

Parámetros de clasificación y regresión

Nota:

Para problemas únicamente de clasificación y regresión, puede hacer lo siguiente:

  • Especificar las columnas que se van a incluir en el entrenamiento.
  • Seleccionar métodos de imputación personalizados.
Nombre del campo Tipo Descripción
dataset str pandas.DataFrame pyspark.DataFrame pyspark.sql.DataFrame Nombre de tabla de entrada o DataFrame que contiene características de entrenamiento y destino.

El nombre de la tabla puede tener el formato ".." o "." para tablas que no son de Unity Catalog
target_col str Nombre de columna de la etiqueta de destino.
data_dir str de formato
dbfs:/<folder-name>
(Opcional) ruta de accesoDBFS que se usa para almacenar el conjunto de datos de entrenamiento. Esta ruta de acceso es visible para los nodos de controlador y de trabajo.

Databricks recomienda dejar este campo vacío, por lo que AutoML puede guardar el conjunto de datos de entrenamiento como un artefacto de MLflow.

Si se especifica una ruta de acceso personalizada, el conjunto de datos no hereda los permisos de acceso del experimento de AutoML.
exclude_cols List[str] (Opcional) Lista de columnas que se omitirán durante los cálculos de AutoML.

Default: []
exclude_ frameworks List[str] (Opcional) Lista de marcos de algoritmos que AutoML no debe tener en cuenta a medida que desarrolla modelos. Valores posibles: lista vacía, o uno o varios entre "sklearn", "lightgbm", o "xgboost".

Valor predeterminado: [] (se tienen en cuenta todos los marcos)
experiment_dir str (Opcional) Ruta de acceso al directorio del área de trabajo, para guardar los cuadernos y experimentos generados.

Predeterminado: /Users/<username>/databricks_automl/
experiment_name str (Opcional) Nombre del experimento de MLflow que crea AutoML.

Valor predeterminado: el nombre se genera automáticamente.
feature_store_ lookups List[Dict] (Opcional) Lista de diccionarios que representan características del Almacén de características para el aumento de datos. Las claves válidas de cada diccionario son:

* table_name (cadena): obligatorio. Nombre de la tabla de características.
* lookup_key (lista o cadena): obligatorio. Nombres de columna que se usarán como clave al unir la tabla de características con los datos pasados en
el parámetro dataset. El orden de los nombres de columna debe coincidir con el orden de las claves principales de la tabla de características.
* timestamp_lookup_key (cadena): obligatorio si la tabla especificada es una tabla de características de serie temporal. Nombre de columna que se va a usar al realizar una búsqueda a un momento dado en la tabla de características con los datos pasados en el parámetro dataset.

Default: []
imputers Dict[str, Union[str, Dict[str, Any]]] (Opcional) Diccionario donde cada clave es un nombre de columna, y cada valor es una cadena o diccionario que describe la estrategia de imputación. Si se especifica como una cadena, el valor debe ser "mean", "median" o "most_frequent". Para imputar con un valor conocido, especifique el valor como un diccionario
{"strategy": "constant", "fill_value": <desired value>}. También puede especificar opciones de cadena como diccionarios, por ejemplo {"strategy": "mean"}.

Si no se proporciona ninguna estrategia de imputación para una columna, AutoML selecciona una estrategia predeterminada basada en el tipo de columna y el contenido. Si elige un método de imputación distinto del predeterminado, AutoML no realiza la detección de tipos semánticos.

Predeterminado: {}
max_trials int (Opcional) Número máximo de pruebas que se ejecutarán.

Este parámetro está disponible en Databricks Runtime 10.5 ML y versiones anteriores, pero está en desuso a partir de Databricks Runtime 10.3 ML. En Databricks Runtime 11.0 ML y versiones posteriores, este parámetro no es compatible.

Valor predeterminado: 20

Si timeout_minutes=None, AutoML ejecuta el número máximo de pruebas.
pos_label Union[int, bool, str] (Solo clasificación) La clase positiva. Esto es útil para calcular métricas como la precisión y la coincidencia. Solo se debe especificar para problemas de clasificación binaria.
primary_metric str Métrica usada para evaluar y clasificar el rendimiento del modelo.

Métricas admitidas para la regresión: "r2" (valor predeterminado), "mae", "rmse", "mse"

Métricas admitidas para la clasificación: "f1" (valor predeterminado), "log_loss", "precision", "accuracy", "roc_auc"
time_col str Disponible en Databricks Runtime 10.1 ML y versiones posteriores.

(Opcional) Nombre de columna de una columna de tiempo.

Si se proporciona, AutoML intenta dividir el conjunto de datos en entrenamiento, validación y conjuntos de prueba cronológicamente, usando los puntos más antiguos como datos de entrenamiento y los puntos más recientes como conjunto de pruebas.

Los tipos de columna aceptados son el de marca de tiempo y el entero. Con Databricks Runtime 10.2 ML y posteriores, también se admiten columnas de cadena. Si el tipo de columna es el de cadena, AutoML intenta convertirlo en el de marca de tiempo mediante la detección semántica. Si se produce un error en la conversión, se produce un error en la ejecución de AutoML.
timeout_minutes int (Opcional) Tiempo máximo para esperar a que se completen las pruebas de AutoML. Los tiempos de espera más largos permiten que AutoML ejecute más pruebas e identifique un modelo con mayor precisión.

Predeterminado: 120 minutos

Valor mínimo: 5 minutos

Se notifica un error si el tiempo de espera es demasiado corto como para permitir que se complete, al menos, una prueba.

Parámetros de previsión

Nombre del campo Tipo Descripción
dataset str

pandas.DataFrame pyspark.DataFrame pyspark.sql.DataFrame
Nombre de tabla de entrada o DataFrame que contiene características de entrenamiento y destino.

El nombre de la tabla puede tener el formato ".." o "." para tablas que no son de Unity Catalog
target_col str Nombre de columna de la etiqueta de destino.
time_col str Nombre de la columna de tiempo para la previsión.
frequency str Frecuencia de la serie temporal para la previsión. Este es el período con el que se espera que se produzcan eventos. El valor predeterminado es "D" o datos diarios. Asegúrese de cambiar la configuración si los datos tienen una frecuencia diferente.

Valores posibles:

"W" ("weeks" = semanas)

"D" / "days" / "day" (día/s)

"hours" / "hour" / "hr" / "h" (hora/s)

"m" / "minute" / "min" / "minutes" / "T" (minuto/s)

"S" / "seconds" / "sec" / "second" (segundo/s)

Los siguientes solo están disponibles con Databricks Runtime 12.0 ML y versiones posteriores:

“M” / “mes” / “meses”

“Q” / “trimestre” / “trimestres”

“Y” / “año” / “años”

Valor predeterminado: "D"
horizon (horizonte) int Número de períodos en el futuro para los que se deben devolver las previsiones. Las unidades son la frecuencia de la serie temporal. Valor predeterminado: 1
data_dir str de formato
dbfs:/<folder-name>
(Opcional) ruta de accesoDBFS que se usa para almacenar el conjunto de datos de entrenamiento. Esta ruta de acceso es visible para los nodos de controlador y de trabajo.

Databricks recomienda dejar este campo vacío, por lo que AutoML puede guardar el conjunto de datos de entrenamiento como un artefacto de MLflow.

Si se especifica una ruta de acceso personalizada, el conjunto de datos no hereda los permisos de acceso del experimento de AutoML.
exclude_ frameworks List[str] (Opcional) Lista de marcos de algoritmos que AutoML no debe tener en cuenta a medida que desarrolla modelos. Valores posibles: lista vacía, o uno o varios entre "prophet" o "arima". Valor predeterminado: [] (se tienen en cuenta todos los marcos)
experiment_dir str (Opcional) Ruta de acceso al directorio del área de trabajo, para guardar los cuadernos y experimentos generados.

Predeterminado: /Users/<username>/databricks_automl/
experiment_name str (Opcional) Nombre del experimento de MLflow que crea AutoML.

Valor predeterminado: el nombre se genera automáticamente.
feature_store_ lookups List[Dict] (Opcional) Lista de diccionarios que representan características del Almacén de características para el aumento de datos. Las claves válidas de cada diccionario son:

* table_name (cadena): obligatorio. Nombre de la tabla de características.
* lookup_key (lista o cadena): obligatorio. Nombres de columna que se usarán como clave al unir la tabla de características con los datos pasados en
el parámetro dataset. El orden de los nombres de columna debe coincidir con el orden de las claves principales de la tabla de características.
* timestamp_lookup_key (cadena): obligatorio si la tabla especificada es una tabla de características de serie temporal. Nombre de columna que se va a usar al realizar una búsqueda a un momento dado en la tabla de características con los datos pasados en el parámetro dataset.

Default: []
identity_col Union[str, list] (Opcional) Columna/s que identifican la serie temporal para la previsión de varias series. AutoML agrupa por esta/s columna/s y la columna de tiempo para la previsión.
output_database str (Opcional) Si se proporciona, AutoML guarda las predicciones del mejor modelo en una nueva tabla de la base de datos especificada.

Valor predeterminado: las predicciones no se guardan.
primary_metric str Métrica usada para evaluar y clasificar el rendimiento del modelo. Métricas admitidas: "smape" (valor predeterminado) "mse", "rmse", "mae" o "mdape".
timeout_minutes int (Opcional) Tiempo máximo para esperar a que se completen las pruebas de AutoML. Los tiempos de espera más largos permiten que AutoML ejecute más pruebas e identifique un modelo con mayor precisión.

Predeterminado: 120 minutos

Valor mínimo: 5 minutos

Se notifica un error si el tiempo de espera es demasiado corto como para permitir que se complete, al menos, una prueba.
country_code str Disponible en Databricks Runtime 12.0 ML y versiones posteriores. Solo es compatible con el modelo de previsión Prophet.

(Opcional) Código de país de dos letras que indica los días festivos del país que debe usar el modelo de previsión. Para pasar por alto los días festivos, establezca este parámetro en una cadena vacía (""). Países admitidos.

Valor predeterminado: EE. UU. (Días festivos de Estados Unidos).

Devuelve

AutoMLSummary

Objeto de resumen de una ejecución de AutoML, que describe las métricas, los parámetros y otros detalles de cada una de las pruebas. También se usa este objeto para cargar el modelo entrenado por una prueba específica.

Propiedad Tipo Descripción
experimento mlflow.entities.Experiment El experimento de MLflow usado para registrar las pruebas.
puebas List[TrialInfo] Una lista que contiene información sobre todas las pruebas que se ejecutaron.
best_trial TrialInfo Información sobre la prueba que dio lugar a la mejor puntuación ponderada para la métrica principal.
metric_distribution str La distribución de puntuaciones ponderadas, para la métrica principal, en todas las pruebas.
output_table_name str Se usa solo con la previsión y solo si se proporciona output_database. Nombre de la tabla en output_database que contiene las predicciones del modelo.

TrialInfo

Objeto de resumen para cada prueba individual.

Propiedad Tipo Descripción
notebook_path Opcional[str] La ruta de acceso al cuaderno generado, para esta prueba, en el área de trabajo. Para la clasificación y la regresión, este valor solo se establece para la mejor prueba, mientras que las demás pruebas tienen el valor establecido en None. Para la previsión, este valor está presente para todas las pruebas.
notebook_url Opcional[str] La URL del cuaderno generado para esta prueba. Para la clasificación y la regresión, este valor solo se establece para la mejor prueba, mientras que las demás pruebas tienen el valor establecido en None. Para la previsión, este valor está presente para todas las pruebas.
artifact_uri Opcional[str] Identificador URI del artefacto de MLflow para el cuaderno generado.
mlflow_run_id str El Id. de ejecución de MLflow asociado a esta ejecución de prueba.
Métricas Dict[str, float] Las métricas registradas en MLflow para esta prueba.
params Dict[str, str] Los parámetros registrados en MLflow que se usaron para esta prueba.
model_path str La URL del artefacto de MLflow del modelo entrenado en esta prueba.
model_description str Breve descripción del modelo y los hiperparámetros usados para entrenar este modelo.
duration str Duración del entrenamiento en minutos.
preprocessors str Descripción de los preprocesadores que se ejecutan antes de entrenar el modelo.
evaluation_metric_score FLOAT Puntuación de la métrica principal, evaluada para el conjunto de datos de validación.
Método Descripción
load_model() Cargue el modelo generado en esta prueba, registrado como un artefacto de MLflow.

Importación de un cuaderno

Para importar un cuaderno que se ha guardado como un artefacto de MLflow, use la API de Python databricks.automl.import_notebook.

def import_notebook(artifact_uri: str, path: str, overwrite: bool = False) -> ImportNotebookResult:
    """
    Import a trial notebook, saved as an MLflow artifact, into the workspace.

    :param artifact_uri: The URI of the MLflow artifact that contains the trial notebook.
    :param path: The path in the Databricks workspace where the notebook should be imported. This must be an absolute path. The directory will be created if it does not exist.
    :param overwrite: Whether to overwrite the notebook if it already exists. It is `False` by default.

    :return: ImportNotebookResult contains two fields, `path` and `url`, referring to the imported notebook
    """

Ejemplo de uso:

summary = databricks.automl.classify(...)
result = databricks.automl.import_notebook(summary.trials[5].artifact_uri, "/Users/you@yourcompany.com/path/to/directory")
print(result.path)
print(result.url)

Registro e implementación de un modelo

Puede registrar e implementar el modelo entrenado de AutoML igual que cualquier modelo registrado en el registro de modelos de MLflow. Consulte Registro, carga, registro e implementación de modelos de MLflow.

No hay ningún módulo denominado pandas.core.indexes.numeric

Al atender un modelo compilado mediante AutoML con el servicio de modelos, puede obtener este error: No module named 'pandas.core.indexes.numeric.

Esto se debe a una versión de pandas incompatible entre AutoML y el entorno de punto de conexión del servicio de modelos. Para resolver este error, ejecute el script add-pandas-dependency.py. El script edita requirements.txt y conda.yaml para que el modelo registrado incluya la versión de dependencia adecuada pandas: pandas==1.5.3.

  1. Modifique el script para incluir el run_id de la ejecución de MLflow donde se ha registrado el modelo.
  2. Vuelva a registrar el modelo en el registro del modelo de MLflow.
  3. Pruebe a servir la nueva versión del modelo de MLflow.

Ejemplos de cuadernos

Revise estos cuadernos para empezar a trabajar con AutoML.

El siguiente cuaderno muestra cómo hacer la clasificación con AutoML.

Cuaderno de ejemplo de clasificación de AutoML

Obtener el cuaderno

El siguiente cuaderno muestra cómo hacer una regresión con AutoML.

Cuaderno de ejemplo de regresión de AutoML

Obtener el cuaderno

El siguiente cuaderno muestra cómo hacer previsiones con AutoML.

Cuaderno de ejemplo de previsión de AutoML

Obtener el cuaderno

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