Trénování modelů prognóz pomocí rozhraní Python API AutoML

Tento ukázkový poznámkový blok ukazuje, jak trénovat model prognózování časových řad v Databricks pomocí rozhraní API pro Python AutoML. Pomocí datové sady s počtem případů COVID-19 zavoláte automl.forecast() s denním horizontem 30 dnů, abyste mohli promítnout počty budoucích případů a poté načíst nejlepší model pomocí MLflow pro vygenerování a vykreslení prognóz.

Požadavky

Databricks Runtime pro Machine Learning 10.0 nebo novější.
Pokud chcete uložit predikce modelu, je nutné používat Databricks Runtime pro Machine Learning verze 10.5 nebo vyšší.

Datová sada COVID-19

Datová sada obsahuje záznamy o počtu případů viru COVID-19 podle data v USA s dalšími zeměpisnými informacemi. Cílem je předpovědět, kolik případů viru nastane během příštích 30 dnů v 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)

Trénování AutoML

Následující příkaz spustí spuštění AutoML. Musíte zadat sloupec, který má model předpovědět v argumentu target_col a sloupci času. Po dokončení spuštění můžete pomocí odkazu na nejlepší zkušební poznámkový blok prozkoumat trénovací kód.

Tento příklad také určuje:

  • horizon=30 a určete, že autoML by mělo předpovídat 30 dní do budoucnosti.
  • frequency="d" určete, že se má pro každý den poskytnout prognóza.
  • primary_metric="mdape" pro určení metriky, kterou chcete optimalizovat během trénování.

Poznámka:

automl.forecast() je k dispozici pouze na klasických výpočetních prostředcích.

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

Iterujte na modelu

  • Prozkoumejte poznámkové bloky a experimenty uvedené výše.
  • Pokud metriky pro nejlepší zkušební poznámkový blok vypadají dobře, můžete pokračovat další buňkou.
  • Pokud chcete vylepšit model vygenerovaný nejlepší zkušební verzí:
    • Přejděte do poznámkového bloku s nejlepší zkušební verzí a naklonujte ho.
    • Podle potřeby upravte poznámkový blok a vylepšete model.
    • Až budete s modelem spokojení, poznamenejte si identifikátor URI, ve kterém je uložen artefakt natrénovaného modelu. Přiřaďte tento identifikátor URI proměnné model_uri v další buňce.

Zobrazení predikovaných výsledků z nejlepšího modelu

Note: Tato část vyžaduje Databricks Runtime pro Machine Learning 10.5 nebo novější.

Načíst předpovědi z nejlepšího modelu

V Databricks Runtime pro strojové učení verze 10,5 nebo vyšší, pokud je poskytnuto output_database, AutoML uloží předpovědi z nejlepšího modelu.

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

Použití modelu pro prognózování

Příkazy v této části můžete použít s modulem Databricks Runtime pro Machine Learning 10.0 nebo vyšší.

Načtení modelu pomocí MLflow

MLflow umožňuje snadno importovat modely zpět do Python pomocí 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)

Použití modelu k vytváření prognóz

Volejte metodu modelu pro vygenerování prognóz.
V Databricks Runtime pro Machine Learning 10.5 nebo novější můžete nastavit include_history=False, abyste získali pouze predikovaná 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)

Vykreslete předpovězené body

V následujícím grafu zobrazuje tlustá černá čára datovou sadu časových řad a modrá čára je prognóza vytvořená modelem.

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

Registrace a nasazení modelu

Model natrénovaný autoML můžete zaregistrovat a nasadit stejně jako jakýkoli jiný model v registru modelů MLflow. Viz Zaznamenání, načtení a registrace modelů MLflow.

Řešení potíží: No module named pandas.core.indexes.numeric

Při poskytování modelu vytrénovaného autoML pomocí služby Model Serving se může zobrazit chyba No module named pandas.core.indexes.numeric. K tomu dochází v případě, že se pandas verze používaná službou AutoML liší od verze v prostředí koncového bodu obsluhy modelu. Řešení je následující:

  1. Stáhněte si skript add-pandas-dependency.py. Skript upraví requirements.txt a conda.yaml pro protokolovaný model, aby připnul pandas==1.5.3.
  2. Upravte skript tak, aby zahrnoval run_id běh MLflow, ve kterém byl model zaznamenán.
  3. Znovu zaregistrujte model.
  4. Obsluha nové verze modelu

Příklad notebooku

Trénování modelů prognóz pomocí rozhraní Python API AutoML

Získání poznámkového bloku

Další kroky

Referenční informace k rozhraní PYTHON API pro AutoML