AutoML Python API를 사용하여 예측 모델 학습

이 예제 Notebook에서는 AutoML Python API를 사용하여 Databricks에서 시계열 예측 모델을 학습하는 방법을 보여 줍니다. COVID-19 사례 수 데이터 세트를 사용하여 30일 주기의 일별 예측을 위해 automl.forecast()를 호출한 후, MLflow를 사용하여 최상의 모델을 로드하고 예측을 생성하여 그래프를 그립니다.

Requirements

Databricks 런타임은 Machine Learning 10.0 이상에 대해 사용합니다.
모델 예측을 저장하려면 Databricks Runtime for Machine Learning 버전 10.5 이상이 필요합니다.

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

모델을 반복적으로 개선하기

  • 위에 연결된 전자 필기장 및 실험을 탐색합니다.
  • 최상의 실험 노트북에 대한 측정 기준이 만족스러우면, 다음 셀로 계속 진행할 수 있습니다.
  • 최상의 평가판에서 생성된 모델을 개선하려면 다음을 수행합니다.
    • 최상의 시도가 있는 노트북으로 이동하여 복제하십시오.
    • 필요에 따라 Notebook을 편집하여 모델을 개선합니다.
    • 모델에 만족하면 학습된 모델의 아티팩트가 기록되는 URI를 확인합니다. 다음 셀의 변수에 model_uri 이 URI를 할당합니다.

최상의 모델에서 예측된 결과 표시

Note: 이 섹션에서는 Machine Learning 10.5 이상에 Databricks 런타임이 필요합니다.

최상의 모델에서 예측을 불러오기

Machine Learning 10.5 이상에 대한 Databricks Runtime에서 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 호출하여 예측을 생성합니다.
Machine Learning 10.5 이상용 Databricks Runtime에서 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

Mosaic 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 참조입니다.