Share via


Treinar modelos de ML com a API do Python do AutoML no Azure Databricks

Este artigo demonstra como treinar um modelo com o AutoML do Azure Databricks usando a API. Saiba mais sobre O que é o AutoML?. A API de Python fornece funções para iniciar execuções de classificação, regressão e regressão do AutoML. Cada chamada de função treina um conjunto de modelos e gera um notebook de avaliação para cada modelo.

As seguintes etapas descrevem geralmente como configurar um experimento de AutoML usando a API:

  1. Crie um notebook e anexe-o a um cluster Databricks Runtime ML.
  2. Identifique qual tabela você deseja usar da fonte de dados existente ou carregue um arquivo de dados no DBFS e crie uma tabela.
  3. Para iniciar uma execução de AutoML, passe o nome da tabela para a especificação de API apropriada: classificação, regressão ou previsão.
  4. Quando a executar o AutoML é iniciada, uma URL de experimento do MLflow é exibida no console. Use essa URL para monitorar o progresso da executar. Atualize o experimento do MLflow para ver as avaliação conforme elas são concluídas.
  5. Após a conclusão da executar o AutoML:
    • Use os links no resumo de saída para navegar até o experimento do MLflow ou para o notebook que gerou os melhores resultados.
    • Use o link para o notebook de exploração de dados para obter algumas informações sobre os dados passados para o AutoML. Você também pode anexar esse notebook ao mesmo cluster e executar o notebook para reproduzir os resultados ou fazer análises de dados adicionais.
    • Use o objeto de resumo retornado da chamada AutoML para explorar mais detalhes sobre as avaliação ou carregar um modelo treinado por uma determinada avaliação. Saiba mais sobre o objeto AutoMLSummary.
    • Clone qualquer notebook gerado das avaliação e execute o notebook de novo anexando-o ao mesmo cluster para reproduzir os resultados. Você também pode fazer as edições necessárias e executá-las novamente para treinar modelos adicionais e registrá-los no mesmo experimento.

Requisitos

Consulte Requisitos para experimentos do AutoML.

Especificação de classificação

O exemplo de código a seguir configura uma execução de AutoML para treinar um modelo de classificação. Para obter parâmetros adicionais para personalizar ainda mais sua execução de AutoML, consulte Parâmetros de classificação e regressão.

Observação

O parâmetro max_trials está preterido no Databricks Runtime 10.4 ML e não é compatível com o Databricks Runtime 11.0 ML e superior. Use timeout_minutes para controlar a duração de uma execução do AutoML.

databricks.automl.classify(
  dataset: Union[pyspark.sql.DataFrame, pandas.DataFrame, pyspark.pandas.DataFrame, str],
  *,
  target_col: str,
  data_dir: Optional[str] = None,
  exclude_cols: Optional[List[str]] = None,                      # <DBR> 10.3 ML and above
  exclude_frameworks: Optional[List[str]] = None,                   # <DBR> 10.3 ML and above
  experiment_dir: Optional[str] = None,                             # <DBR> 10.4 LTS ML and above
  experiment_name: Optional[str] = None,                            # <DBR> 12.1 ML and above
  feature_store_lookups: Optional[List[Dict]] = None,               # <DBR> 11.3 LTS ML and above
  imputers: Optional[Dict[str, Union[str, Dict[str, Any]]]] = None, # <DBR> 10.4 LTS ML and above
  max_trials: Optional[int] = None,                                 # <DBR> 10.5 ML and below
  pos_label: Optional[Union[int, bool, str] = None,                 # <DBR> 11.1 ML and above
  primary_metric: str = "f1",
  time_col: Optional[str] = None,
  timeout_minutes: Optional[int] = None,
) -> AutoMLSummary

Especificação de regressão

O exemplo de código a seguir configura uma execução de AutoML para treinar um modelo de regressão. Para obter parâmetros adicionais para personalizar ainda mais sua execução de AutoML, consulte Parâmetros de classificação e regressão.

Observação

O parâmetro max_trials está preterido no Databricks Runtime 10.4 ML e não é compatível com o Databricks Runtime 11.0 ML e superior. Use timeout_minutes para controlar a duração de uma execução do AutoML.

databricks.automl.regress(
  dataset: Union[pyspark.sql.DataFrame, pandas.DataFrame, pyspark.pandas.DataFrame, str],
  *,
  target_col: str,
  data_dir: Optional[str] = None,
  exclude_cols: Optional[List[str]] = None,                      # <DBR> 10.3 ML and above
  exclude_frameworks: Optional[List[str]] = None,                   # <DBR> 10.3 ML and above
  experiment_dir: Optional[str] = None,                             # <DBR> 10.4 LTS ML and above
  experiment_name: Optional[str] = None,                            # <DBR> 12.1 ML and above
  feature_store_lookups: Optional[List[Dict]] = None,               # <DBR> 11.3 LTS ML and above
  imputers: Optional[Dict[str, Union[str, Dict[str, Any]]]] = None, # <DBR> 10.4 LTS ML and above
  max_trials: Optional[int] = None,                                 # <DBR> 10.5 ML and below
  primary_metric: str = "r2",
  time_col: Optional[str] = None,
  timeout_minutes: Optional[int] = None,
) -> AutoMLSummary

Especificação de previsão

O exemplo de código a seguir configura uma execução de AutoML para treinar um modelo de previsão. Para obter detalhes adicionais sobre parâmetros para a execução do AutoML, consulte Parâmetros de previsão. Para usar o ARIMA automático, a série temporal deve ter uma frequência regular (ou seja, o intervalo entre dois pontos deve ser o mesmo em toda a série temporal). A frequência deve corresponder à unidade de frequência especificada na chamada à API. O AutoML trata das etapas de tempo ausentes preenchendo esses valores com o valor anterior.

databricks.automl.forecast(
  dataset: Union[pyspark.sql.DataFrame, pandas.DataFrame, pyspark.pandas.DataFrame, str],
  *,
  target_col: str,
  time_col: str,
  country_code: str = "US",                                         # <DBR> 12.0 ML and above
  data_dir: Optional[str] = None,
  exclude_frameworks: Optional[List[str]] = None,
  experiment_dir: Optional[str] = None,
  experiment_name: Optional[str] = None,                            # <DBR> 12.1 ML and above
  feature_store_lookups: Optional[List[Dict]] = None,               # <DBR> 12.2 LTS ML and above
  frequency: str = "D",
  horizon: int = 1,
  identity_col: Optional[Union[str, List[str]]] = None,
  output_database: Optional[str] = None,                            # <DBR> 10.5 ML and above
  primary_metric: str = "smape",
  timeout_minutes: Optional[int] = None,
) -> AutoMLSummary

Parâmetros de classificação e regressão

Observação

Somente para problemas de classificação e regressão, você pode:

  • Especificar quais colunas incluir no treinamento.
  • Selecionar métodos de imputação personalizados.
Nome do campo Tipo Descrição
dataset str pandas. DataFrame pyspark. DataFrame pyspark.sql.DataFrame Nome da tabela de entrada ou DataFrame que contém recursos de treinamento e destino.

O nome da tabela pode estar no formato ".." ou “.” para tabelas que não são do Catálogo do Unity
target_col str Nome da coluna para o rótulo de destino.
data_dir str de formato
dbfs:/<folder-name>
(Opcional) Caminho DBFS usado para armazenar o conjuntos de dados de treinamento. Esse caminho é visível para nós de driver e de trabalho.

O Databricks recomenda deixar esse campo vazio, para que o AutoML possa salvar o conjunto de dados de treinamento como um artefato do MLflow.

Se um caminho personalizado for especificado, o conjunto de dados não herdará as permissões de acesso do experimento do AutoML.
exclude_cols List[str] (Opcional) Lista de colunas a ignorar durante cálculos de AutoML.

Padrão: []
exclude_ frameworks List[str] (Opcional) Lista de estruturas de algoritmo que o AutoML não deve considerar à medida que desenvolve modelos. Valores possíveis: lista vazia ou um ou mais de "sklearn", "lightgbm", "xgboost".

Padrão: [] (todas as estruturas são consideradas)
experiment_dir str (Opcional) Caminho para o diretório no workspace para salvar os notebooks e experimentos gerados.

Padrão: /Users/<username>/databricks_automl/
experiment_name str (Opcional) Nome do experimento do MLflow que o AutoML cria.

Padrão: o nome é gerado automaticamente.
feature_store_ lookups List[Dict] (Opcional) Lista de dicionários que representam recursos do Repositório de Recursos para aumento de dados. As chaves válidas em cada dicionário são:

* table_name (str): obrigatório. Nome da tabela de recursos.
* lookup_key (list ou str): obrigatório. Nome de coluna a ser usado como chave ao unir a tabela de recursos com os dados passados no parâmetro
dataset. A ordem dos nomes de coluna deve corresponder à ordem das chaves primárias da tabela de recursos.
* timestamp_lookup_key (str): obrigatório se a tabela especificada for uma tabela de recursos de série temporal. O nome da coluna a ser usado ao executar a pesquisa pontual na tabela de recursos com os dados passados no parâmetro dataset.

Padrão: []
insertores Dict[str, Union[str, Dict[str, Any]]] (Opcional) Dicionário em que cada chave é um nome de coluna, e cada valor é uma cadeia de caracteres ou dicionário que descreve a estratégia de imputação. Se especificado como uma cadeia de caracteres, o valor deve ser "mean", "median" ou "most_frequent". Para imputar com um valor conhecido, especifique o valor como um dicionário
{"strategy": "constant", "fill_value": <desired value>}. Você também pode especificar opções de cadeia de caracteres como dicionários, por exemplo {"strategy": "mean"}.

Se nenhuma estratégia de imputação for fornecida para uma coluna, o AutoML selecionará uma estratégia padrão com base no tipo e no conteúdo da coluna. Se você especificar um método de imputação não padrão, o AutoML não executará a detecção de tipo semântico.

Padrão: {}
max_trials INT (Opcional) Número máximo de tentativas a executar.

Este parâmetro está disponível no Databricks Runtime 10.5 ML e anterior, mas foi preterido a partir do Databricks Runtime 10.3 ML. No Databricks Runtime 11.0 ML e superior, esse parâmetro não tem mais suporte.

Padrão: 20

Se timeout_minutes=None, o AutoML executa o número máximo de tentativas.
pos_label Union[int, bool, str] (Somente classificação) A classe positiva. Isso é útil para calcular métricas como precisão e recall. Deve ser especificado apenas para problemas de classificação binária.
primary_metric str Métrica usada para avaliar e classificar o desempenho do modelo.

Métricas com suporte para regressão: "r2" (padrão), "mae", "rmse", "mse"

Métricas com suporte para classificação: “f1” (default), “log_loss”, “precision”, “accuracy”, “roc_auc”
time_col str Disponível no Databricks Runtime 10.1 ML e superior.

(Opcional) Nome da coluna de tempo.

Se fornecido, o AutoML tenta dividir o conjunto de dados em conjuntos de treinamento, validação e teste cronologicamente, usando os pontos mais antigos como dados de treinamento e os pontos mais recentes como um conjunto de testes.

Os tipos de coluna aceitos são carimbo de data/hora e inteiro. Com Databricks Runtime 10.2 ML superior, também há suporte para colunas de cadeia de caracteres. Se o tipo de coluna for cadeia de caracteres, o AutoML tentará convertê-lo em um carimbo de data/hora usando a detecção semântica. Se a conversão falhar, a execução do AutoML falhará.
timeout_minutes INT (Opcional) Tempo máximo para aguardar a conclusão das avaliação de AutoML. Carimbos de data/hora mais longos permitem que o AutoML execute mais testes e identifique um modelo com melhor precisão.

Padrão: 120 minutos

Valor mínimo: 5 minutos

Um erro será relatado se o carimbo de data/hora for muito curto para permitir que pelo menos uma avaliação seja concluída.

Parâmetros de previsão

Nome do campo Tipo Descrição
dataset str

pandas.DataFrame pyspark.DataFrame pyspark.sql.DataFrame
Nome da tabela de entrada ou DataFrame que contém recursos de treinamento e destino.

O nome da tabela pode estar no formato ".." ou “.” para tabelas que não são do Catálogo do Unity
target_col str Nome da coluna para o rótulo de destino.
time_col str Nome da coluna de tempo para previsão.
frequência str Frequência da série temporal para previsão. Esse é o período no qual os eventos devem ocorrer. A configuração padrão é "D" ou dados diários. Você deverá alterar a configuração se os dados tiverem uma frequência diferente.

Valores possíveis:

“W” (semanas)

“D” / “days” / “day”

“hours” / “hour” / “hr” / “h”

“m” / “minute” / “min” / “minutes” / “T”

“S” / “seconds” / “sec” / “second”

Os seguintes itens só estão disponíveis com o Databricks Runtime 12.0 ML e superior:

“M” / “month” / “months”

“Q” / “quarter” / “quarters”

“Y” / “year” / “years”

Padrão: "D"
horizon INT Número de períodos no futuro para os quais as previsões devem ser retornadas. As unidades são a frequência de séries temporais. Padrão: 1
data_dir str de formato
dbfs:/<folder-name>
(Opcional) Caminho DBFS usado para armazenar o conjuntos de dados de treinamento. Esse caminho é visível para nós de driver e de trabalho.

O Databricks recomenda deixar esse campo vazio, para que o AutoML possa salvar o conjunto de dados de treinamento como um artefato do MLflow.

Se um caminho personalizado for especificado, o conjunto de dados não herdará as permissões de acesso do experimento do AutoML.
exclude_ frameworks List[str] (Opcional) Lista de estruturas de algoritmo que o AutoML não deve considerar à medida que desenvolve modelos. Valores possíveis: lista vazia, ou um ou mais de “prophet”, “arima”. Padrão: [] (todas as estruturas são consideradas)
experiment_dir str (Opcional) Caminho para o diretório no workspace para salvar os notebooks e experimentos gerados.

Padrão: /Users/<username>/databricks_automl/
experiment_name str (Opcional) Nome do experimento do MLflow que o AutoML cria.

Padrão: o nome é gerado automaticamente.
feature_store_ lookups List[Dict] (Opcional) Lista de dicionários que representam recursos do Repositório de Recursos para aumento de dados. As chaves válidas em cada dicionário são:

* table_name (str): obrigatório. Nome da tabela de recursos.
* lookup_key (list ou str): obrigatório. Nome de coluna a ser usado como chave ao unir a tabela de recursos com os dados passados no parâmetro
dataset. A ordem dos nomes de coluna deve corresponder à ordem das chaves primárias da tabela de recursos.
* timestamp_lookup_key (str): obrigatório se a tabela especificada for uma tabela de recursos de série temporal. O nome da coluna a ser usado ao executar a pesquisa pontual na tabela de recursos com os dados passados no parâmetro dataset.

Padrão: []
identity_col Union[str, list] (Opcional) Coluna(s) que identificam a série temporal para previsão de várias séries. O AutoML agrupa por essas colunas e pela coluna de tempo para previsão.
output_database str (Opcional) Se fornecido, o AutoML salvará previsões do melhor modelo para uma nova tabela no banco de dados especificado.

Padrão: as previsões não são salvas.
primary_metric str Métrica usada para avaliar e classificar o desempenho do modelo. Métricas com suporte: "smape" (padrão) "MSE", "RMSE", "mae" ou "mdape".
timeout_minutes INT (Opcional) Tempo máximo para aguardar a conclusão das avaliação de AutoML. Carimbos de data/hora mais longos permitem que o AutoML execute mais testes e identifique um modelo com melhor precisão.

Padrão: 120 minutos

Valor mínimo: 5 minutos

Um erro será relatado se o carimbo de data/hora for muito curto para permitir que pelo menos uma avaliação seja concluída.
country_code str Disponível no Databricks Runtime 12.0 ML e superior. Compatível apenas com o modelo de previsão do Prophet.

(Opcional) Código de país de duas letras que indica quais feriados do país o modelo de previsão deve usar. Para ignorar feriados, defina esse parâmetro como uma cadeia de caracteres vazia (""). Países com suporte.

Padrão: US (feriados dos Estados Unidos).

Retorna

AutoMLSummary

Objeto de resumo para uma execução do AutoML que descreve as métricas, os parâmetros e outros detalhes para cada uma das avaliações. Você também usa esse objeto para carregar o modelo treinado por uma avaliação específica.

Propriedade Type Descrição
experimento mlflow.entities.Experiment O experimento MLflow usado para registrar as avaliações.
avaliações List[TrialInfo] Uma lista que contém informações sobre todas as avaliações que foram executadas.
best_trial TrialInfo Informações sobre a avaliação que resultaram na melhor pontuação ponderada para a métrica primária.
metric_distribution str A distribuição de pontuações ponderadas para a métrica primária em todas as avaliações.
output_table_name str Usado somente com previsão e somente se output_database for fornecido. Nome da tabela no output_database que contém as previsões do modelo.

TrialInfo

Objeto de resumo para cada avaliação individual.

Propriedade Type Descrição
notebook_path Opcional[str] O caminho para o notebook gerado para esta avaliação no espaço de trabalho. Para classificação e regressão, esse valor é definido apenas para a melhor avaliação, enquanto todas as outras avaliações têm o valor definido como None. Para previsão, esse valor está presente para todas as avaliações
notebook_url Opcional[str] A URL do notebook gerado para esta avaliação. Para classificação e regressão, esse valor é definido apenas para a melhor avaliação, enquanto todas as outras avaliações têm o valor definido como None. Para previsão, esse valor está presente para todas as avaliações
artifact_uri Opcional[str] O URI do artefato do MLflow para o notebook gerado.
mlflow_run_id str A ID de execução do MLflow associada a esta execução de avaliação.
Métricas Dict[str, float] As métricas registradas em MLflow para esta avaliação.
params Dict[str, str] Os parâmetros registrados em MLflow que foram usados para esta avaliação.
model_path str A URL do artefato MLflow do modelo treinado nesta avaliação.
model_description str Breve descrição do modelo e dos hiperparâmetros usados para treinar esse modelo.
duration str Duração do treinamento em minutos
pré-processadores str Descrição dos pré-processadores executados antes de treinar o modelo.
evaluation_metric_score FLOAT Pontuação da métrica primária, avaliada para o conjunto de dados de validação.
Método Descrição
load_model() Carregue o modelo gerado nesta avaliação, registrado como um artefato MLflow.

Importar um notebook

Para importar um notebook salvo como um artefato do MLflow, use a API do Python databricks.automl.import_notebook.

def import_notebook(artifact_uri: str, path: str, overwrite: bool = False) -> ImportNotebookResult:
    """
    Import a trial notebook, saved as an MLflow artifact, into the workspace.

    :param artifact_uri: The URI of the MLflow artifact that contains the trial notebook.
    :param path: The path in the Databricks workspace where the notebook should be imported. This must be an absolute path. The directory will be created if it does not exist.
    :param overwrite: Whether to overwrite the notebook if it already exists. It is `False` by default.

    :return: ImportNotebookResult contains two fields, `path` and `url`, referring to the imported notebook
    """

Um exemplo de uso:

summary = databricks.automl.classify(...)
result = databricks.automl.import_notebook(summary.trials[5].artifact_uri, "/Users/you@yourcompany.com/path/to/directory")
print(result.path)
print(result.url)

Registrar e implantar um modelo

Você pode registrar e implantar seu modelo treinado de AutoML como qualquer modelo registrado no registro de modelo do MLflow, consulte Registrar em log, carregar, registrar e implantar modelos do MLflow.

Nenhum módulo chamado 'pandas.core.indexes.numeric

Ao servir um modelo criado usando o AutoML com o Serviço de Modelo, você pode receber o erro: No module named 'pandas.core.indexes.numeric.

Isso ocorre devido a uma versão incompatível pandas entre o AutoML e o modelo que atende ao ambiente de ponto de extremidade. Você pode resolve esse erro executando o script add-pandas-dependency.py. O script edita o requirements.txt e conda.yaml para o modelo registrado incluir a versão de dependência apropriada pandas : pandas==1.5.3.

  1. Modifique o script para incluir o run_id da execução do MLflow em que o modelo foi registrado.
  2. Registrar novamente o modelo no registro de modelo do MLflow.
  3. Tente fornecer a nova versão do modelo MLflow.

Exemplos de notebook

Examine esses blocos de anotações para começar a usar o AutoML.

O notebook a seguir mostra como fazer a classificação com o AutoML.

Notebook de exemplo de classificação de AutoML

Obter notebook

O notebook a seguir mostra como fazer regressão com o AutoML.

Notebook de exemplo de regressão de AutoML

Obter notebook

O notebook a seguir mostra como fazer a previsão com o AutoML.

Notebook de exemplo de previsão de AutoML

Obter notebook

O notebook a seguir mostra como treinar um modelo de ML com tabelas de recursos do AutoML e do Repositório de Recursos.

Notebook de exemplo de experimento de AutoML com o Repositório de Recursos

Obter notebook