Trainieren von Prognosemodellen mit der AutoML Python-API

Dieses Beispielnotizbuch zeigt, wie Sie mithilfe der AutoML-Python-API ein Prognosemodell für Zeitreihen auf Databricks trainieren. Bei der Verwendung eines COVID-19-Fallzahl-Datasets rufen Sie automl.forecast() mit einem täglichen 30-Tage-Horizont auf, um zukünftige Fallzahlen zu prognostizieren. Anschließend laden Sie das beste Modell mit MLflow, um Prognosen zu erstellen und zu visualisieren.

Anforderungen

Databricks Runtime für Machine Learning 10.0 oder höher.
Um Modellvorhersagen zu speichern, wird Databricks Runtime für Machine Learning 10.5 oder höher benötigt.

COVID-19-Dataset

Das Dataset enthält Datensätze für die Anzahl der Fälle des COVID-19-Virus nach Datum in den USA mit zusätzlichen geografischen Informationen. Ziel ist es, zu prognostizieren, wie viele Fälle des Virus in den nächsten 30 Tagen in den USA auftreten werden.

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

Der folgende Befehl startet eine AutoML-Ausführung. Sie müssen die Spalte angeben, die das Modell im target_col Argument und in der Zeitspalte vorhersagen soll. Wenn die Ausführung abgeschlossen ist, können Sie dem Link zum besten Testnotizbuch folgen, um den Schulungscode zu untersuchen.

In diesem Beispiel wird auch Folgendes angegeben:

  • horizon=30 um anzugeben, dass AutoML 30 Tage in die Zukunft prognostizieren soll.
  • frequency="d" um anzugeben, dass für jeden Tag eine Prognose bereitgestellt werden soll.
  • primary_metric="mdape" um die Metrik anzugeben, die während der Schulung optimiert werden soll.

Hinweis

automl.forecast() ist nur auf der klassischen Berechnung verfügbar.

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

Iterieren des Modells

  • Erkunden Sie die oben verknüpften Notizbücher und Experimente.
  • Wenn die Metriken für das beste Testnotizbuch gut aussehen, können Sie mit der nächsten Zelle fortfahren.
  • Wenn Sie das von der besten Testversion generierte Modell verbessern möchten:
    • Wechseln Sie zum Notizbuch mit der besten Testversion, und klonen Sie es.
    • Bearbeiten Sie das Notizbuch nach Bedarf, um das Modell zu verbessern.
    • Wenn Sie mit dem Modell zufrieden sind, beachten Sie den URI, unter dem das Artefakt des trainierten Modells protokolliert wird. Weisen Sie diese URI der model_uri Variablen in der nächsten Zelle zu.

Anzeigen der vorhergesagten Ergebnisse aus dem besten Modell

Note: Dieser Abschnitt erfordert Databricks Runtime für Machine Learning 10.5 oder höher.

Vorhersagen aus dem besten Modell laden

Wenn output_database bereitgestellt wird, speichert AutoML in Databricks Runtime für Machine Learning 10,5 oder höher die Vorhersagen aus dem besten Modell.

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

Verwenden des Modells für die Prognose

Sie können die Befehle in diesem Abschnitt mit Databricks Runtime für Machine Learning 10.0 oder höher verwenden.

Laden des Modells mit MLflow

Mit MLflow können Sie Modelle mithilfe des AutoML-trial_id problemlos in Python importieren.

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)

Verwenden des Modells zum Erstellen von Prognosen

Rufen Sie die predict_timeseries Modellmethode auf, um Prognosen zu generieren.
In Databricks Runtime für Machine Learning 10.5 oder höher können Sie include_history=False festlegen, um nur die vorhergesagten Daten abzurufen.

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)

Zeichnen der prognostizierten Punkte

In der Zeichnung unten zeigt die dicke schwarze Linie das Zeitreihen-Dataset an, und die blaue Linie ist die vom Modell erstellte Prognose.

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

Registrieren und Bereitstellen des Modells

Sie können ein von AutoML trainiertes Modell wie jedes andere Modell in der MLflow-Modellregistrierung registrieren und bereitstellen. Weitere Informationen finden Sie unter Protokollieren, Laden und Registrieren von MLflow-Modellen.

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

Wenn Sie ein AutoML-trainiertes Modell mit Mosaik AI Model Serving bedienen, wird möglicherweise der Fehler No module named pandas.core.indexes.numericangezeigt. Dies geschieht, wenn die von AutoML verwendete pandas Version von der Version in der Modellbereitstellungsendpunktumgebung abweicht. Behebung:

  1. Laden Sie das skript add-pandas-dependency.py herunter. Das Skript bearbeitet requirements.txt und conda.yaml für das protokollierte Modell, um pandas==1.5.3 anzupinnen.
  2. Bearbeiten Sie das Skript, um die run_id der MLflow-Ausführung, in der das Modell protokolliert wurde, einzuschließen.
  3. Registrieren Sie das Modell erneut.
  4. Stellen Sie die neue Modellversion bereit.

Beispiel-Notebook

Trainieren von Prognosemodellen mit der AutoML Python-API

Notebook abrufen

Nächste Schritte

AutoML Python-API-Referenz.