Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este exemplo de caderno mostra como treinar um modelo de previsão de séries temporais em Databricks usando a API Python do AutoML. Usando um conjunto de dados de contagem de casos de COVID-19, faz uma chamada ao automl.forecast() com um horizonte de 30 dias para projetar os números futuros de casos, depois carrega o melhor modelo com MLflow para gerar e traçar previsões.
Requirements
Databricks Runtime para Machine Learning 10.0 ou superior.
Para guardar previsões de modelos, Databricks Runtime for Machine Learning 10.5 ou superior.
Conjunto de dados COVID-19
O conjunto de dados contém registos do número de casos do vírus COVID-19 por data nos EUA, com informação geográfica adicional. 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)
Formação em AutoML
O comando seguinte inicia uma execução do AutoML. Deve fornecer a coluna que o modelo deve prever no argumento target_col e especificar a coluna de tempo.
Quando a corrida terminar, pode seguir o link para o melhor caderno de testes para examinar o código de treino.
Este exemplo também especifica:
-
horizon=30para especificar que o AutoML deveria prever para 30 dias no futuro. -
frequency="d"especificar que deveria ser fornecida uma previsão para cada dia. -
primary_metric="mdape"para especificar a métrica a otimizar durante o treino.
Nota
automl.forecast() está disponível apenas no Classic Compute.
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 os cadernos e experimentos acima mencionados.
- Se as métricas para o melhor caderno de teste estiverem boas, podes continuar com a célula seguinte.
- Se quiser melhorar o modelo gerado pelo melhor ensaio:
- Vai ao caderno com o melhor teste e clona-o.
- Edite o caderno conforme necessário para melhorar o modelo.
- Quando estiver satisfeito com o modelo, note o URI onde o artefacto do modelo treinado é registado. Atribui este URI à
model_urivariável na célula seguinte.
Mostrar os resultados previstos do melhor modelo
Nota: Esta secção requer Databricks Runtime para Machine Learning 10.5 ou superior.
Previsões de carga a partir do melhor modelo
No Databricks Runtime para Machine Learning 10.5 ou superior, se for fornecido output_database, o AutoML guarda as previsões do melhor modelo.
# Load the saved predictions.
forecast_pd = spark.table(summary.output_table_name)
display(forecast_pd)
Utilizar o modelo para previsão
Pode usar os comandos desta secção com Databricks Runtime for Machine Learning 10.0 ou superior.
Carregue o modelo com MLflow
O MLflow permite importar facilmente modelos de volta para 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)
Usar o modelo para fazer previsões
Chame o método do modelo predict_timeseries para gerar previsões.
No Databricks Runtime, para Machine Learning 10.5 ou superior, 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)
Plote os pontos previsíveis
No gráfico abaixo, a linha preta espessa mostra o conjunto de dados 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()
Registar e implementar o modelo
Pode registar e implementar um modelo treinado por AutoML como qualquer outro modelo no MLflow Model Registry. Veja Log, load e registe modelos MLflow.
Resolução de Problemas: No module named pandas.core.indexes.numeric
Ao servir um modelo treinado em AutoML com o Mosaic AI Model Serving, pode ver o erro No module named pandas.core.indexes.numeric. Isto acontece quando a pandas versão usada pelo AutoML difere daquela no ambiente de endpoint de serviço do modelo. Para resolver:
- Faça o download do add-pandas-dependency.py script. O script edita
requirements.txteconda.yamlpara fixarpandas==1.5.3no modelo registado. - Edite o script para incluir a
run_idda execução do MLflow onde o modelo foi registado. - Regista novamente o modelo.
- Sirva a nova versão do modelo.
Bloco de notas de exemplo
Treinar modelos de previsão com AutoML Python API
Obter de bloco de notas
Próximos passos
Referência da API Python do AutoML.