Aller au contenu principal

Entraînez des modèles de prévision avec l'API Python d'AutoML

Ouvrir dans Databricks

Ce Notebook d'exemple montre comment entraîner un modèle de prévision de séries chronologiques sur Databricks à l'aide de l'API Python AutoML. À l'aide d'un dataset de nombre de cas de COVID-19, vous appelez automl.forecast() avec un horizon quotidien de 30 jours pour projeter les futurs nombres de cas, puis vous chargez le meilleur modèle avec MLflow pour générer et tracer des prévisions.

Exigences

Databricks Runtime for Machine Learning 10.0 ou version supérieure.
Pour enregistrer les prédictions du modèle, Databricks Runtime for Machine Learning 10.5 ou version ultérieure est requis.

dataset COVID-19

Le dataset contient des enregistrements du 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 combien de cas du virus se produiront au cours des 30 prochains jours aux États-Unis.

Python
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)

Formation AutoML

La commande suivante start 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 Link vers le meilleur Notebook d'essai pour examiner le code d'entraînement.

Cet exemple spécifie également :

  • horizon=30 pour spécifier qu'AutoML doit prévoir 30 jours à l'avance.
  • 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() n'est disponible que sur compute classique.

Python
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érimentations liés ci-dessus.
  • Si les métriques pour le meilleur notebook d’essai semblent bonnes, vous pouvez continuer avec la cellule suivante.
  • Si vous souhaitez améliorer le modèle généré par le meilleur essai :
    • Allez au notebook avec le meilleur essai et clonez-le.
    • Modifiez le Notebook au besoin pour améliorer le modèle.
    • Lorsque vous êtes satisfait du modèle, notez l'URI où est enregistré l'artefact du modèle entraîné. Attribuez cet URI à la variable model_uri dans la cellule suivante.

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

**Remarque :** Cette section nécessite Databricks Runtime for Machine Learning 10,5 ou supérieur.

Charger les prédictions du meilleur modèle

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

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

Utilisez le modèle pour la prévision

Vous pouvez utiliser les commandes de cette section avec Databricks Runtime for Machine Learning 10.0 ou supérieur.

Charger le modèle avec MLflow

MLflow vous permet d'importer facilement des modèles dans Python en utilisant l'AutoML trial_id .

Python
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)

Utilisez le modèle pour faire des prévisions

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

Python
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 prévus.

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

Python
df_true = df.groupby("date").agg(y=("cases", "avg")).reset_index().to_pandas()
Python
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()

Enregistrer et déployer le modèle

Vous pouvez enregistrer et déployer un modèle entraîné par AutoML comme n'importe quel autre modèle dans le MLflow Model Registry. Découvrez comment consigner, charger et enregistrer les modèles MLflow.

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

Lors du déploiement d’un modèle entraîné par AutoML avec Model Serving, vous pouvez voir l’erreur No module named pandas.core.indexes.numeric. Cela se produit lorsque la version pandas utilisée par AutoML diffère de celle de l'environnement de l'Endpoint de déploiement de modèles. Pour résoudre :

  1. Download the script add-pandas-dependency.py. Le script modifie requirements.txt et conda.yaml pour que le modèle enregistré pin pandas==1.5.3.
  2. Modifiez le script pour inclure le run_id du run MLflow où le modèle a été enregistré.
  3. Réenregistrez le modèle.
  4. Servez la nouvelle version du modèle.

Exemple de Notebook

Former des modèles de prévision avec l'API Python d'AutoML.

Étapes suivantes

Référence de l'API Python AutoML.