Práticas recomendadas para criar dados de treinamento

Nesta página, você verá alguns conceitos básicos a serem considerados no momento de compor um conjunto de dados para o AutoML Tables. Esta página não é um guia completo sobre como tratar os dados.

Introdução

Um conjunto de dados bem projetado aumenta a qualidade do modelo de machine learning resultante. Siga as diretrizes nesta página para melhorar a qualidade do conjunto de dados e modelo.

Se você tiver experiência em criar dados de treinamento para modelos de machine learning, revise a lista de tarefas com que você não precisa se preocupar. O AutoML Tables realiza muitas tarefas de preparação de dados automaticamente.

Práticas recomendadas para a preparação de dados

Evitar o vazamento no destino

O vazamento no destino ocorre quando os dados de treinamento incluem informações preditivas que não estão disponíveis quando uma predição é solicitada. O vazamento no destino pode fazer com que o modelo apresente métricas de avaliação excelentes, mas tenha um desempenho ruim nos dados reais.

Por exemplo, suponha que você queira saber quanto sorvete sua loja venderá amanhã. Você não conseguirá incluir a temperatura do dia desejado nos seus dados de treinamento, porque não é possível saber, é algo que ainda não aconteceu. No entanto, é possível usar a temperatura prevista do dia anterior, que poderia ser incluída no pedido de previsão.

Evitar a distorção entre treinamento e exibição

A distorção entre treinamento e exibição ocorre quando os dados de treinamento são gerados de maneira diferente dos dados usados para solicitar predições.

Por exemplo, se você usar um valor médio dos últimos 10 dias para fins de treinamento, mas um valor médio do último mês na solicitação de predição.

Em geral, para impedir distorções entre treinamento e disponibilização, você deve revisar qualquer diferença entre o modo como são gerados os dados de treinamento e os dados de disponibilização (aqueles usados para conseguir previsões).

Distorção de disponibilização/treinamento e distribuição de dados

A distorção de disponibilização/treinamento também pode ocorrer com base na distribuição dos dados em divisões de dados de treinamento, validação e teste. Frequentemente há uma diferença entre a distribuição de dados que um modelo vê quando é implantado na produção versus a distribuição de dados do conjunto de dados em que um modelo é treinado. Por exemplo, na produção, um modelo pode ser aplicado a uma população de usuários totalmente diferente da observada durante o treinamento ou o modelo pode ser usado para fazer previsões 30 dias após os dados finais de treinamento serem gravados.

Para conseguir resultados melhores, certifique-se de que a distribuição das divisões de dados usadas para criar seu modelo reflita, com precisão, a diferença entre o conjunto de dados de treinamento e os dados para que serão feitas previsões no ambiente de produção. O AutoML Tables pode produzir previsões não monotônicas e, se os dados de produção forem amostrados de uma distribuição muito diferente dos dados de treinamento, as previsões não monotônicas não serão muito confiáveis.

Além disso, a diferença dos dados de produção versus dados de treinamento deverá se refletir na diferença entre a divisão de dados de validação e a divisão de dados de treinamento e entre a divisão de dados de teste e a divisão de dados de validação.

Por exemplo, se você estiver planejando fazer previsões sobre o valor da vida útil do usuário (LTV, na sigla em inglês) nos próximos 30 dias, certifique-se de que os dados na divisão de dados de validação sejam de 30 dias após os dados da divisão de dados de treinamento e de que os dados da divisão de dados de teste sejam de 30 dias após a divisão dos dados de validação.

Por outro lado, se você quiser que seu modelo se ajuste para fazer previsões generalizadas sobre novos usuários, certifique-se de que os dados de um usuário específico estejam contidos apenas em uma única divisão dos dados de treinamento. Por exemplo, todas as linhas relacionadas ao user1 estão na divisão de dados de treinamento, todas as linhas relacionadas ao user2 estão na divisão de dados de validação e todas as linhas relacionadas ao user3 estão na divisão de dados de teste.

Fornecer um sinal de data/hora

Se o padrão de base dos dados é que eles provavelmente mudarão ao longo do tempo, em vez de serem distribuídos aleatoriamente, forneça essa informação ao AutoML Tables. É possível fornecer um indicador de tempo de várias maneiras:

  • Se cada linha de dados tiver um carimbo de data/hora, verifique, ao criar um conjunto de dados, se essa coluna está incluída, se tem um tipo de dado Timestamp e se está definida como tempo. Essa ordenação é usada para dividir os dados: os mais recentes como dados de teste e os mais antigos como dados de treinamento. Saiba mais.

  • Se a coluna tempo não tiver muitos valores distintos, use uma divisão manual em vez da coluna de tempo para dividir seus dados. Caso contrário, você talvez não consiga linhas suficientes em cada conjunto de dados, o que pode causar falha no treinamento.

  • Caso as informações de tempo não estejam contidas em uma única coluna, faça uma divisão de dados manual para usar os dados mais recentes como os de teste e os mais antigos como os de treinamento.

Explicitar as informações quando necessário

Você não precisará realizar a engenharia de atributos ao criar um modelo usando AutoML Tables. No entanto, no caso de determinadas primitivas de dados, é possível melhorar a qualidade do modelo usando a engenharia de atributos.

Por exemplo, se os dados incluírem longitude e latitude, essas colunas serão tratadas como numéricas, sem cálculos especiais. Se a localização ou a distância fornecer sinal para o problema, você precisa fazer a engenharia de um atributo que forneça essas informações de maneira explícita.

Alguns tipos de dados que podem exigir engenharia de atributos:

  • Longitude/latitude
  • URLs
  • Endereços IP
  • Endereços de e-mail
  • Números de telefone
  • Outros códigos geográficos (por exemplo, códigos postais)

Incluir dados calculados ou agregados em uma linha

O AutoML Tables usa somente os dados de entrada em uma única linha para prever o valor desejado para aquela linha. Se você tiver calculado ou agregado dados de outras linhas ou fontes que seriam valiosos para determinar o valor previsto para uma linha, inclua esses dados na linha de origem. Tenha cuidado para que a nova coluna não provoque vazamento no destino ou distorção de treinamento/disponibilização.

Por exemplo, se você quiser prever a demanda de um produto para a próxima semana, melhore a qualidade da previsão incluindo colunas com os seguintes valores:

  • Número total de itens em estoque da mesma categoria do produto.
  • Preço médio dos itens em estoque da mesma categoria do produto.
  • Número de dias antes de um feriado famoso depois de solicitada a previsão.
  • E assim por diante...

Em outro exemplo, se você quiser prever se um usuário específico comprará um produto, melhore a qualidade da previsão incluindo colunas com os seguintes valores:

  • A média da taxa de conversão histórica ou a taxa de cliques para o usuário específico.
  • Quantos produtos estão no carrinho de compras do usuário.

Representar valores nulos como strings vazias

Se os dados usarem caracteres especiais ou números para representar valores nulos, isso poderá resultar em problemas para o AutoML Tables porque não saberemos o que eles significam. Se a importação for feita com um arquivo CSV, use strings vazias para representar os valores nulos. No BigQuery, use o valor NULL.

Evite valores ausentes sempre que possível

Verifique seus dados quanto a valores ausentes e corrija-os, se possível. Caso contrário, se a coluna estiver definida como anulável, deixe o valor em branco.

Usar espaços para separar texto

O AutoML Tables transforma strings de texto em tokens e é capaz de derivar o sinal de treinamento a partir de palavras individuais. Ele usa espaços para separar palavras. As palavras separadas por outros caracteres são tratadas como uma única entidade.

Por exemplo, se você fornecer o texto “vermelho/verde/azul”, ele não será convertido nos tokens “vermelho”, “verde” e “azul”. Caso essas palavras individuais sejam importantes para o treinamento do modelo, transforme o texto em “vermelho verde azul” antes de incluí-lo nos dados de treinamento.

Verificar a acurácia e limpeza dos atributos categóricos

Inconsistências nos dados podem fazer com que as categorias sejam divididas incorretamente. Por exemplo, se seus dados incluem “Marrom” e “marrom”, o AutoML Tables usa esses valores como categorias separadas, mesmo que você queira que façam parte da mesma. Erros de ortografia podem causar um efeito semelhante. Remova esses tipos de inconsistências dos dados categóricos antes de criar os dados de treinamento.

Tomar cuidado redobrado com classes desequilibradas

Se você tiver classes desequilibradas (um problema de classificação com um ou mais resultados raramente vistos), analise as dicas a seguir.

Fornecer dados de treinamento suficientes para a classe minoritária

Se você tiver apenas algumas linhas de dados para uma classe, isso causará degradação na qualidade do modelo. Se possível, forneça pelo menos 100 linhas de dados para cada classe.

Pensar em fazer a divisão manualmente

O AutoML Tables seleciona aleatoriamente as linhas para o conjunto de dados de teste, mas de maneira determinista. Quando há desequilíbrio entre as classes, o resultado pode ser um número muito pequeno (ou nenhum) da classe minoritária no conjunto de dados de teste e causar falha no treinamento.

Se houver desequilíbrio entre as classes, convém atribuir uma divisão manual para garantir que sejam incluídas linhas suficientes com o resultado minoritário em todas as divisões.

Evitar o viés

Garanta que os dados de treinamento sejam representativos de todo o universo de dados potenciais para os quais serão feitas predições. Por exemplo, se você tiver clientes no mundo inteiro, não use dados de treinamento de apenas um país.

Fornecer dados de treinamento suficientes

Se você não fornecer dados de treinamento suficientes (linhas), o modelo resultante poderá ter um desempenho ruim. Quanto mais atributos (colunas) você usar para treinar o modelo, mais dados (linhas) precisará fornecer. Uma boa meta para modelos de classificação é ter pelo menos 10 vezes mais linhas do que colunas. No caso dos modelos de regressão, forneça pelo menos 50 vezes mais linhas do que o número de colunas.

O conjunto de dados precisa incluir sempre no mínimo 1.000 linhas.

Deixar todas as outras etapas de pré-processamento e transformação para o AutoML Tables

A menos que expresso o contrário, deixe que o AutoML Tables realize a engenharia de atributos por você. O AutoML Tables funciona melhor quando tem acesso aos dados subjacentes. Consulte Preparação dos dados que o AutoML Tables faz automaticamente.

Preparação dos dados que o AutoML Tables faz automaticamente

Nesta seção, estão listados os requisitos comuns para dados de treinamento que o AutoML Tables faz automaticamente. Você não precisa incluir esses cálculos nos dados de treinamento. Aliás, ao realizar essas transformações e incluí-las nos dados de treinamento, talvez você diminua a qualidade do modelo resultante.

As transformações automáticas a seguir são aplicadas a cada coluna de recurso, dependendo do tipo de coluna:

Tipo de coluna Transformação
Numérico
  • O valor convertido em float32.
  • O z_score do valor.
  • Um índice do bucket de valor com base em quantis. O tamanho do bucket é 100.
  • log(value+1) quando o valor for maior ou igual a 0. Caso contrário, essa transformação não é aplicada e o valor é considerado um valor ausente.
  • z_score de log(value+1) quando o valor for maior ou igual a 0. Caso contrário, essa transformação não é aplicada e o valor é considerado um valor ausente.
  • Um valor booleano que indica se o valor é nulo.
  • Linhas com entradas numéricas inválidas (por exemplo, uma string que não pode ser analisada para float32) não são incluídas para treinamento e previsão.
  • Valores extremos/outliers não recebem nenhum tratamento especial.
Matriz numérica
  • Todas as transformações para tipos Numéricos aplicadas à média dos últimos N itens onde N = {1, 2, 4, 8, todos}. Assim, os itens mais enfatizados são os que estão no final da matriz, não no início.
  • A média das matrizes vazias será tratada como zero.
Categórico
  • A string categórica como está, sem mudança de letras maiúsculas e minúsculas, pontuação, ortografia, tempo verbal e assim por diante.
  • Converta o nome da categoria em um índice de pesquisa de dicionário e gere uma incorporação para cada índice.
  • As categorias exibidas menos de cinco vezes no conjunto de dados de treinamento são tratadas como categoria "desconhecida". A categoria "desconhecida" recebe seu próprio índice especial de busca e incorporação resultante.
Matriz categórica
  • Para cada elemento na matriz dos últimos N itens em que N = {1, 2, 4, 8, todos}, converta o nome da categoria em um índice de busca de dicionário e gere uma incorporação para cada índice. Combinar a incorporação de todos os elementos em uma única incorporação usando a média.
  • Matrizes vazias são tratadas como uma incorporação de zeros.
Texto
  • O texto como está, sem mudanças de letras maiúsculas e minúsculas, pontuação, ortografia, tempo verbal e assim por diante.
  • Tokenizar o texto para palavras e gerar 1-grama e 2-gramas de palavras. Converter cada n-grama em um índice de busca de dicionário e gerar uma incorporação para cada índice. Combinar a incorporação de todos os elementos em uma única incorporação usando a média.

    A tokenização é baseada em limites de script Unicode.

  • Valores ausentes recebem o próprio índice de busca e incorporação resultante.
  • Palavras de parada não recebem tratamento especial e não são removidas.
Matriz de texto
  • Concatenar todos os valores de texto da matriz em um único valor de texto usando um espaço (" ") como delimitador e, em seguida, tratar o resultado como um único valor de texto. Aplicar as transformações nas colunas Texto.
  • Matrizes vazias são tratadas como uma incorporação de zeros.
Carimbo de data/hora
  • Aplicar as transformações nas colunas Numéricas.
  • Determinar ano, mês, dia e dia da semana. Tratar cada valor do timestamp como uma coluna Categórica.
  • Valores numéricos inválidos (por exemplo, valores que estão fora de um intervalo típico de carimbo de data/hora ou são valores extremos) não recebem tratamento especial e não são removidos.
  • Linhas com entradas de carimbo de data/hora inválidas (por exemplo, uma string de carimbo de data/hora inválida) não são incluídas para treinamento e previsão.
Matriz de carimbo de data/hora
  • Aplicar as transformações das colunas Numéricas à média dos últimos N itens da matriz. N = {1, 2, 4, 8, todos}. Isso significa que os itens mais enfatizados são os que estão no final da matriz.
Struct
  • Os valores struct são nivelados automaticamente em campos. Os campos nivelados recebem tratamento de acordo com o tipo de coluna.

Valores nulos ou ausentes

É possível escolher como os valores nulos serão processados nos dados de treinamento. Basta definir se a coluna será anulável ou não no esquema do conjunto de dados. Para mais informações, consulte Como criar um conjunto de dados.

Se um valor nulo aparecer em uma coluna não anulável, toda a linha será excluída do treinamento.

Valores nulos em colunas anuláveis são representados por uma variável de indicador especial que indica que o valor estava nulo ou ausente. Para transformações categóricas e de texto, o indicador resulta em uma incorporação.

O AutoML Tables trata os seguintes valores como nulos:

  • Um valor NULL do BigQuery.

  • NaN ou valores numéricos infinitos.

  • Uma string vazia. O AutoML Tables não corta espaços das strings. Ou seja, " " não é considerado um valor nulo.

  • Uma string que pode ser convertida em NaN ou valor numérico infinito.

    • Para "NAN": ignorar maiúsculas e minúsculas com um sinal de mais ou de menos opcional.
    • Para "INF": ignorar maiúsculas e minúsculas, com um sinal de mais ou menos opcional.
  • Valores ausentes.

A seguir