Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом примере записной книжки показано, как обучить модель прогнозирования временных рядов в Databricks с помощью API Python AutoML. Используя набор данных случаев COVID-19, вы передаёте 30-дневный ежедневный горизонт в automl.forecast() для прогнозирования будущих случаев заболевания, а затем загружаете лучшую модель с помощью MLflow для генерации и визуализации прогнозов.
Requirements
Databricks Runtime для Машинное обучение 10.0 или более поздней версии.
Чтобы сохранить прогнозы модели, необходим Databricks Runtime для Машинное обучение версии 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")
Итерация модели
- Изучите записные книжки и эксперименты, указанные выше.
- Если метрики для лучшей пробной записной книжки выглядят хорошо, вы можете продолжить с следующей ячейкой.
- Если вы хотите улучшить модель, созданную лучшей пробной версией, выполните следующие действия.
- Перейдите к ноутбуку с лучшим испытанием и клонируйте его.
- Измените записную книжку по мере необходимости, чтобы улучшить модель.
- Если вы удовлетворены моделью, обратите внимание на универсальный код ресурса (URI), в котором регистрируется артефакт обученной модели. Назначьте этот универсальный код ресурса (URI) переменной
model_uriв следующей ячейке.
Отображение прогнозируемых результатов из оптимальной модели
Note: В этом разделе требуется среда выполнения Databricks для Машинное обучение 10.5 или более поздней версии.
Загрузка прогнозов из оптимальной модели
В Databricks Runtime для Машинное обучение 10.5 или более поздней версии, если предоставляется output_database, AutoML сохраняет прогнозы из оптимальной модели.
# Load the saved predictions.
forecast_pd = spark.table(summary.output_table_name)
display(forecast_pd)
Использование модели для прогнозирования
Команды в этом разделе можно использовать с Databricks Runtime для Машинное обучение 10.0 или более поздней версии.
Загрузка модели с помощью MLflow
MLflow позволяет легко импортировать модели обратно в Python с помощью 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)
Использование модели для прогнозирования
predict_timeseries Вызовите метод модели для создания прогнозов.
В Databricks Runtime для Машинное обучение 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()
Регистрация и развертывание модели
Вы можете зарегистрировать и развернуть модель, обученную autoML, как и любую другую модель в реестре моделей MLflow. См. журналирование, загрузку и регистрацию моделей MLflow.
Устранение неполадок: No module named pandas.core.indexes.numeric
При обслуживании обученной autoML-модели с помощью службы моделей может возникнуть ошибка No module named pandas.core.indexes.numeric. Это происходит, когда pandas версия, используемая AutoML, отличается от версии в среде конечной точки обслуживания модели. Чтобы устранить проблему, сделайте следующее:
-
Скачайте скрипт «add-pandas-dependency.py». Скрипт редактирует
requirements.txtиconda.yamlдля закрепленияpandas==1.5.3на зарегистрированной модели. - Измените скрипт, чтобы включить
run_idзапуск MLflow, в котором была зарегистрирована модель. - Повторно зарегистрируйте модель.
- Обслуживают новую версию модели.