Előrejelzési modellek betanítása az AutoML Python API-val

Ez a példajegyzetfüzet bemutatja, hogyan taníthat be idősorozat-előrejelzési modellt a Databricksen az AutoML Python API használatával. A COVID-19 esetszám adathalmaz használatával 30 napos napi előrejelzéssel meghívja a automl.forecast() függvényt a jövőbeli esetszámok előrejelzéséhez, majd betölti a legjobb modellt az MLflow-val az előrejelzések generálásához és ábrázolásához.

Requirements

Databricks Runtime a Machine Learning 10.0-s vagy újabb verziójához.
A modell-előrejelzések mentéséhez a Databricks Runtime for Machine Learning 10.5-ös vagy újabb verzióval lehet rendelkező rendszer szükséges.

COVID-19-adatkészlet

Az adatkészlet az USA-ban dátum szerint tartalmazza a COVID-19 vírus eseteinek számát, további földrajzi adatokkal. A cél az előrejelzés, hogy hány esetben fordul elő a vírus az elkövetkező 30 napban az USA-ban.

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-betanítás

Az alábbi parancs elindít egy AutoML-futtatási parancsot. Meg kell adnia azt az oszlopot, amelyet a modellnek előre kell jeleznie az target_col argumentumban és az időoszlopban. A futtatás befejezése után a legjobb próbaverziós jegyzetfüzetre mutató hivatkozást követve megvizsgálhatja a betanítási kódot.

Ez a példa a következőket is megadja:

  • horizon=30 annak megadásához, hogy az AutoML-nek 30 napot kell előre jeleznie a jövőben.
  • frequency="d" annak meghatározásához, hogy minden napra vonatkozóan előrejelzést kell-e adni.
  • primary_metric="mdape" a betanítás során optimalizálni kívánt metrika megadásához.

Feljegyzés

automl.forecast() csak klasszikus számítási környezetben érhető el.

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

Iteráljuk a modellt

  • Megismerheti a fent hivatkozott jegyzetfüzeteket és kísérleteket.
  • Ha a legjobb próbaverziós jegyzetfüzet metrikái jól néznek ki, folytathatja a következő cellával.
  • Ha javítani szeretne a legjobb próbaverzió által létrehozott modellen:
    • Nyissa meg a jegyzetfüzetet a legjobb próbaverzióval, és klónozza.
    • A modell továbbfejlesztéséhez szükség szerint szerkessze a jegyzetfüzetet.
    • Ha elégedett a modellel, jegyezze fel az URI-t, ahol a betanított modell összetevőjének naplózása történik. Rendelje hozzá ezt az URI-t a model_uri következő cellában lévő változóhoz.

A legjobb modell előrejelzett eredményeinek megjelenítése

Megjegyzés: Ehhez a szakaszhoz a 10.5-ös vagy újabb Databricks Futtatókörnyezet szükséges a gépi tanuláshoz.

Előrejelzések betöltése a legjobb modellből

A Databricks Runtime for Machine Learning 10.5 vagy újabb verziójában, ha output_database van megadva, az AutoML menti az előrejelzéseket a legjobb modellből.

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

A modell használata előrejelzéshez

Az ebben a szakaszban található parancsokat a Databricks Runtime Machine Learning 10.0-s vagy újabb verziójához használhatja.

A modell betöltése az MLflow használatával

Az MLflow lehetővé teszi, hogy egyszerűen importáljon vissza modelleket a Pythonba az AutoML trial_id használatával.

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)

Előrejelzések készítése a modell használatával

Hívja meg a predict_timeseries modellmetódust az előrejelzések létrehozásához.
A Databricks Runtime for Machine Learning 10.5 vagy újabb verziójában beállíthatja include_history=False csak az előrejelzett adatok lekérésére.

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)

Az előrejelzett pontok ábrázolása

Az alábbi ábrán a vastag fekete vonal az idősor adatkészletét jeleníti meg, a kék vonal pedig a modell által létrehozott előrejelzés.

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

A modell regisztrálása és üzembe helyezése

Regisztrálhat és üzembe helyezhet egy AutoML által betanított modellt, mint bármely más modellt az MLflow Modellregisztrációs adatbázisában. Lásd: MLflow-modellek naplózása, betöltése és regisztrálása.

Hibaelhárítás: No module named pandas.core.indexes.numeric

Ha AutoML-betanított modellt szolgál ki a Model Service szolgáltatással, a hiba No module named pandas.core.indexes.numericjelenhet meg. Ez akkor fordul elő, ha az pandas AutoML által használt verzió eltér a végpontkörnyezetet kiszolgáló modell verziójától. A probléma megoldása:

  1. Töltse le a add-pandas-dependency.py szkriptet. A szkript szerkeszti a requirements.txt és conda.yaml elemeket a naplózott modell számára, hogy rögzítse a pandas==1.5.3.
  2. Szerkessze a szkriptet annak az MLflow-futtatásnak a run_id beillesztéséhez, ahol a modellt naplózták.
  3. Regisztrálja újra a modellt.
  4. Az új modellverzió kiszolgálása.

Példajegyzetfüzet

Előrejelzési modellek betanítása az AutoML Python API-val

Jegyzetfüzet lekérése

Következő lépések

AutoML Python API-referencia.