Prognosemodellen trainen met De AutoML Python-API

In dit voorbeeldnotitieblok ziet u hoe u een tijdreeksprognosemodel traint op Databricks met behulp van de AutoML-Python-API. Met behulp van een gegevensset voor COVID-19-aantallen gevallen, roept u automl.forecast() aan met een dagelijkse horizon van 30 dagen om toekomstige aantallen gevallen te projecteren. Vervolgens laadt u het beste model met MLflow om prognoses te genereren en weer te geven.

Requirements

Databricks Runtime voor Machine Learning 10.0 of hoger.
Om modelvoorspellingen op te slaan, heb je Databricks Runtime voor Machine Learning 10.5 of hoger nodig.

COVID-19-gegevensset

De gegevensset bevat records voor het aantal gevallen van het COVID-19-virus op datum in de VS, met aanvullende geografische informatie. Het doel is om te voorspellen hoeveel gevallen van het virus de komende 30 dagen in de VS zullen optreden.

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-training

Met de volgende opdracht wordt een AutoML-uitvoering gestart. U moet de kolom opgeven die het model moet voorspellen in het target_col argument en de tijdkolom. Wanneer de uitvoering is voltooid, kunt u de koppeling naar het beste proefnotitieblok volgen om de trainingscode te onderzoeken.

In dit voorbeeld wordt ook het volgende opgegeven:

  • horizon=30 om op te geven dat AutoML 30 dagen in de toekomst moet voorspellen.
  • frequency="d" om op te geven dat er elke dag een prognose moet worden opgegeven.
  • primary_metric="mdape" om de metriek te bepalen die tijdens de training moet worden geoptimaliseerd.

Notitie

automl.forecast() is alleen beschikbaar voor klassieke berekeningen.

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

Itereren op het model

  • Bekijk de notebooks en experimenten die hierboven zijn gekoppeld.
  • Als de metrische gegevens voor het beste proefnotitieblok er goed uitzien, kunt u doorgaan met de volgende cel.
  • Als u het model wilt verbeteren dat is gegenereerd door de beste proefversie:
    • Ga naar het notebook met de beste proefversie en kloon het.
    • Bewerk het notitieblok indien nodig om het model te verbeteren.
    • Wanneer u tevreden bent met het model, noteert u de URI waar het artefact voor het getrainde model wordt geregistreerd. Wijs deze URI toe aan de model_uri variabele in de volgende cel.

De voorspelde resultaten van het beste model weergeven

Note: Voor deze sectie is Databricks Runtime vereist voor Machine Learning 10,5 of hoger.

Voorspellingen laden van het beste model

In Databricks Runtime voor Machine Learning 10,5 of hoger, als output_database is opgegeven, worden de voorspellingen van het beste model door AutoML opgeslagen.

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

Het model gebruiken voor prognose

U kunt de opdrachten in deze sectie gebruiken met Databricks Runtime voor Machine Learning 10.0 of hoger.

Het model laden met MLflow

Met MLflow kunt u eenvoudig modellen naar Python importeren met behulp van de 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)

Het model gebruiken om prognoses te maken

Roep de predict_timeseries modelmethode aan om prognoses te genereren.
In Databricks Runtime voor Machine Learning 10,5 of hoger kunt u include_history=False instellen om alleen de voorspelde gegevens op te halen.

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)

De voorspelde punten uitzetten

In de onderstaande plot toont de dikke zwarte lijn de gegevensset voor tijdreeksen en de blauwe lijn is de prognose die door het model is gemaakt.

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

Het model registreren en implementeren

U kunt een model registreren en implementeren dat is getraind door AutoML, net als elk ander model in het MLflow-modelregister. Zie MLflow-modellen voor logboeken, laden en registreren.

Probleemoplossing: No module named pandas.core.indexes.numeric

Wanneer u een met AutoML getraind model met Mosaic AI Model Serving bedient, ziet u mogelijk de fout No module named pandas.core.indexes.numeric. Dit gebeurt wanneer de pandas versie die wordt gebruikt door AutoML verschilt van de versie in het model dat eindpuntomgeving bedient. U lost dit als volgt op:

  1. Download het add-pandas-dependency.py script. Het script bewerkt requirements.txt en conda.yaml voor het vastgelegde model om pandas==1.5.3 vast te zetten.
  2. Bewerk het script om de run_id-identificator van de MLflow-run op te nemen waarin het model is vastgelegd.
  3. Registreer het model opnieuw.
  4. Beheer de nieuwe modelversie.

Voorbeeld van notebook

Prognosemodellen trainen met De AutoML Python-API

Notitieblok ophalen

Volgende stappen

AutoML Python API-referentie.