Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este notebook de exemplo mostra como treinar um modelo de previsão de série temporal no Databricks usando a API de Python AutoML. Usando um conjunto de dados de contagem de casos 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 o MLflow para gerar e plotar previsões.
Requirements
Databricks Runtime para Machine Learning 10.0 ou superior.
Para salvar previsões de modelo, é necessário o Databricks Runtime para Machine Learning 10.5 ou superior.
Conjunto de dados COVID-19
O conjunto de dados contém registros para o número de casos do vírus COVID-19 por data nos EUA, com informações geográficas adicionais. A meta é 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)
Treinamento do AutoML
O comando a seguir inicia uma execução de AutoML. Você deve fornecer a coluna que o modelo deve prever no argumento target_col e a coluna correspondente ao tempo.
Quando a execução for concluída, você poderá seguir o link para o melhor notebook de experimento para examinar o código de treinamento.
Este exemplo também especifica:
-
horizon=30para especificar que o AutoML deve prever 30 dias no futuro. -
frequency="d"para especificar que uma previsão deve ser fornecida para cada dia. -
primary_metric="mdape"para especificar a métrica para a qual otimizar durante o treinamento.
Observação
automl.forecast() só está disponível na computação clá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 no modelo
- Explore os blocos de anotações e experimentos vinculados acima.
- Se as métricas para o melhor bloco de anotações de teste estiverem adequadas, você pode continuar com a próxima célula.
- Se você quiser melhorar o modelo gerado pelo melhor teste:
- Vá para o bloco de anotações com a melhor avaliação e clone-o.
- Edite o bloco de anotações conforme necessário para melhorar o modelo.
- Quando estiver satisfeito com o modelo, anote o URI onde o artefato do modelo treinado está registrado. Atribua esse URI à
model_urivariável na próxima célula.
Mostrar os resultados previstos do melhor modelo
Note: Esta seção requer o Databricks Runtime para Machine Learning 10.5 ou superior.
Carregar previsões do melhor modelo
No Databricks Runtime para Machine Learning 10.5 ou superior, se output_database for fornecido, o AutoML salvará as previsões do melhor modelo.
# Load the saved predictions.
forecast_pd = spark.table(summary.output_table_name)
display(forecast_pd)
Usar o modelo para previsão
Você pode usar os comandos nesta seção com o Databricks Runtime para Machine Learning 10.0 ou superior.
Carregue o modelo com o MLflow
O MLflow permite que você importe 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 predict_timeseries método de modelo para gerar previsões.
No Databricks Runtime para 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)
Plotar os pontos previstos
No gráfico abaixo, a linha preta grossa 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()
Registrar e implantar o modelo
Você pode registrar e implantar um modelo treinado pelo AutoML como qualquer outro modelo no Registro de Modelo do MLflow. Consulte Logar, carregar e registrar modelos de MLflow.
Solucionando problemas: No module named pandas.core.indexes.numeric
Ao servir um modelo treinado por AutoML com o Model Serving, você poderá ver o erro No module named pandas.core.indexes.numeric. Isso acontece quando a pandas versão usada pelo AutoML é diferente daquela no ambiente de endpoint de serviço do modelo. Para resolver esse erro:
- Baixe o script add-pandas-dependency.py. O script edita
requirements.txteconda.yamlno modelo registrado para fixarpandas==1.5.3. - Edite o script para incluir a execução do MLflow
run_idonde o modelo foi registrado. - Registre novamente o modelo.
- Serve a nova versão do modelo.