Como funciona o Databricks AutoML

Este artigo detalha como o Databricks AutoML funciona e sua implementação de conceitos como imputação de valor ausente e amostragem de dados grandes.

O Databricks AutoML executa o seguinte:

  1. Prepara o dataset para o treinamento do modelo. Por exemplo, o AutoML realiza a detecção de dados desbalanceados para problemas de classificação antes do treinamento do modelo.

  2. Itera para treinar e ajustar múltiplos modelos, em que cada modelo é criado a partir de componentes de código aberto e pode ser facilmente modificado e incorporado aos seus pipelines de aprendizado de máquina.

    • O AutoML distribui automaticamente os testes de ajuste de hiperparâmetros entre os nós de trabalho de um cluster.

    • Com o Databricks Runtime 9.1 LTS ML ouacima, o AutoML amostra automaticamente seu dataset se for muito grande para caber na memória de um único nó worker . Consulte Amostragem de datasetgrande.

  3. Avalia modelos com base em algoritmos dos pacotes scikit-learn, xgboost, LightGBM, Prophet e ARIMA.

  4. Exibe os resultados e fornece um notebook Python com o código-fonte de cada execução de teste para que o senhor possa revisar, reproduzir e modificar o código. O AutoML também calcula estatísticas resumidas do dataset e salva essas informações em um notebook que pode ser revisado posteriormente.

Algoritmos AutoML

O Databricks AutoML ensina e avalia modelos com base nos algoritmos na tabela a seguir.

Observação

Para modelos de classificação e regressão, as árvores de decisão, florestas aleatórias, regressão logística e regressão linear com algoritmos de descida de gradiente estocástico são baseados no scikit-learn.

Modelos de classificação

Modelos de regressão

Modelos de previsão

Árvores de decisão

Árvores de decisão

Prophet

Florestas aleatórias

Florestas aleatórias

Auto-ARIMA (Disponível no Databricks Runtime 10.3 MLe acima.)

Regressão logística

Regressão linear com descida de gradiente estocástico

XGBoost

XGBoost

LightGBM

LightGBM

Tipos de recursos de dados compatíveis

Os tipos de recursos não listados abaixo não são compatíveis. Por exemplo, imagens não são suportadas.

Os seguintes tipos de recursos são compatíveis:

  • Numérico (ByteType, ShortType, IntegerType, LongType, FloatType e DoubleType)

  • Boolean

  • Cadeia de caracteres (texto categórico ou em inglês)

  • Carimbos de data e hora (TimestampType, DateType)

  • ArrayType[Numérico] (Databricks Runtime 10.4 LTS MLe acima)

  • DecimalType (Databricks Runtime 11.3 LTS MLe acima)

Dividir dados em conjuntos de ensinar/validação/teste

Com o Databricks Runtime 10.4 LTS ML e acima, o senhor pode especificar uma coluna de tempo a ser usada para a divisão de dados de treinamento/validação/teste para problemas de classificação e regressão. Se o senhor especificar essa coluna, o site dataset será dividido em treinamento, validação e conjuntos de teste por tempo. Os pontos mais antigos são usados para treinamento, os próximos mais antigos para validação e os mais recentes são usados como um conjunto de teste. A coluna de tempo deve ser uma coluna de carimbo de data/hora, cadeia de caracteres ou número inteiro.

Amostragem de grandes conjuntos de dados

Observação

A amostragem não é aplicada a problemas de previsão.

Embora o AutoML distribua testes de ajuste de hiperparâmetros entre os nós de trabalho de um cluster, cada modelo é treinado em um único nó de trabalho.

O AutoML calcula automaticamente a memória necessária para carregar e treinar seu conjunto de dados e amostra o conjunto de dados, se necessário.

No Databricks Runtime 9.1 LTS ML até o Databricks Runtime 10.4 LTS ML, a fração de amostragem não depende do tipo de nó do cluster ou da quantidade de memória em cada nó.

Em databricks runtime 11.x ML:

  • A fração de amostragem aumenta para nós de trabalho que têm mais memória por núcleo. Você pode aumentar o tamanho da amostra escolhendo um tipo de instância otimizada para memória.

  • Você pode aumentar ainda mais o tamanho da amostra escolhendo um valor maior para spark.task.cpus na configuração do Spark para o cluster. A configuração padrão é 1; o valor máximo é o número de CPUs no nó do trabalhador. Quando você aumenta esse valor, o tamanho da amostra é maior, mas menos ensaios são executados em paralelo. Por exemplo, em uma máquina com 4 núcleos e 64 GB de RAM total, o padrão spark.task.cpus=1 executa 4 testes por trabalhador, com cada teste limitado a 16 GB de RAM. Se você definir spark.task.cpus=4, cada worker executará apenas uma avaliação, mas essa avaliação poderá usar 64 GB de RAM.

Em Databricks Runtime 12.2 LTS ML e acima, AutoML pode ensinar em um conjunto de dados maior alocando mais núcleos de CPU por tarefa de treinamento. O senhor pode aumentar o tamanho da amostra escolhendo um tamanho de instância com maior memória total.

Em Databricks Runtime 11.3 LTS ML e acima, se AutoML amostrou o dataset, a fração de amostragem é mostrada na Visão Geral tab na UI.

Para problemas de classificação, o AutoML usa o método PySpark sampleBy para amostragem estratificada a fim de preservar a distribuição do rótulo de destino.

Para problemas de regressão, o AutoML usa o método PySpark sample.

Suporte de conjunto de dados desbalanceado para problemas de classificação

Em Databricks Runtime 11.3 LTS ML e acima, se o AutoML detectar que um dataset está desequilibrado, ele tentará reduzir o desequilíbrio do treinamento dataset reduzindo a amostragem da(s) classe(s) principal(is) e adicionando pesos de classe. AutoML equilibra apenas o treinamento dataset e não equilibra o conjunto de dados de teste e validação. Isso garante que o desempenho do modelo seja sempre avaliado no site dataset não enriquecido com a verdadeira distribuição da classe de entrada.

Para equilibrar um conjunto de dados de treinamento desbalanceado, o AutoML usa pesos de classe que são inversamente relacionados ao grau pelo qual uma determinada classe é reduzida da amostra. Por exemplo, se um dataset de treinamento com 100 amostras tem 95 amostras pertencentes à classe A e 5 amostras pertencentes à classe B, o AutoML reduz esse desequilíbrio ao subamostrar a classe A para 70 amostras, resultando em uma taxa de subamostragem de 70/95 ou 0.736, enquanto mantém o número de amostras na classe B em 5. Para garantir que o modelo final esteja corretamente calibrado e que a distribuição de probabilidade da saída do modelo seja a mesma que a do input, o AutoML aumenta o peso da classe A pela razão de 1/.736, que é igual a 1.358, enquanto mantém o peso da classe B como 1. Em seguida, o AutoML usa esses pesos de classe no treinamento do modelo como um parâmetro para garantir que as amostras de cada classe sejam ponderadas adequadamente ao treinar o modelo.

Detecção de tipo semântico

Observação

  • A detecção de tipo semântico não é aplicada a problemas de previsão.

  • O AutoML não executa a detecção de tipo semântico para colunas com métodos de imputação personalizados especificados.

Com o Databricks Runtime 9.1 LTS MLe acima, o AutoML tenta detectar se as colunas têm um tipo semântico diferente do tipo de dados Spark ou pandas no esquema da tabela. O AutoML trata essas colunas como o tipo semântico detectado. Essas detecções são o melhor esforço e podem perder a existência de tipos semânticos em alguns casos. Você também pode definir manualmente o tipo semântico de uma coluna ou instruir o AutoML a não aplicar a detecção de tipo semântico a uma coluna usando anotação.

Especificamente, o AutoML faz estes ajustes:

  • As colunas de sequência de caracteres e números inteiros que representam dados de data ou carimbo de data/hora são tratadas como um tipo de carimbo de data/hora.

  • Colunas de string que representam dados numéricos são tratadas como um tipo numérico.

Com Databricks Runtime 10,1 MLe acima, o AutoML também faz estes ajustes:

  • Colunas numéricas que contêm IDs categóricas são tratadas como uma feição categórica.

  • Colunas de string que contêm texto em inglês são tratadas como uma feição de texto.

Anotações de tipo semântico

Com o Databricks Runtime 10.1 MLe acima, você pode controlar manualmente o tipo semântico atribuído, colocando uma anotação de tipo semântico em uma coluna. Para anotar manualmente o tipo semântico da coluna <column-name> como <semantic-type>, use a seguinte sintaxe:

metadata_dict = df.schema["<column-name>"].metadata
metadata_dict["spark.contentAnnotation.semanticType"] = "<semantic-type>"
df = df.withMetadata("<column-name>", metadata_dict)

<semantic-type> pode ser um dos seguintes:

  • categorical: A coluna contém valores categóricos (por exemplo, valores numéricos que devem ser tratados como IDs).

  • numeric: A coluna contém valores numéricos (por exemplo, valores de string que podem ser analisados em números).

  • datetimeA coluna contém valores de marca de tempo (string, numéricos ou valores de data que podem ser convertidos em marcas de tempo).

  • text: a coluna string contém texto em inglês.

Para desabilitar a detecção de tipo semântico em uma coluna, use a anotação de palavra-chave especial native.

Valores de Shapley (SHAP) para explicabilidade do modelo

Observação

Para MLR 11.1 eabaixo, gráficos SHAP não são gerados, se o dataset contiver uma coluna datetime.

Os notebooks produzidos pelas execuções de regressão e classificação do AutoML incluem código para calcular os valores de Shapley. Os valores de Shapley são baseados na teoria dos jogos e estimam a importância de cada recurso para as previsões de um modelo.

Os notebooks do AutoML usam o pacote SHAP para calcular os valores de Shapley. Como esses cálculos consomem muita memória, os cálculos não são realizados por padrão.

Para calcular e exibir valores de Shapley:

  1. Acesse a seção Importância do recurso em um notebook de teste gerado pelo AutoML.

  2. Defina shap_enabled = True.

  3. Execute novamente o notebook

Agregação de série temporal

Para problemas de previsão, quando há vários valores para um timestamp em uma série temporal, o AutoML usa a média dos valores.

Para usar a soma, edite o notebook do código fonte. Na célula Agregar dados por ... , altere .agg(y=(target_col, "avg")) para .agg(y=(target_col, "sum")), conforme mostrado:

group_cols = [time_col] + id_cols
df_aggregation = df_loaded \
  .groupby(group_cols) \
  .agg(y=(target_col, "sum")) \
  .reset_index() \
  .rename(columns={ time_col : "ds" })

Integração da Feature Store

Com o Databricks Runtime 11.3 LTS MLe acima, você pode usar tabelas de recursos existentes no Feature Store para aumentar o conjunto de dados de entrada original para seus problemas de classificação e regressão.

Com o Databricks Runtime 12.2 LTS MLe acima, você pode usar tabelas de recursos existentes no Feature Store para aumentar o conjunto de dados de entrada original para todos os seus problemas de AutoML: classificação, regressão e previsão.

Para criar uma tabela de recursos, consulte O que é um repositório de recursos?.

Para usar tabelas de recursos existentes, você pode selecionar tabelas de recursos com a IU do AutoML ou definir o parâmetro feature_store_lookups em sua especificação de execução do AutoML.

feature_store_lookups = [
  {
     "table_name": "example.trip_pickup_features",
     "lookup_key": ["pickup_zip", "rounded_pickup_datetime"],
  },
  {
      "table_name": "example.trip_dropoff_features",
     "lookup_key": ["dropoff_zip", "rounded_dropoff_datetime"],
  }
]

Geração Notebook de teste

Para experimentos de previsão, Notebook gerados pelo AutoML são importados automaticamente para seu workspace para todos os testes do seu experimento.

Para experimentos de classificação e regressão, Notebook gerado pelo AutoML para exploração de dados e o melhor teste em seu experimento são importados automaticamente para seu workspace. Notebook gerado para outros testes experimentais é salvo como artefatos MLflow no DBFS, em vez de ser importado automaticamente para seu workspace. Para todas as avaliações, exceto a melhor avaliação, notebook_path e notebook_url na TrialInfo API Python não são definidos. Se precisar usar esses Notebook, você poderá importá-los manualmente para seu workspace com a IU experimental do AutoML ou a databricks.automl.import_notebook API Python.

Se você usar apenas o Notebook de exploração de dados ou Notebook de melhor avaliação gerado pelo AutoML, a coluna Origem na IU do experimento do AutoML conterá o link para o Notebook gerado para a melhor avaliação.

Se você usar outro Notebook gerado na interface do experimento do AutoML, eles não serão importados automaticamente para o workspace. Você pode encontrar o Notebook clicando em cada execução do MLflow. O IPython Notebook é salvo na seção Artefatos da página de execução. Você pode downloads deste Notebook e importá-lo para o workspace, se os artefatos downloads estiverem habilitados pelos administradores workspace .

Exemplo de notebook: experimento do AutoML com o Feature Store

O notebook a seguir mostra como treinar um modelo de ML com tabelas de recursos do AutoML e do Feature Store.

Experiência de AutoML com notebook de anotações de exemplo do Feature Store

Abra o bloco de anotações em outra guia