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.
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=30Para 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.
automl.forecast() Está disponível apenas em computeclássica.
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_urina 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.
# 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 .
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.
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.
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()
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:
- Baixe o script add-pandas-dependency.py. O script edita
requirements.txteconda.yamlpara os modelos registrados no pinpandas==1.5.3. - Edite o script para incluir o
run_idda execução MLflow onde o modelo foi registrado. - Registre novamente o modelo.
- Sirva a nova versão do modelo.