Entraîner des modèles ML avec l’API Python Azure Databricks AutoML

Cet article montre comment entraîner un modèle avec Azure Databricks AutoML à l’aide de l’API. Consultez Qu’est-ce qu’AutoML ?. L’API Python fournit des fonctions permettant de démarrer des exécutions AutoML pour de la classification, de la régression et des prévisions. Chaque appel de fonction forme un ensemble de modèles et génère un bloc-notes d’évaluation pour chaque modèle.

Les étapes suivantes décrivent de manière générale comment configurer une expérience AutoML à l’aide de l’API :

  1. Créez un notebook et attachez-le à un cluster exécutant Databricks Runtime ML.
  2. Identifiez la table que vous souhaitez utiliser à partir de votre source de données existante ou chargez un fichier de données dans DBFS et créez une table.
  3. Pour démarrer une exécution AutoML, transmettez le nom de la table à la spécification d’API appropriée : classification, régression ou prévisions.
  4. Lors du démarrage de l’exécution de AutoML, une URL d’expérimentation MLflow s’affiche dans la console. Utilisez cette URL pour surveiller la progression de l’exécution. Actualisez l’expérience MLflow pour voir les évaluations au fur et à mesure de leur exécution.
  5. Une fois l’exécution de AutoML terminée :
    • Utilisez les liens de la synthèse de sortie pour accéder à l’expérience MLflow ou au bloc-notes qui a généré les meilleurs résultats.
    • Utilisez le lien vers le bloc-notes d’exploration de données pour accéder à des informations sur les données transmises à AutoML. Vous pouvez également joindre ce Notebook au même cluster et réexécuter le bloc-notes pour reproduire les résultats ou effectuer des analyses de données supplémentaires.
    • Utilisez l’objet Summary renvoyé par l’appel AutoML pour explorer des détails supplémentaires sur les versions d’évaluation ou pour charger un modèle formé par un essai donné. Découvrez plus en détail l’objet AutoMLSummary.
    • Clonez tout bloc-notes généré à partir des versions d’évaluation et réexécutez le bloc-notes en l’attachant au même cluster pour reproduire les résultats. Vous pouvez également apporter des modifications nécessaires et les réexécuter pour former des modèles supplémentaires et les enregistrer dans la même expérience.

Spécifications

Consultez les conditions relatives aux expériences AutoML.

Spécification relative à la classification

L’exemple de code suivant configure une exécution AutoML pour l’entraînement d’un modèle de classification. Pour obtenir des paramètres supplémentaires permettant de personnaliser davantage votre exécution AutoML, consultez Paramètres de classification et de régression.

Notes

Le paramètre max_trials est déconseillé dans Databricks Runtime 10.4 ML et n’est pas pris en charge dans Databricks Runtime 11.0 ML et versions ultérieures. Utilisez timeout_minutes pour contrôler la durée d’une exécution 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

Spécification relative à la régression

L’exemple de code suivant configure une exécution AutoML pour l’entraînement d’un modèle de régression. Pour obtenir des paramètres supplémentaires permettant de personnaliser davantage votre exécution AutoML, consultez Paramètres de classification et de régression.

Notes

Le paramètre max_trials est déconseillé dans Databricks Runtime 10.4 ML et n’est pas pris en charge dans Databricks Runtime 11.0 ML et versions ultérieures. Utilisez timeout_minutes pour contrôler la durée d’une exécution 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

Spécification relative aux prévisions

L’exemple de code suivant configure une exécution AutoML pour l’entraînement d’un modèle de prévision. Pour plus d’informations sur les paramètres de votre exécution AutoML, consultez Paramètres des prévisions. Pour utiliser la ARIMA automatique, la série chronologique doit avoir une fréquence régulière (autrement dit, l’intervalle entre deux points quelconques doit être le même dans toute la série chronologique). La fréquence doit correspondre à l’unité de fréquence spécifiée dans l’appel d’API. AutoML gère les étapes de temps manquantes en remplissant ces valeurs avec la valeur précédente.

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

Paramètres de classification et de régression

Notes

Pour les problèmes de classification et de régression uniquement, vous pouvez :

  • Spécifier les colonnes à inclure dans l’entraînement.
  • Sélectionner des méthodes d’imputation personnalisées.
Nom du champ Type Description
dataset str pandas.DataFrame pyspark.DataFrame pyspark.sql.DataFrame Nom de la table d’entrée ou DataFrame qui contient des fonctionnalités d’entraînement et une cible.

Le nom de la table peut être au format « .. » ou « . » pour les tables non Unity Catalog
target_col str Nom de colonne de l’étiquette cible.
data_dir chaîne de format
dbfs:/<folder-name>
(Facultatif) Chemin d’accès DBFS utilisé pour stocker le jeu de données d’apprentissage. Ce chemin d’accès est visible pour les nœuds de pilote et de travail.

Databricks recommande de laisser ce champ vide pour qu’AutoML puisse enregistrer le jeu de données d’apprentissage comme artifact MLflow.

Si un chemin d’accès personnalisé est spécifié, le jeu de données n’hérite pas des autorisations d’accès de l’expérience AutoML.
exclude_cols List[str] (Facultatif) Liste des colonnes à ignorer lors des calculs AutoML.

Par défaut : []
exclude_ frameworks List[str] (Facultatif) Liste des infrastructures d’algorithmes que AutoML ne doit pas prendre en compte au fur et à mesure qu’il développe des modèles. Valeurs possibles : liste vide, ou un ou plusieurs « sklearn », « lightgbm », « xgboost ».

Valeur par défaut : [] (toutes les infrastructures sont prises en compte)
experiment_dir str (Facultatif) Chemin d’accès au répertoire de l’espace de travail pour enregistrer les blocs-notes et les expériences générés.

Valeur par défaut : /Users/<username>/databricks_automl/
experiment_name str (Facultatif) Nom de l’expérience MLflow créée par AutoML.

Par défaut : Le nom est généré automatiquement.
feature_store_ lookups List[Dict] (Facultatif) Liste des dictionnaires qui représentent les caractéristiques de Feature Store pour l’augmentation des données. Les clés valides dans chaque dictionnaire sont les suivantes :

* table_name (str) : obligatoire. Nom de la table de caractéristiques.
* lookup_key (list ou str) : obligatoire. Noms de colonnes à utiliser sous forme de clé au moment de la jointure de la table de caractéristiques aux données passées dans le
paramètre dataset. L’ordre des noms de colonnes doit correspondre à l’ordre des clés primaires de la table de caractéristiques.
* timestamp_lookup_key (str) : obligatoire si la table spécifiée est une table de caractéristiques de séries chronologiques. Nom de colonne à utiliser au moment de l’exécution d’une recherche d’un instant dans le passé dans la table de caractéristiques avec les données passées dans le paramètre dataset.

Par défaut : []
imputers Dict [Str, Union [Str, dict [Str, Any]]] (Facultatif) Dictionnaire où chaque clé est un nom de colonne, et chaque valeur est une chaîne ou un dictionnaire décrivant la stratégie d’imputation. S’il est spécifié sous forme de chaîne, la valeur doit être « Mean », « median » ou « most_frequent ». Pour effectuer une imputation avec une valeur connue, spécifiez cette valeur en tant que dictionnaire
{"strategy": "constant", "fill_value": <desired value>}. Vous pouvez également spécifier des options de chaîne en tant que dictionnaires, par exemple {« Strategy » : « Mean »}.

Si aucune stratégie d’imputation n’est fournie pour une colonne, AutoML sélectionne une stratégie par défaut en fonction du type et du contenu de la colonne. Si vous spécifiez une méthode d’imputation autre que celle par défaut, AutoML n’effectue pas la détection de type sémantique.

Valeur par défaut : {}
max_trials int (Facultatif) Nombre maximal d’essais à exécuter.

Ce paramètre est disponible dans Databricks Runtime 10.5 ML et les versions antérieures, mais est déprécié à compter de Databricks Runtime 10.3 ML. Dans Databricks Runtime 11.0 ML et les versions ultérieures, ce paramètre n’est pas pris en charge.

Valeur par défaut : 20

Si timeout_minutes = None, AutoML exécute le nombre maximal d’essais.
pos_label Union[int, bool, str] (Classification uniquement) Classe positive. Cela est utile pour calculer des métriques telles que la précision et le rappel. Doit uniquement être spécifié pour les problèmes de classification binaire.
primary_metric str Métrique utilisée pour évaluer et classer les performances du modèle.

Mesures prises en charge pour la régression : « R2 » (par défaut), « Mae », « RMSE », « MSE »

Mesures prises en charge pour la classification : « F1 » (par défaut), « log_loss », « précision », « précision », « roc_auc »
time_col str Disponible dans Databricks Runtime 10.1 et ultérieur.

(Facultatif) Nom de colonne pour une colonne d’heure.

S’il est fourni, AutoML essaie de fractionner le jeu de données en jeux d’apprentissage, de validation et de test par ordre chronologique, en utilisant les points les plus anciens comme données d’apprentissage et les points les plus récents en tant que jeu de test.

Les types de colonne acceptés sont l'horodatage et les entiers. Avec Databricks Runtime 10.2 ML et versions ultérieures, les colonnes de chaîne sont également prises en charge. Si le type de colonne est String, AutoML essaie de le convertir en timestamp à l’aide de la détection sémantique. Si la conversion échoue, l’exécution de AutoML échoue.
timeout_minutes int (Facultatif) Durée d’attente maximale pour l’exécution des versions d’évaluation de AutoML. Des délais d’attente plus longs permettent à AutoML d’exécuter plus d’essais et d’identifier un modèle avec une meilleure précision.

Par défaut : 120 minutes

Valeur minimale : 5 minutes

Une erreur est signalée si le délai d’expiration est trop faible pour permettre l’exécution d’au moins une version d’évaluation.

Paramètres des prévisions

Nom du champ Type Description
dataset str

pandas.DataFrame pyspark.DataFrame pyspark.sql.DataFrame
Nom de la table d’entrée ou DataFrame qui contient des fonctionnalités d’entraînement et une cible.

Le nom de la table peut être au format « .. » ou « . » pour les tables non Unity Catalog
target_col str Nom de colonne de l’étiquette cible.
time_col str Nom de la colonne de temps pour la prévision.
frequency str Fréquence de la série chronologique pour les prévisions. Il s’agit de la période avec laquelle les événements sont supposés se produire. Le paramètre par défaut est « D », pour données quotidiennes. Veillez à modifier le paramètre si vos données ont une fréquence différente.

Valeurs possibles :

“W” (semaines)

« D »/« jours »/« jour »

« heures »/« heure »/« hr »/« h »

"m"/"minute"/"min"/"minutes"/"T"

« S »/« secondes »/« sec »/« seconde »

Les éléments suivants sont uniquement disponibles avec Databricks Runtime 12.0 ML et les versions ultérieures :

« M » / « month » / « months »

« Q » / « quarter » / « quarters »

« Y » / « year » / « years »

Valeur par défaut : « D »
horizon int Nombre de périodes dans le futur pour lesquelles les prévisions doivent être retournées. Les unités sont la fréquence de la série temporelle. Valeur par défaut : 1.
data_dir chaîne de format
dbfs:/<folder-name>
(Facultatif) Chemin d’accès DBFS utilisé pour stocker le jeu de données d’apprentissage. Ce chemin d’accès est visible pour les nœuds de pilote et de travail.

Databricks recommande de laisser ce champ vide pour qu’AutoML puisse enregistrer le jeu de données d’apprentissage comme artifact MLflow.

Si un chemin d’accès personnalisé est spécifié, le jeu de données n’hérite pas des autorisations d’accès de l’expérience AutoML.
exclude_ frameworks List[str] (Facultatif) Liste des infrastructures d’algorithmes que AutoML ne doit pas prendre en compte au fur et à mesure qu’il développe des modèles. Valeurs possibles : liste vide, ou un ou plusieurs « prophet », « arima ». Valeur par défaut : [] (toutes les infrastructures sont prises en compte)
experiment_dir str (Facultatif) Chemin d’accès au répertoire de l’espace de travail pour enregistrer les blocs-notes et les expériences générés.

Valeur par défaut : /Users/<username>/databricks_automl/
experiment_name str (Facultatif) Nom de l’expérience MLflow créée par AutoML.

Par défaut : Le nom est généré automatiquement.
feature_store_ lookups List[Dict] (Facultatif) Liste des dictionnaires qui représentent les caractéristiques de Feature Store pour l’augmentation des données. Les clés valides dans chaque dictionnaire sont les suivantes :

* table_name (str) : obligatoire. Nom de la table de caractéristiques.
* lookup_key (list ou str) : obligatoire. Noms de colonnes à utiliser sous forme de clé au moment de la jointure de la table de caractéristiques aux données passées dans le
paramètre dataset. L’ordre des noms de colonnes doit correspondre à l’ordre des clés primaires de la table de caractéristiques.
* timestamp_lookup_key (str) : obligatoire si la table spécifiée est une table de caractéristiques de séries chronologiques. Nom de colonne à utiliser au moment de l’exécution d’une recherche d’un instant dans le passé dans la table de caractéristiques avec les données passées dans le paramètre dataset.

Par défaut : []
identity_col Union[str, list] (Facultatif) Colonne (s) qui identifient la série chronologique pour les prévisions de plusieurs séries. AutoML regroupe ces colonnes et la colonne heure pour les prévisions.
output_database str (Facultatif) Si fournie, AutoML enregistre les prédictions du meilleur modèle dans une nouvelle table de la base de données spécifiée.

Valeur par défaut : Les prédictions ne sont pas enregistrées.
primary_metric str Métrique utilisée pour évaluer et classer les performances du modèle. Mesures prises en charge : « smape » (par défaut) « mse », « rmse », « mae » ou « mdape ».
timeout_minutes int (Facultatif) Durée d’attente maximale pour l’exécution des versions d’évaluation de AutoML. Des délais d’attente plus longs permettent à AutoML d’exécuter plus d’essais et d’identifier un modèle avec une meilleure précision.

Par défaut : 120 minutes

Valeur minimale : 5 minutes

Une erreur est signalée si le délai d’expiration est trop faible pour permettre l’exécution d’au moins une version d’évaluation.
country_code str Disponible dans Databricks Runtime 12.0 ML et les versions ultérieures. Pris en charge uniquement par le modèle de prévision Prophet.

(Facultatif) Code du pays à deux lettres, qui indique les jours fériés du pays que le modèle de prévision doit utiliser. Pour ignorer les jours fériés, affectez une chaîne vide ("") à ce paramètre. Pays pris en charge.

Par défaut : US (jours fériés aux États-Unis).

Retourne

AutoMLSummary

Objet de résumé pour une exécution AutoML qui décrit les métriques, les paramètres et d'autres détails pour chacun des essais. Vous utilisez également cet objet pour charger le modèle formé par une version d’évaluation spécifique.

Propriété Type Description
expérience mlflow.entities.Experiment Expérience MLflow utilisée pour enregistrer les essais.
essais List[TrialInfo] Liste contenant des informations sur tous les essais exécutés.
best_trial TrialInfo Informations sur la version d’évaluation qui a abouti au meilleur score pondéré pour la métrique principale.
metric_distribution str Distribution des scores pondérés pour la métrique principale dans tous les essais.
output_table_name str Utilisé avec la prévision uniquement et uniquement si output_database est fourni. Nom de la table dans output_database contenant les prédictions du modèle.

TrialInfo

Objet Résumé pour chaque essai individuel.

Propriété Type Description
notebook_path Facultatif[str] Chemin d’accès au bloc-notes généré pour cette version d’évaluation dans l’espace de travail. Pour la classification et la régression, cette valeur est définie uniquement pour le meilleur essai, tandis que tous les autres essais ont la valeur définie sur None. Pour la prévision, cette valeur est présente pour tous les essais
notebook_url Facultatif[str] URL du bloc-notes généré pour cette version d’évaluation. Pour la classification et la régression, cette valeur est définie uniquement pour le meilleur essai, tandis que tous les autres essais ont la valeur définie sur None. Pour la prévision, cette valeur est présente pour tous les essais
artifact_uri Facultatif[str] URI d'artefact MLflow pour le notebook généré.
mlflow_run_id str ID d’exécution MLflow associé à cette exécution d’essai.
Mesures Dict[str, float] Les métriques enregistrées dans MLflow pour cette version d’évaluation.
params Dict[str, str] Les paramètres consignés dans MLflow qui ont été utilisés pour cette version d’évaluation.
model_path str URL de l’artefact MLflow du modèle formé dans cette version d’évaluation.
model_description str Brève description du modèle et des hyperparamètres utilisés pour l’apprentissage de ce modèle.
duration str Durée du retard en minutes
préprocesseurs str Description des préprocesseurs exécutée avant d’effectuer l’apprentissage du modèle.
evaluation_metric_score float Score de la métrique principale, évalué pour le jeu de données de validation.
Méthode Description
load_model() Chargez le modèle généré dans cette version d’évaluation, enregistré en tant qu’artefact MLflow.

Importer un notebook

Pour importer un notebook enregistré en tant qu'artefact MLflow, utilisez l’API 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
    """

Un exemple d’utilisation :

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)

Inscrire et déployer un modèle

Vous pouvez inscrire et déployer votre modèle AutoML entraîné comme n’importe quel modèle inscrit dans le registre de modèles MLflow. Consultez Journaliser, charger, enregistrer et déployer des modèles MLflow.

Aucun module nommé 'pandas.core.indexes.numeric

Lors de la distribution d’un modèle créé à l’aide d’AutoML avec le service de modèle, vous pouvez obtenir l’erreur suivante : No module named 'pandas.core.indexes.numeric.

Cela est dû à une version pandas incompatible entre AutoML et l’environnement de point de terminaison de service du modèle. Vous pouvez résoudre cette erreur en exécutant le script add-pandas-dependency.py. Le script modifie requirements.txt et conda.yaml pour que votre modèle journalisé inclue la version de dépendance appropriée pandas : pandas==1.5.3.

  1. Modifiez le script pour inclure le run_id de l’exécution MLflow où votre modèle a été journalisé.
  2. Réinscrire le modèle dans le registre de modèles MLflow.
  3. Essayez de servir la nouvelle version du modèle MLflow.

Exemples de notebooks

Passez en revue ces blocs-notes pour commencer à utiliser AutoML.

Le notebook suivant explique comment effectuer une classification avec AutoML.

Exemple de bloc-notes AutoML classification

Obtenir le notebook

Le notebook suivant explique comment effectuer une régression avec AutoML.

Exemple de bloc-notes AutoML régression

Obtenir le notebook

Le notebook suivant explique comment effectuer des prévisions avec AutoML.

Bloc-notes d'exemples de prévisions AutoML

Obtenir le notebook

Le notebook suivant explique comment entraîner un modèle ML avec des tables de fonctionnalités AutoML et Feature Store.

Exemple de notebook d’expérience AutoML avec Feature Store

Obtenir le notebook