Pular para o conteúdo principal

Treine modelos de previsão com a API AutoML Python

Este notebook de exemplo mostra como ensinar um modelo de previsão de séries temporais no Databricks usando a API AutoML Python . Usando um dataset de contagem de casos de COVID-19, você chama automl.forecast() com um horizonte diário de 30 dias para projetar contagens de casos futuros e, em seguida, carrega o melhor modelo com MLflow para gerar e representar graficamente as previsões.

Requisitos

Databricks Runtime para Machine Learning versão 10.0 ou superior.
Para salvar as previsões do modelo, Databricks Runtime for Machine Learning versão 10.5 ou superior.

datasetda COVID-19

O dataset contém registros do número de casos do vírus COVID-19 por data nos EUA, com informações geográficas adicionais. O objetivo é prever quantos casos do vírus ocorrerão nos próximos 30 dias nos EUA.

Python
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

O comando a seguir inicia uma execução AutoML . Você deve fornecer a coluna que o modelo deve prever no argumento target_col e a coluna de tempo. Quando a execução for concluída, você poderá acessar o link para o Notebook de teste para examinar o código de treinamento.

Este exemplo também especifica:

  • horizon=30 Para especificar que o AutoML deve fazer previsões para os próximos 30 dias.
  • frequency="d" Especificar que uma previsão deve ser fornecida para cada dia.
  • primary_metric="mdape" Especificar os modelos a serem otimizados durante o treinamento.
nota

automl.forecast() Está disponível apenas em computeclássica.

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

Iterar sobre o modelo

  • Explore o caderno e os experimentos mencionados acima.
  • Se os critérios para o melhor Notebook de teste parecerem adequados, você pode prosseguir para a próxima célula.
  • Se você deseja aprimorar o modelo gerado pelo melhor teste:
    • Acesse o Notebook com a melhor versão de avaliação e clone-o.
    • Edite o Notebook conforme necessário para aprimorar o modelo.
    • Quando estiver satisfeito com o modelo, anote o URI onde o artefato do modelo treinado está armazenado. Atribua este URI à variável model_uri na próxima célula.

Mostre os resultados previstos pelo melhor modelo.

Observação: esta seção requer Databricks Runtime for Machine Learning versão 10.5 ou superior.

Previsões de carga do melhor modelo

No Databricks Runtime for Machine Learning 10.5 ou superior, se output_database for fornecido, AutoML salva as previsões do melhor modelo.

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

Utilize o modelo para previsão.

Você pode usar o comando desta seção com Databricks Runtime for Machine Learning 10.0 ou superior.

Carregue o modelo com o MLflow.

O MLflow permite importar facilmente modelos de volta para o Python usando o 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)

Utilize o modelo para fazer previsões.

Chame o método do modelo predict_timeseries para gerar previsões.
No Databricks Runtime for Machine Learning 10.5 ou superior, você pode definir include_history=False para obter apenas os dados previstos.

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

representar graficamente os pontos previstos

No gráfico abaixo, a linha preta espessa mostra o dataset da série temporal e a linha azul é a previsão criada pelo modelo.

Python
df_true = df.groupby("date").agg(y=("cases", "avg")).reset_index().to_pandas()
Python
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()

registrar e implantar o modelo

Você pode registrar e implantar um modelo treinado pelo AutoML como qualquer outro modelo no MLflow Model Registry. Veja os modelos MLflow de log, carregamento e registro.

Solução de problemas: No module named pandas.core.indexes.numeric

Ao servir um modelo treinado com AutoML com servir modelo, você pode ver o erro No module named pandas.core.indexes.numeric. Isso acontece quando a versão pandas usada pelo AutoML difere daquela no ambiente endpoint do modelo de serviço. Para resolver:

  1. Baixe o script add-pandas-dependency.py. O script edita requirements.txt e conda.yaml para os modelos registrados no pin pandas==1.5.3.
  2. Edite o script para incluir o run_id da execução MLflow onde o modelo foi registrado.
  3. Registre novamente o modelo.
  4. Sirva a nova versão do modelo.

Exemplo de caderno

Treine modelos de previsão com a API AutoML Python

Abrir notebook em uma nova aba

Próximas etapas

Referência da API Python do AutoML.