Pular para o conteúdo principal

Treine modelos de previsão com a API AutoML Python

Open in Databricks

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

Próximas etapas​

Referência da API Python do AutoML.