AutoML Python API を使用して予測モデルをトレーニングする

このノートブック例では、AutoML Python API を使用して Databricks で時系列予測モデルをトレーニングする方法を示します。 COVID-19 ケースカウント データセットを使用して、将来のケース数を予測するために 30 日間の期間で automl.forecast() を呼び出し、MLflow を使用して最適なモデルを読み込んで予測を生成してプロットします。

必要条件

Machine Learning 10.0 以降の Databricks ランタイム。
モデル予測を保存するには、Machine Learning 10.5 以降の Databricks Runtime を使用します。

COVID-19 データセット

データセットには、米国の日付別の COVID-19 ウイルスのケース数のレコードと、追加の地理情報が含まれています。 目標は、今後 30 日間に米国でウイルスが発生するケースの数を予測することです。

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 トレーニング

次のコマンドは、AutoML の実行を開始します。 モデルが予測する列を target_col 引数と時刻列に指定する必要があります。 実行が完了したら、最適な試用版ノートブックへのリンクに従って、トレーニング コードを確認できます。

この例では、次も指定します。

  • horizon=30 AutoML で将来 30 日を予測する必要があることを指定します。
  • frequency="d" を使用して、毎日予測を提供する必要があることを指定します。
  • primary_metric="mdape" トレーニング中に最適化するメトリックを指定します。

automl.forecast() は、 クラシック コンピューティングでのみ使用できます。

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

モデルを反復処理する

  • 上記でリンクされているノートブックと実験を調べる。
  • 最適な試用版ノートブックのメトリックが適切に表示される場合は、次のセルに進むことができます。
  • 最良の評価版によって生成されたモデルを改善する場合:
    • 最良の試行を持つノートブックにアクセスし、それを複製します。
    • 必要に応じてノートブックを編集して、モデルを改善します。
    • モデルに問題がなければ、トレーニング済みモデルの成果物がログに記録される URI に注意してください。 次のセルの model_uri 変数にこの URI を割り当てます。

最適なモデルから予測された結果を表示する

Note: このセクションには、Machine Learning 10.5 以降の Databricks Runtime が必要です。

最適なモデルから予測を読み込む

Databricks Runtime for Machine Learning 10.5 以降では、output_database が指定されている場合、AutoML は最適なモデルから予測を保存します。

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

予測にモデルを使用する

このセクションのコマンドは、Machine Learning 10.0 以降の Databricks Runtime で使用できます。

MLflow を使用してモデルを読み込む

MLflow を使用すると、AutoML trial_id を使用してモデルをPythonに簡単にインポートできます。

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)

モデルを使用して予測を行う

predict_timeseries モデル メソッドを呼び出して予測を生成します。
Databricks Runtime for Machine Learning 10.5 以降では、予測データのみを取得するように include_history=False を設定できます。

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)

予測ポイントをプロットする

下のプロットでは、太い黒い線は時系列データセットを示し、青い線はモデルによって作成された予測です。

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

モデルを登録してデプロイする

MLflow モデル レジストリの他のモデルと同様に、AutoML によってトレーニングされたモデルを登録してデプロイできます。 MLflow モデルのログ記録、読み込み、登録を参照してください。

トラブルシューティング: No module named pandas.core.indexes.numeric

モザイク AI モデル サービスを使用して AutoML トレーニング済みモデルを提供すると、エラー No module named pandas.core.indexes.numericが表示されることがあります。 これは、AutoML で使用される pandas バージョンが、エンドポイント環境を提供するモデルのバージョンと異なる場合に発生します。 解決するには、以下を行います。

  1. add-pandas-dependency.py スクリプトをダウンロード。 このスクリプトでは、ログに記録されたモデルの requirements.txtconda.yaml が編集され、 pandas==1.5.3がピン留めされます。
  2. モデルがログに記録された MLflow 実行の run_id を含むようにスクリプトを編集します。
  3. モデルを再登録します。
  4. 新しいモデル バージョンを提供します。

ノートブックの例

AutoML Python API を使用して予測モデルをトレーニングする

ノートブックを入手

次のステップ

AutoML Python API リファレンス