Entraînez des modèles de prévision avec l'API Python d'AutoML
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.
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=30pour 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.
automl.forecast() n'est disponible que sur compute 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é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_uridans 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.
# 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 .
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.
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.
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()
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 :
- Download the script add-pandas-dependency.py. Le script modifie
requirements.txtetconda.yamlpour que le modèle enregistré pinpandas==1.5.3. - Modifiez le script pour inclure le
run_iddu run MLflow où le modèle a été enregistré. - Réenregistrez le modèle.
- Servez la nouvelle version du modèle.