AutoML Python API'siyle tahmin modellerini eğitin

Bu örnek not defteri, AutoML Python API'sini kullanarak Databricks'te bir zaman serisi tahmin modelini eğitmeyi gösterir. COVID-19 vaka sayısı veri kümesini kullanarak, gelecekteki vaka sayılarını yansıtmak için 30 günlük bir süre için c0 fonksiyonunu çağırırsınız; ardından en iyi modeli MLflow ile yüklersiniz ve tahminleri oluşturup çizersiniz.

Requirements

Machine Learning 10.0 veya üzeri için Databricks Runtime.
Model tahminlerini kaydetmek için Machine Learning 10.5 veya üzeri için Databricks Runtime.

COVID-19 veri kümesi

Veri kümesi, ABD'de tarihe göre COVID-19 virüsünün vaka sayısına ilişkin kayıtları ve ek coğrafi bilgileri içerir. Amaç, ABD'de önümüzdeki 30 gün içinde virüs vakalarının sayısını tahmin etmektir.

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 eğitimi

Aşağıdaki komut bir AutoML çalıştırması başlatır. Modelin tahmin etmesi gereken sütun target_col argümanında ve zaman sütununda belirlenmelidir. Çalıştırma tamamlandığında, eğitim kodunu incelemek için en iyi deneme not defterinin bağlantısını izleyebilirsiniz.

Bu örnek ayrıca şunları belirtir:

  • horizon=30 AutoML'nin gelecekte 30 gün tahmin etmesi gerektiğini belirtmek için.
  • frequency="d" her gün için bir tahmin sağlanması gerektiğini belirtmek için.
  • primary_metric="mdape" öğesini eğitim sırasında optimize edilecek metriği belirtmek için kullanın.

Not

automl.forecast() yalnızca klasik işlemde kullanılabilir.

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

Modeli yineleyin

  • Yukarıda bağlantılı not defterlerini ve denemeleri keşfedin.
  • En iyi deneme defteri ölçütleri iyi görünüyorsa, sonraki hücreye geçebilirsiniz.
  • En iyi deneme sürümü tarafından oluşturulan modeli geliştirmek istiyorsanız:
    • En iyi deneme sürümünü içeren not defterine gidin ve kopyalayın.
    • Modeli geliştirmek için not defterini gerektiği gibi düzenleyin.
    • Modelden memnun olduğunuzda, eğitilen modelin kaydedildiği URI'yi not edin. Bu URI'yi model_uri sonraki hücredeki değişkene atayın.

En iyi modelden tahmin edilen sonuçları gösterme

Note: Bu bölüm, Machine Learning 10.5 veya üzeri için Databricks Runtime gerektirir.

En iyi modelden tahminleri yükleme

Machine Learning 10.5 veya üzeri için Databricks Runtime'da output_database sağlanmışsa, AutoML tahminleri en iyi modelden kaydeder.

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

Tahmin için modeli kullanma

Bu bölümdeki komutları Machine Learning 10.0 veya üzeri için Databricks Runtime ile kullanabilirsiniz.

Modeli MLflow ile yükleme

MLflow, AutoML trial_id kullanarak modelleri kolayca Python içeri aktarmanızı sağlar.

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)

Tahmin yapmak için modeli kullanma

predict_timeseries Tahmin oluşturmak için model yöntemini çağırın.
Machine Learning 10.5 veya üzeri için Databricks Runtime'da, yalnızca tahmin edilen verileri almak için include_history=False ayarlayabilirsiniz.

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)

Tahmin edilen noktaları çizme

Aşağıdaki çizimde kalın siyah çizgi zaman serisi veri kümesini gösterir ve mavi çizgi model tarafından oluşturulan tahmindir.

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

Modeli kaydetme ve dağıtma

MLflow Model Kayıt Defteri'ndeki diğer modellerde olduğu gibi AutoML tarafından eğitilen bir modeli kaydedebilir ve dağıtabilirsiniz. Bkz. MLflow modellerini günlüğe kaydetme, kaydettirme ve yükleme.

Sorun giderme: No module named pandas.core.indexes.numeric

Model Sunumu ile AutoML tarafından eğitilmiş bir modeli sunarken No module named pandas.core.indexes.numeric hatasını görebilirsiniz. AutoML tarafından kullanılan sürüm, uç nokta ortamı sunan modeldeki sürümden farklı olduğunda pandas bu durum ortaya çıkar. Bunu çözmek için:

  1. add-pandas-dependency.py betiğini indirin. Betik, günlüğe kaydedilen modeli sabitlemek için requirements.txt, conda.yaml ve pandas==1.5.3 öğelerini düzenler.
  2. Betiği, modelin run_id günlüğe kaydedildiği MLflow çalıştırmasını içerecek şekilde düzenleyin.
  3. Modeli yeniden kaydedin.
  4. Yeni model sürümünü sunma.

Örnek defter

AutoML Python API'siyle tahmin modellerini eğitin

not defterini al

Sonraki adımlar

AutoML Python API başvurusu.