Entraîner des modèles de prévision avec l’API Python AutoML

Cet exemple de notebook montre comment entraîner un modèle de prévision de séries temporelles sur Databricks à l’aide de l’API Python AutoML. Avec un jeu de données du nombre de cas de COVID-19, vous utilisez automl.forecast() avec un horizon quotidien de 30 jours pour projeter le nombre futur de cas, puis chargez le meilleur modèle avec MLflow pour générer et représenter graphiquement les prévisions.

Spécifications

Databricks Runtime pour Machine Learning 10.0 ou version ultérieure.
Pour enregistrer les prédictions de modèle, Databricks Runtime pour Machine Learning 10.5 ou version ultérieure.

Jeu de données COVID-19

Le jeu de données contient des enregistrements pour le nombre de cas du virus COVID-19 par date aux États-Unis, avec des informations géographiques supplémentaires. L’objectif est de prévoir le nombre de cas du virus qui se produisent au cours des 30 prochains jours aux États-Unis.

import pyspark.pandas as ps
df = ps.read_csv("/databricks-datasets/COVID/covid-19-data")
df["date"] = ps.to_datetime(df['date'], errors='coerce')
df["cases"] = df["cases"].astype(int)
display(df)

Entraînement AutoML

La commande suivante démarre une exécution AutoML. Vous devez fournir la colonne que le modèle doit prédire dans l’argument target_col et la colonne de temps. Une fois l'exécution terminée, vous pouvez suivre le lien vers le meilleur carnet de notes d'essai pour examiner le code de formation.

Cet exemple spécifie également :

  • horizon=30 pour spécifier que AutoML devrait prévoir 30 jours à l’avenir.
  • frequency="d" pour spécifier qu’une prévision doit être fournie pour chaque jour.
  • primary_metric="mdape" pour spécifier la métrique à optimiser pendant l’entraînement.

Remarque

automl.forecast() est disponible uniquement sur le calcul classique.

import databricks.automl
import logging

# Disable informational messages from fbprophet
logging.getLogger("py4j").setLevel(logging.WARNING)

# Note: If you are running Databricks Runtime for Machine Learning 10.4 or below, use this line instead:
# summary = databricks.automl.forecast(df, target_col="cases", time_col="date", horizon=30, frequency="d",  primary_metric="mdape")

summary = databricks.automl.forecast(df, target_col="cases", time_col="date", horizon=30, frequency="d",  primary_metric="mdape", output_database="default")

Itérer sur le modèle

  • Explorez les notebooks et les expériences mentionnés ci-dessus.
  • Si les métriques pour le bloc-notes d’évaluation le mieux adapté sont bonnes, vous pouvez continuer avec la cellule suivante.
  • Si vous souhaitez améliorer le modèle généré par la meilleure version d’évaluation :
    • Accédez au notebook ayant le meilleur essai et clonez-le.
    • Modifiez le bloc-notes si nécessaire pour améliorer le modèle.
    • Lorsque vous êtes satisfait du modèle, notez l’URI où l’artefact associé au modèle entraîné est enregistré. Affectez cet URI à la model_uri variable dans la cellule suivante.

Afficher les résultats prédits du meilleur modèle

Note : Cette section nécessite Databricks Runtime pour Machine Learning 10.5 ou version ultérieure.

Charger des prédictions à partir du meilleur modèle

Dans Databricks Runtime pour Machine Learning 10.5 ou version ultérieure, si output_database est fourni, AutoML enregistre les prédictions à partir du meilleur modèle.

# Load the saved predictions.
forecast_pd = spark.table(summary.output_table_name)
display(forecast_pd)

Utiliser le modèle pour la prévision

Vous pouvez utiliser les commandes de cette section avec Databricks Runtime pour Machine Learning 10.0 ou version ultérieure.

Charger le modèle avec MLflow

MLflow vous permet d’importer facilement des modèles dans Python à l’aide de l'trial_id AutoML.

import mlflow.pyfunc
from mlflow.tracking import MlflowClient

run_id = MlflowClient()
trial_id = summary.best_trial.mlflow_run_id

model_uri = "runs:/{run_id}/model".format(run_id=trial_id)
pyfunc_model = mlflow.pyfunc.load_model(model_uri)

Utiliser le modèle pour effectuer des prévisions

Appelez la méthode de predict_timeseries modèle pour générer des prévisions.
Dans Databricks Runtime pour Machine Learning 10.5 ou version ultérieure, vous pouvez définir include_history=False pour obtenir les données prédites uniquement.

forecasts = pyfunc_model._model_impl.python_model.predict_timeseries()
display(forecasts)

# Option for Databricks Runtime for Machine Learning 10.5 or above
# forecasts = pyfunc_model._model_impl.python_model.predict_timeseries(include_history=False)

Tracer les points de prévision

Dans le tracé ci-dessous, la ligne noire épaisse montre le jeu de données de série chronologique et la ligne bleue est la prévision créée par le modèle.

df_true = df.groupby("date").agg(y=("cases", "avg")).reset_index().to_pandas()
import matplotlib.pyplot as plt

fig = plt.figure(facecolor='w', figsize=(10, 6))
ax = fig.add_subplot(111)
forecasts = pyfunc_model._model_impl.python_model.predict_timeseries(include_history=True)
fcst_t = forecasts['ds'].dt.to_pydatetime()
ax.plot(df_true['date'].dt.to_pydatetime(), df_true['y'], 'k.', label='Observed data points')
ax.plot(fcst_t, forecasts['yhat'], ls='-', c='#0072B2', label='Forecasts')
ax.fill_between(fcst_t, forecasts['yhat_lower'], forecasts['yhat_upper'],
                color='#0072B2', alpha=0.2, label='Uncertainty interval')
ax.legend()
plt.show()

Inscrire et déployer le modèle

Vous pouvez inscrire et déployer un modèle entraîné par AutoML comme n’importe quel autre modèle dans le registre de modèles MLflow. Consultez journalisation, chargement et enregistrement des modèles MLflow.

Dépannage: No module named pandas.core.indexes.numeric

Lorsque vous servez un modèle AutoML entraîné avec Mosaic AI Model Serving, vous pouvez voir l’erreur No module named pandas.core.indexes.numeric. Cela se produit lorsque la pandas version utilisée par AutoML diffère de celle de l’environnement de point de terminaison de service du modèle. Pour résoudre les problèmes suivants :

  1. Téléchargez le script add-pandas-dependency.py. Le script modifie requirements.txt et conda.yaml pour épingler pandas==1.5.3 au modèle journalisé.
  2. Modifiez le script pour inclure le run_id de l'exécution MLflow où le modèle a été enregistré.
  3. Réinscrivez le modèle.
  4. Servez la nouvelle version du modèle.

Exemple de bloc-notes

Entraîner des modèles de prévision avec l’API Python AutoML

Obtenir un ordinateur portable

Étapes suivantes

Informations de référence sur l’API Python AutoML.