Preparação e processamento de dados do Databricks AutoML
Este artigo descreve como Databricks AutoML prepara os dados para machine learning treinamento e descreve as definições de dados configuráveis. O senhor pode ajustar essas opções durante a configuração do experimento na UI do AutoML. Para definir essas configurações usando a API do AutoML, consulte a referência da API do AutoML Python.
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
eDoubleType
)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)
Seleção de colunas
Observação
Essa funcionalidade está disponível apenas para problemas de classificação e regressão
Em Databricks Runtime 10.3 ML e acima, o senhor pode especificar quais colunas AutoML deve usar para treinamento. Para excluir uma coluna na UI, desmarque-a na coluna Include (Incluir ). Na API, use o parâmetro exclude_cols
. Para obter mais informações, consulte Databricks AutoML Python API referência.
O senhor não pode soltar a coluna selecionada como Alvo de previsão ou como coluna de tempo para dividir os dados.
Em default, todas as colunas são incluídas.
Imputar valores ausentes
Em Databricks Runtime 10.4 LTS ML e acima, o senhor pode especificar como os valores nulos são imputados. Na interface do usuário, selecione um método no menu suspenso da coluna Impute with (Imputar com ) no esquema da tabela. Na API, use o parâmetro imputers
. Para obter mais informações, consulte Databricks AutoML Python API referência.
Em default, AutoML seleciona um método de imputação com base no tipo e no conteúdo da coluna.
Observação
Se o senhor especificar um método de imputação que não seja odefault, o AutoML não realizará a detecção do tipo semântico.
Dividir os dados em conjuntos de ensino, validação e teste
O AutoML divide seus dados em três divisões para treinamento, validação e teste. Dependendo do tipo de problema de ML, o senhor tem diferentes opções para dividir os dados.
Dados divididos para regressão e classificação
Use os métodos a seguir para dividir os dados em conjuntos de treinamento, validação e teste para tarefas de regressão e classificação:
(default) Divisão aleatória: Se uma estratégia de divisão de dados não for especificada, o site dataset será dividido aleatoriamente em 60% de divisão de ensino, 20% de divisão de validação e 20% de divisão de teste. Para a classificação, uma divisão aleatória estratificada garante que cada classe seja adequadamente representada nos conjuntos de treinamento, validação e teste.
Divisão cronológica: Em Databricks Runtime 10.4 LTS ML e acima, o senhor pode selecionar uma coluna de tempo para criar divisões cronológicas de ensino, validação e teste. As divisões cronológicas usam os pontos de dados mais antigos para treinamento, os próximos mais antigos para validação e os pontos mais recentes para teste. A coluna de tempo pode ser um carimbo de data/hora, um número inteiro ou uma coluna de cadeias de caracteres.
Divisão manual: Em Databricks Runtime 15.3 ML e acima, o senhor pode usar o API para configurar uma divisão manual. Especifique uma coluna dividida e use os valores train
, validate
ou test
para identificar as linhas que o senhor deseja usar para treinamento, validação e teste do conjunto de dados. Todas as linhas com valores de coluna dividida diferentes de train
, test
ou validate
são ignoradas e um alerta correspondente é gerado.
Dados divididos para previsão
Para prever a tarefa, o site AutoML usa a validação cruzada de séries temporais. Esse método amplia de forma incremental o treinamento dataset cronologicamente e realiza a validação em pontos de tempo subsequentes. A validação cruzada fornece uma avaliação robusta do desempenho de um modelo em diferentes segmentos temporais. Ele garante que o modelo de previsão seja rigorosamente testado em relação a dados futuros não vistos, mantendo a relevância e a precisão das previsões.
O número de dobras de validação cruzada depende das características da tabela de entrada, como o número de séries temporais, a presença de covariáveis e o comprimento da série temporal.
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.
O senhor 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 default é 1; o valor máximo é o número de CPUs no nó worker. Quando o senhor aumenta esse valor, o tamanho da amostra é maior, mas menos tentativas são executadas em paralelo. Por exemplo, em uma máquina com quatro núcleos e 64 GB de RAM total, o defaultspark.task.cpus=1
executa quatro tentativas por worker, com cada tentativa limitada a 16 GB de RAM. Se o senhor definirspark.task.cpus=4
, cada worker execução apenas uma tentativa, mas essa tentativa pode 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 mais 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 treinamento desequilibrado dataset, AutoML usa pesos de classe que são inversamente relacionados ao grau em que uma determinada classe é reduzida na amostra. Por exemplo, se um treinamento dataset com 100 amostras tiver 95 amostras pertencentes à classe A e cinco amostras pertencentes à classe B, o site AutoML reduzirá esse desequilíbrio reduzindo a amostragem da classe A para 70 amostras, ou seja, reduzindo a amostragem da classe A em uma proporção de 70/95 ou 0,736, mantendo o número de amostras na classe B em 5. Para garantir que o modelo final seja calibrado corretamente e que a distribuição de probabilidade da saída do modelo seja a mesma da entrada, o site AutoML aumenta o peso da classe A na proporção de 1/0,736, ou 1,358, enquanto mantém o peso da classe B em 1. 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.
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 em vez disso, edite o código-fonte Notebook gerado pela execução do teste. Na célula Aggregate data by ... (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" })
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 que têm métodos de imputação personalizados especificados.
Com Databricks Runtime 9.1 LTS ML e acima, 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, às vezes, podem não detectar a existência de tipos semânticos. O senhor também pode definir manualmente o tipo semântico de uma coluna ou informar ao site AutoML para não aplicar a detecção de tipo semântico a uma coluna usando a anotação.
Especificamente, o AutoML faz estes ajustes:
As colunas de strings e 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).datetime
A 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
.
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 recurso engenharia and serving.
Para usar tabelas de recurso existentes, o senhor pode selecionar tabelas de recurso com a interface do usuário AutoML ou definir o parâmetro feature_store_lookups
na especificação de execuçãoAutoML .
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"],
}
]