Eseguire l'addestramento di modelli di previsione con l'API AutoML di Python

Questo notebook di esempio illustra come eseguire il training di un modello di previsione di serie temporali in Databricks usando l'API di Python AutoML. Usando un set di dati del conteggio dei casi di COVID-19, si utilizza automl.forecast() con un orizzonte giornaliero di 30 giorni per proiettare i casi futuri, quindi si carica il modello migliore con MLflow per generare e tracciare le stime.

Requisiti

Databricks Runtime per Machine Learning 10.0 o versione successiva.
Per salvare le predizioni del modello, è necessario utilizzare Databricks Runtime per Machine Learning versione 10.5 o successiva.

Set di dati COVID-19

Il set di dati contiene record per il numero di casi del virus COVID-19 per data negli Stati Uniti, con informazioni geografiche aggiuntive. L'obiettivo è prevedere il numero di casi del virus che si verificheranno nei prossimi 30 giorni negli Stati Uniti.

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)

Addestramento AutoML

Il comando seguente avvia un'esecuzione autoML. È necessario specificare la colonna che il modello deve prevedere nell'argomento target_col e nella colonna temporale. Al termine dell'esecuzione, puoi seguire il collegamento per il notebook di prova migliore e esaminare il codice di addestramento.

Questo esempio specifica anche:

  • horizon=30 per specificare che AutoML dovrebbe prevedere 30 giorni in futuro.
  • frequency="d" per specificare che deve essere fornita una previsione per ogni giorno.
  • primary_metric="mdape" per specificare la metrica da ottimizzare durante il training.

Nota

automl.forecast() è disponibile solo nel calcolo classico.

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

Iterare sul modello

  • Esplorare i notebook e gli esperimenti collegati sopra.
  • Se le metriche per il notebook di prova sembrano positive, è possibile continuare con la cella successiva.
  • Per migliorare il modello generato dal migliore tentativo:
    • Vai al notebook con la miglior prova e clonalo.
    • Modificare il notebook in base alle esigenze per migliorare il modello.
    • Quando si è soddisfatti del modello, prendere nota dell'URI in cui viene registrato l'artefatto per il modello sottoposto a training. Assegnare questo URI alla model_uri variabile nella cella successiva.

Visualizzare i risultati stimati dal modello migliore

Note: Questa sezione richiede Databricks Runtime per Machine Learning 10.5 o versione successiva.

Caricare stime dal modello migliore

In Databricks Runtime per Machine Learning 10.5 o versione successiva, se viene fornito output_database, AutoML salva le stime dal modello migliore.

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

Usare il modello per la previsione

È possibile usare i comandi in questa sezione con Databricks Runtime per Machine Learning 10.0 o versione successiva.

Caricare il modello con MLflow

MLflow consente di importare facilmente modelli in Python usando 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)

Usare il modello per effettuare previsioni

Chiamare il predict_timeseries metodo del modello per generare previsioni.
In Databricks Runtime per Machine Learning 10.5 o versione successiva è possibile impostare include_history=False per ottenere solo i dati stimati.

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)

Tracciare i punti previsti

Nel tracciato seguente la linea nera spessa mostra il set di dati time series e la linea blu è la previsione creata dal modello.

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

Registrare e distribuire il modello

È possibile registrare e distribuire un modello sottoposto a training da AutoML come qualsiasi altro modello nel Registro modelli MLflow. Consulta Registrare, caricare e registrare modelli MLflow.

Risoluzione dei problemi relativi: No module named pandas.core.indexes.numeric

Quando si serve un modello addestrato automaticamente con Mosaic AI Model Serving, è possibile che venga visualizzato l'errore No module named pandas.core.indexes.numeric. Ciò si verifica quando la pandas versione usata da AutoML è diversa da quella nell'ambiente endpoint di gestione del modello. Per risolvere:

  1. Scaricare lo script add-pandas-dependency.py. Lo script modifica requirements.txt e conda.yaml per fissare pandas==1.5.3 al modello registrato.
  2. Modificare lo script per includere l'ID run_id dell'esecuzione di MLflow in cui è stato registrato il modello.
  3. Registrare nuovamente il modello.
  4. Distribuire la nuova versione del modello.

Notebook di esempio

Eseguire l'addestramento di modelli di previsione con l'API AutoML di Python

Ottieni il notebook

Passaggi successivi

Informazioni di riferimento sulle API Python autoML.