Os seguintes tópicos são abordados:
- Práticas recomendadas para todos os modelos de dados tabulares
- Práticas recomendadas para modelos tabulares do AutoML
- Práticas recomendadas para modelos de previsão tabular
- Práticas recomendadas para o formato de dados
Práticas recomendadas para todos os modelos de dados tabulares
As práticas recomendadas a seguir se aplicam à criação de um modelo do AutoML ou a um modelo treinado personalizado que usa dados tabulares.
Evite vazamento de dados.
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.
Isso também pode ocorrer quando você usa os mesmos dados em várias divisões. Se você estiver usando dados de série temporal, verifique se os dados da mesma data são usados apenas em uma das três divisões de dados.
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 melhores resultados, 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 os dados de treinamento e os dados em que serão feitas previsões no ambiente de produção. A Vertex AI pode produzir previsões não monotônicas e, se os dados de produção forem amostras 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
Para modelos de classificação e regressão, se é provável que o padrão subjacente dos dados seja alterado ao longo do tempo, em vez de serem distribuídos aleatoriamente, forneça essa informação à Vertex AI. É 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 maisSe 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
Para alguns primitivos 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
A Vertex AI usa apenas os dados de entrada em uma única linha para prever o valor de destino dessa 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.
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.
Práticas recomendadas para modelos tabulares do AutoML
As práticas recomendadas a seguir são para criar dados de treinamento tabulares para modelos tabulares do AutoML.
Representar valores nulos de forma adequada
Se a importação for feita com um arquivo CSV, use strings vazias para representar os valores nulos. No BigQuery, use o valor NULL.
Se os dados usarem caracteres especiais ou números para representar valores nulos, incluindo zero, esses valores serão interpretados incorretamente, reduzindo a qualidade do modelo.
Evite valores ausentes sempre que possível
Verifique seus dados quanto a valores ausentes e corrija-os, se possível. Caso contrário, deixe o valor em branco e ele será tratado como um valor nulo.
Usar espaços para separar texto
A Vertex AI tokeniza strings de texto e pode 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 os dados incluírem "Marrom" e "marrom", a Vertex AI 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.
Tome cuidado especial com classes desequilibradas para modelos de classificação
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
Ter poucas linhas de dados em uma classe prejudica a qualidade do modelo. Se possível, forneça pelo menos 100 linhas de dados para cada classe.
Pensar em fazer a divisão manualmente
A Vertex AI seleciona as linhas do conjunto de dados de teste aleatoriamente, 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.
Fornecer dados de treinamento suficientes
Se você não fornecer dados de treinamento suficientes, o modelo resultante poderá ter um desempenho ruim. Quanto mais colunas você usar para treinar o modelo, mais dados precisará fornecer.
O conjunto de dados precisa incluir sempre no mínimo 1.000 linhas.
A tabela a seguir apresenta algumas heurísticas para a quantidade de dados de treinamento a serem fornecidos, dependendo do seu objetivo.
Objetivo | Quantidade mínima sugerida de dados de treinamento |
---|---|
Classificação | Pelo menos 10 vezes mais linhas do que colunas. |
Previsão | Pelo menos 10 séries temporais para cada coluna usada para treinar o modelo. |
Regressão | Pelo menos 50 vezes mais linhas do que o número de colunas. |
Deixar todas as outras etapas de pré-processamento e transformação para a Vertex AI
Salvo indicação contrária acima, deixe a Vertex AI fazer a engenharia de atributos para treinar um modelo do AutoML. O AutoML Tables funciona melhor quando tem acesso aos dados subjacentes. Para uma lista de todas as transformações que o AutoML realiza por tipo de transformação, consulte Transformações da Vertex AI.
Práticas recomendadas para modelos de previsão tabular
Os dados de treinamento para modelos de previsão têm algumas considerações especiais.
Considerações para escolher a granularidade dos dados
Ao treinar um modelo de previsão, você especifica granularidadedos dados ou o intervalo de tempo entre as linhas dos dados de treinamento. Pode ser de hora em hora, diária, semanal, mensal ou anual. Além disso, pode ser a cada 1, 5, 10, 15 ou 30 minutos.
A granularidade de dados precisa ser consistente em todos os dados de treinamento e em todos os dados de previsão em lote. Se você especificar uma granularidade diária e houver dois dias entre duas linhas de dados de treinamento, a Vertex AI tratará o dia temporário como dados ausentes, o que pode prejudicar o desempenho do modelo. Várias linhas na mesma série temporal com o mesmo carimbo de data/hora (conforme determinado pela granularidade) são consideradas um erro de validação no momento do treinamento.
Geralmente, suas práticas de coleta de dados determinam a granularidade delas.
Como encontrar um bom valor para a janela de contexto
Se você espera ter muitos dados de previsão que não se estendam no passado (inicializações a frio), comece definindo a janela de contexto como 0. Caso contrário, uma janela de contexto entre o tamanho do horizonte de previsão e 10 vezes o tamanho do horizonte de previsão funcionará bem.
Siga estas etapas para encontrar um bom valor para seus dados:
Para a primeira iteração de treinamento, defina a janela de contexto e o horizonte de previsão com o mesmo valor e defina o orçamento de treinamento como pelo menos seis horas.
Treine o modelo novamente, com o mesmo orçamento de treinamento, mas o dobro da janela de contexto para o dobro do horizonte de previsão.
Se as métricas de avaliação do segundo modelo mostrarem melhorias significativas, treine o modelo novamente, aumentando a janela de contexto para cinco vezes o tamanho do horizonte de previsão. Faça um aumento proporcional no orçamento de treinamento (se você treinou 10 horas na primeira etapa, aumente o orçamento de treinamento para 50 horas).
Continue aumentando a janela de contexto até deixar de ver as métricas de avaliação aprimoradas ou até que os resultados sejam satisfatórios. Reverta para o valor mais baixo da janela de contexto que produziu resultados aceitáveis.
Aumentar a janela de contexto tem os seguintes efeitos:
Aumenta o tempo de treinamento
Com uma janela de contexto maior, o modelo usa mais pontos de dados no treinamento, o que aumenta o tempo de treinamento.
Aumenta a quantidade necessária de histórico para os dados de previsão
Os dados de previsão precisam fornecer o maior número de pontos de dados históricos como o valor da janela de contexto.
Práticas recomendadas para o formato de dados
É possível criar os dados de treinamento no formato amplo ou restrito. Para modelos de regressão e classificação, o formato amplo é amplamente usado e pode ser mais fácil de montar e revisar. Para modelos de previsão, o uso do formato estreito pode ajudar a evitar a configuração de conexões não intencionais entre os dados e o destino (vazamento de dados).
Quando você cria dados de treinamento para treinar um modelo de previsão, cada linha precisa representar uma única observação em uma única série temporal. Você precisa ter uma coluna que represente o identificador da série temporal (como a série temporal se diferencia entre si) e uma coluna que represente o valor que será previsão (seu objetivo). Todos os outros valores na linha usados para treinar o modelo precisam estar presentes no momento da solicitação de uma previsão para o objetivo.
Considere a seguinte amostra de dados de treinamento (simplificado e abreviado):
Data | Widget_1_Demand | Widget_2_Demand | Widget_3_Demand | Promo | Região |
---|---|---|---|---|---|
01/01/2019 | 112 | 241 | 0 | 0 | CA |
01/02/2019 | 141 | 219 | 0 | 1 | CA |
01/03/2019 | 149 | 244 | 0 | 0 | CA |
01/01/2019 | 52 | 0 | 43 | 0 | IL |
01/02/2019 | 81 | 0 | 26 | 1 | IL |
01/03/2019 | 89 | 0 | 86 | 0 | IL |
Essa tabela, em formato amplo, mostra dados da empresa por data, mas não seria utilizável para um modelo de previsão na forma atual. Não há coluna de objetivo única, coluna de código de série temporal e, para nenhuma data específica, você saberá a demanda dos outros widgets no momento da previsão.
Você pode converter a tabela neste formato:
Data | Produto | Region_CA_Demand | Region_IL_Demand | Promo |
---|---|---|---|---|
01/01/2019 | Widget_1 | 112 | 52 | 0 |
01/02/2019 | Widget_1 | 141 | 81 | 1 |
01/03/2019 | Widget_1 | 149 | 89 | 0 |
01/01/2019 | Widget_2 | 241 | 0 | 0 |
01/02/2019 | Widget_2 | 219 | 0 | 1 |
01/03/2019 | Widget_2 | 244 | 0 | 0 |
01/01/2019 | Widget_3 | 0 | 43 | 0 |
01/02/2019 | Widget_3 | 0 | 26 | 1 |
01/03/2019 | Widget_3 | 0 | 86 | 0 |
Agora temos uma possível coluna de ID de série temporal, Produto. No entanto, esse formato poderia ser usado apenas para prever uma das regiões. Os dados da outra região precisam ser conhecidos no momento da previsão.
A solução é converter para o formato estreito, para que cada linha represente uma única observação. Todos os dados independentes da série temporal são repetidos para cada linha:
Data | Demanda | ID | Promo |
---|---|---|---|
01/01/2019 | 112 | Widget_1_CA | 0 |
01/02/2019 | 141 | Widget_1_CA | 1 |
01/03/2019 | 149 | Widget_1_CA | 0 |
01/01/2019 | 52 | Widget_1_IL | 0 |
01/02/2019 | 81 | Widget_1_IL | 1 |
01/03/2019 | 89 | Widget_1_IL | 0 |
01/01/2019 | 241 | Widget_2_CA | 0 |
01/02/2019 | 219 | Widget_2_CA | 1 |
01/03/2019 | 244 | Widget_2_CA | 0 |
01/01/2019 | 0 | Widget_2_IL | 0 |
01/02/2019 | 0 | Widget_2_IL | 1 |
01/03/2019 | 0 | Widget_2_IL | 0 |
01/01/2019 | 0 | Widget_3_CA | 0 |
01/02/2019 | 0 | Widget_3_CA | 1 |
01/03/2019 | 0 | Widget_3_CA | 0 |
01/01/2019 | 43 | Widget_3_IL | 0 |
01/02/2019 | 26 | Widget_3_IL | 1 |
01/03/2019 | 86 | Widget_3_IL | 0 |
Agora temos um identificador de série temporal (ID), uma coluna de destino (Demanda) e uma coluna de Tempo (Data). Além disso, cada linha é baseada em uma única observação, que pode ser usada para prever o valor pretendido. A coluna "Promoção" é usada como um recurso para treinar o modelo.
Na realidade, você terá muito mais linhas e muito mais colunas do que esses exemplos. No entanto, é preciso seguir as diretrizes aqui para estruturar os dados e evitar vazamentos.
A seguir
- Os meus dados são adequados? Uma lista de verificação antes do ML (em inglês).
- Como preparar e selecionar dados para machine learning.