Divisões de dados tabulares

Quando você usa um conjunto de dados para treinar um modelo do AutoML, seus dados são divididos em três divisões: uma divisão de treinamento, uma divisão de validação e uma divisão de teste. O objetivo principal ao criar divisões de dados é garantir que seu conjunto de teste represente dados de produção com precisão. Assim, temos a certeza de que as métricas de avaliação indicam com exatidão como o modelo funcionará com dados reais.

Nesta página, descrevemos como os conjuntos de treinamento, validação e teste da Vertex AI usam seus dados para treinar um modelo do AutoML e as maneiras de controlar como os dados são divididos entre esses três conjuntos. Os algoritmos de divisão de dados para classificação e regressão são diferentes dos algoritmos de divisão para previsão.

Divisão de dados para classificação e regressão

Como as divisões de dados são usadas

As divisões de dados são usadas no processo de treinamento da seguinte maneira:

  1. Modelos de avaliação

    O conjunto de treinamento é usado para treinar modelos com diferentes combinações de pré-processamento, arquitetura e opções de hiperparâmetros. Esses modelos são avaliados no conjunto de validação para avaliar a qualidade, o que orienta a exploração de combinações de outras opções. O conjunto de validação também é usado para selecionar o melhor checkpoint na avaliação periódica durante o treinamento. Os melhores parâmetros e arquiteturas determinados na fase de ajuste paralelo são usados para treinar dois modelos do conjunto, conforme descrito abaixo.

  2. Avaliação de modelos

    O Vertex AI treina um modelo de avaliação usando os conjuntos de treinamento e validação como dados de treinamento. A Vertex AI gera as métricas de avaliação do modelo finais usando o conjunto de teste. Essa é a primeira vez em que o conjunto de teste é usado durante o processo. Essa abordagem garante que as métricas de avaliação finais sejam um reflexo imparcial do desempenho do modelo treinado final na produção.

  3. Modelo de exibição

    Um modelo é treinado com os conjuntos de treinamento, validação e teste para maximizar a quantidade de dados de treinamento. Esse modelo é aquele que você usa para solicitar previsões on-line ou previsões em lote.

Divisão de dados padrão

Por padrão, a Vertex IA usa um algoritmo de divisão aleatória para separar seus dados nas três divisões de dados. A Vertex AI seleciona aleatoriamente 80% das linhas de dados para o conjunto de treinamento, 10% para o conjunto de validação e 10% para o conjunto de teste. Recomendamos a divisão padrão para conjuntos de dados que são:

  • Mudando com o tempo.
  • Relativamente equilibrado.
  • Distribuído como os dados usados para previsões na produção.

Para usar a divisão de dados padrão, aceite o padrão no console do Cloud ou deixe o campo split vazio para a API.

Opções para controlar divisões de dados

É possível controlar quais linhas são selecionadas para cada divisão usando uma das seguintes abordagens:

  • Divisão aleatória: define as porcentagens divididas e atribui aleatoriamente as linhas de dados.
  • Divisão manual: selecione linhas específicas para usar no treinamento, na validação e nos testes na coluna de divisão de dados.
  • Divisão cronológica: divida seus dados por tempo na coluna "Tempo".

Você escolhe apenas uma destas opções: você escolhe quando treina o modelo. Algumas dessas opções exigem alterações nos dados de treinamento (por exemplo, a coluna de divisão de dados ou a coluna de tempo). A inclusão de dados para opções de divisão de dados não exige que você use essas opções. É possível escolher outra opção ao treinar o modelo.

A divisão padrão não é a melhor escolha se:

  • Você não está treinando um modelo de previsão, mas os dados são sensíveis ao tempo.

    Nesse caso, use uma divisão cronológica ou uma divisão manual que resulte na utilização dos dados mais recentes como o conjunto de teste.

  • Os dados de teste incluem dados de populações que não serão representadas na produção.

    Por exemplo, suponha que você esteja treinando um modelo com dados de compras de várias lojas. Entretanto, você sabe que o modelo será usado principalmente para fazer previsões para lojas que não fazem parte dos dados de treinamento. Para garantir que o modelo possa generalizar para lojas não vistas, você deve separar os conjuntos de dados por lojas. Em outras palavras, seu conjunto de teste deve incluir somente lojas que não estejam no conjunto de avaliação, e o conjunto de avaliação deve, por sua vez, ter apenas lojas que não estejam no conjunto de treinamento.

  • Não há equilíbrio entre as classes.

    Se uma classe tiver muito mais volume do que outras nos dados de treinamento, talvez seja necessário incluir manualmente mais exemplos nas classes minoritárias nos dados de teste. O Vertex AI não realiza uma amostragem estratificada. Portanto, o conjunto de teste pode incluir poucos exemplos ou até mesmo nenhum exemplo da classe minoritária.

Divisão aleatória

A divisão aleatória também é conhecida como "divisão matemática" ou "divisão fracionária".

Por padrão, as porcentagens dos dados de treinamento usados nos conjuntos de treinamento, validação e teste são 80, 10 e 10, respectivamente. Se você estiver usando o console do Google Cloud, poderá alterar as porcentagens para valores que totalizem 100. Se estiver usando a API Vertex AI, use frações que totalizem 1,0.

Para alterar os percentuais (frações), use o objeto FractionSplit para definir as frações.

As linhas são selecionadas aleatoriamente na divisão de dados, mas de maneira determinista. Se você não estiver satisfeito com a composição das divisões de dados geradas, faça a divisão manualmente ou altere os dados de treinamento. Treinar um novo modelo com os mesmos dados de treinamento resulta na mesma divisão de dados.

Divisão manual

A divisão manual também é conhecida como "divisão predefinida".

Na coluna de divisão de dados, é possível selecionar as linhas específicas a serem usadas para treinamento, validação e teste. Ao criar os dados de treinamento, adicione uma coluna que contendo um dos seguintes valores, com diferenciação entre maiúsculas e minúsculas:

  • TRAIN
  • VALIDATE
  • TEST
  • UNASSIGNED

A combinação dos valores nesta coluna precisa contemplar uma das seguintes possibilidades:

  • Todos TRAIN, VALIDATE e TEST
  • Somente TEST e UNASSIGNED

Todas as linhas precisam ter um valor para essa coluna, ela não pode ser uma string vazia.

Por exemplo, com todos os conjuntos especificados:

"TRAIN","John","Doe","555-55-5555"
"TEST","Jane","Doe","444-44-4444"
"TRAIN","Roger","Rogers","123-45-6789"
"VALIDATE","Sarah","Smith","333-33-3333"

Com apenas o conjunto de teste especificado:

"UNASSIGNED","John","Doe","555-55-5555"
"TEST","Jane","Doe","444-44-4444"
"UNASSIGNED","Roger","Rogers","123-45-6789"
"UNASSIGNED","Sarah","Smith","333-33-3333"

A coluna de divisão de dados pode ter qualquer nome de coluna válido. O tipo de transformação pode ser categórico, de texto ou automático.

Se o valor da coluna de divisão de dados for UNASSIGNED, a Vertex AI atribuirá a linha automaticamente ao conjunto de treinamento ou ao conjunto de validação.

Designar uma coluna como uma coluna de divisão de dados durante o treinamento do modelo.

Divisão cronológica

A divisão cronológica também é conhecida como "divisão de carimbo de data/hora".

Se os seus dados dependem do tempo, é possível designar uma coluna como Coluna de tempo. A Vertex AI usa a coluna Data/hora para dividir seus dados, com as primeiras linhas usadas para treinamento, as linhas seguintes para validação e as últimas linhas para teste.

A Vertex AI trata todas as linhas como exemplos de treinamento, distribuídas de maneira independente e idêntica. Definir a Coluna de tempo não mudará isso. A coluna Data/hora é usada apenas para dividir o conjunto de dados.

Se você especificar uma coluna Data/hora, precisará incluir um valor para a coluna Data/hora para cada linha no conjunto de dados. Verifique se a coluna Data/hora tem uma quantidade suficiente de valores distintos para que os conjuntos de validação e teste não fiquem vazios. Normalmente, pelo menos 20 valores distintos é o suficiente.

Os dados na coluna data/hora precisam estar em conformidade com um dos formatos aceitos pela transformação de carimbo de data/hora. No entanto, a coluna data/hora pode ter qualquer transformação compatível porque ela afeta apenas a maneira como essa coluna é usada no treinamento. As transformações não afetam a divisão de dados.

Também é possível especificar as porcentagens dos dados de treinamento que são atribuídas a cada conjunto.

Designar uma coluna como Coluna de tempo durante o treinamento do modelo.

Divisão de dados para previsão

Por padrão, a Vertex IA usa um algoritmo de divisão cronológica para separar os dados de previsão nas três divisões de dados. Recomendamos usar a divisão padrão. No entanto, se você quiser controlar quais linhas de dados de treinamento são usadas para cada divisão, use uma divisão manual.

Como as divisões de dados são usadas

As divisões de dados são usadas no processo de treinamento da seguinte maneira:

  1. Modelos de avaliação

    O conjunto de treinamento é usado para treinar modelos com diferentes combinações de pré-processamento, arquitetura e opções de hiperparâmetros. Esses modelos são avaliados no conjunto de validação para avaliar a qualidade, o que orienta a exploração de combinações de outras opções. O conjunto de validação também é usado para selecionar o melhor checkpoint na avaliação periódica durante o treinamento. Os melhores parâmetros e arquiteturas determinados na fase de ajuste paralelo são usados para treinar dois modelos do conjunto, conforme descrito abaixo.

  2. Avaliação de modelos

    O Vertex AI treina um modelo de avaliação usando os conjuntos de treinamento e validação como dados de treinamento. A Vertex AI gera as métricas de avaliação do modelo finais usando o conjunto de teste. Essa é a primeira vez em que o conjunto de teste é usado durante o processo. Essa abordagem garante que as métricas de avaliação finais sejam um reflexo imparcial do desempenho do modelo treinado final na produção.

  3. Modelo de exibição

    Um modelo é treinado com o conjunto de treinamento e validação. Ele é validado (para selecionar o melhor checkpoint) usando o conjunto de teste. O conjunto de teste nunca é treinado, no sentido de que a perda é calculada com base nele. Esse modelo é aquele que você usa para solicitar previsões.

Divisão padrão

A divisão de dados padrão (cronológica) funciona da seguinte maneira:

  1. Os dados de treinamento são classificados por data.
  2. Usando as porcentagens de conjunto predeterminadas (80/10/10), o período coberto pelos dados de treinamento é separado em três blocos, um para cada conjunto de treinamento.
  3. As linhas vazias são adicionadas ao início de cada série temporal para permitir que o modelo aprenda com linhas que não têm histórico suficiente (janela de contexto). O número de linhas adicionadas é o tamanho da janela de contexto definida no momento do treinamento.
  4. Usando o tamanho do horizonte de previsão definido no momento do treinamento, cada linha com dados futuros (horizonte de previsão) se enquadra em um dos conjuntos de dados de cada conjunto. (As linhas que têm um horizonte de previsão com dois conjuntos são descartadas para evitar o vazamento de dados).

    Diagrama de divisão cronológica

Divisão manual

Na coluna de divisão de dados, é possível selecionar as linhas específicas a serem usadas para treinamento, validação e teste. Ao criar os dados de treinamento, adicione uma coluna que contendo um dos seguintes valores, com diferenciação entre maiúsculas e minúsculas:

  • TRAIN
  • VALIDATE
  • TEST

Todas as linhas precisam ter um valor para essa coluna, ela não pode ser uma string vazia.

Exemplo:

"TRAIN","sku_id_1","2020-09-21","10"
"TEST","sku_id_1","2020-09-22","23"
"TRAIN","sku_id_2","2020-09-22","3"
"VALIDATE","sku_id_2","2020-09-23","45"

A coluna de divisão de dados pode ter qualquer nome de coluna válido. O tipo de transformação pode ser categórico, de texto ou automático.

Designar uma coluna como uma coluna de divisão de dados durante o treinamento do modelo.

Tome cuidado para evitar o vazamento de dados entre suas séries temporais.