Träna prognosmodeller med AutoML Python API

Den här exempelanteckningsboken visar hur du tränar en prognosmodell för tidsserier på Databricks med hjälp av AutoML-Python-API:et. Med hjälp av en dataset med COVID-19-fall anropar du automl.forecast() med en 30-dagars daglig horisont för att projicera antalet framtida fall och läser sedan in den bästa modellen med MLflow för att generera och plotta prognoser.

Requirements

Databricks Runtime för strojové učenie 10.0 eller senare.
För att spara modellförutsägelser krävs Databricks Runtime för strojové učenie version 10.5 eller senare.

COVID-19-datauppsättning

Datamängden innehåller poster för antalet fall av COVID-19-viruset efter datum i USA, med ytterligare geografisk information. Målet är att förutsäga hur många fall av viruset som kommer att inträffa under de kommande 30 dagarna i USA.

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)

AutoML-träning

Följande kommando startar en AutoML-körning. Du måste ange den kolumn som modellen ska förutsäga i target_col argumentet och tidskolumnen. När körningen är klar kan du följa länken till den bästa utvärderingsanteckningsboken för att undersöka träningskoden.

Det här exemplet anger också:

  • horizon=30 för att ange att AutoML ska prognostisera 30 dagar in i framtiden.
  • frequency="d" för att ange att en prognos ska anges för varje dag.
  • primary_metric="mdape" för att ange måttet som ska optimeras för under träningen.

Kommentar

automl.forecast() är endast tillgängligt för klassisk beräkning.

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

Iterera på modellen

  • Utforska notebook-filerna och experimenten som är länkade ovan.
  • Om måtten för den bästa utvärderingsanteckningsboken ser bra ut kan du fortsätta med nästa cell.
  • Om du vill förbättra den modell som genereras av den bästa utvärderingsversionen:
    • Gå till notebook-filen med den bästa utvärderingsversionen och klona den.
    • Redigera anteckningsboken efter behov för att förbättra modellen.
    • När du är nöjd med modellen bör du notera URI:n där artefakten för den tränade modellen loggas. Tilldela den här URI:n till variabeln model_uri i nästa cell.

Visa de förutsagda resultaten från den bästa modellen

Note: Det här avsnittet kräver Databricks Runtime för strojové učenie 10.5 eller senare.

Läsa in förutsägelser från den bästa modellen

Om output_database tillhandahålls i Databricks Runtime för strojové učenie 10.5 eller senare sparar AutoML förutsägelserna från den bästa modellen.

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

Använda modellen för prognostisering

Du kan använda kommandona i det här avsnittet med Databricks Runtime för strojové učenie 10.0 eller senare.

Läs in modellen med MLflow

Med MLflow kan du enkelt importera modeller tillbaka till Python med hjälp av 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)

Använd modellen för att göra prognoser

predict_timeseries Anropa modellmetoden för att generera prognoser.
I Databricks Runtime för strojové učenie 10.5 eller senare kan du ange include_history=False för att endast hämta förutsagda data.

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)

Rita de prognostiserade punkterna

I diagrammet nedan visar den tjocka svarta linjen datamängden tidsserie och den blå linjen är den prognos som skapas av modellen.

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

Registrera och distribuera modellen

Du kan registrera och distribuera en modell som tränats av AutoML som vilken annan modell som helst i MLflow Model Registry. Se Logga, läsa in och registrera MLflow-modeller.

Felsökning: No module named pandas.core.indexes.numeric

När du betjänar en AutoML-tränad modell med Mosaic AI Model Serving kan du se felet No module named pandas.core.indexes.numeric. Detta inträffar när den pandas version som används av AutoML skiljer sig från den i modellen som betjänar slutpunktsmiljön. Så här löser du följande:

  1. Ladda ned add-pandas-dependency.py skriptet. Skriptet redigerar requirements.txt och conda.yaml för att fästa pandas==1.5.3 till den loggade modellen.
  2. Redigera skriptet så att det inkluderar run_id för den MLflow-körning där modellen registrerades.
  3. Registrera modellen igen.
  4. Hantera den nya modellversionen.

Exempelanteckningsbok

Träna prognosmodeller med AutoML Python API

Hämta anteckningsbok

Nästa steg

AutoML Python API-referens.