Os seguintes tópicos são abordados:
- Práticas recomendadas para todos os modelos de dados tabulares
- Práticas recomendadas para modelos AutoML tabulares
- Práticas recomendadas para modelos de previsão tabulares
- Práticas recomendadas para o formato de dados
Práticas recomendadas para todos os modelos de dados tabulares
As seguintes práticas recomendadas aplicam-se quer crie um modelo do AutoML ou um modelo preparado personalizado que use dados tabulares.
Evite a fuga de dados
A fuga de dados ocorre quando os seus dados de preparação incluem informações preditivas que não estão disponíveis quando pede uma inferência. A fuga de dados pode fazer com que o seu modelo apresente excelentes métricas de avaliação, mas tenha um desempenho fraco em dados reais.
Por exemplo, suponhamos que quer saber quantos gelados a sua loja vai vender amanhã. Não pode incluir a temperatura do dia de destino nos dados de preparação, porque não conhece a temperatura (ainda não aconteceu). No entanto, pode usar a temperatura prevista do dia anterior, que pode incluir no pedido de inferência.
A fuga de dados também pode ocorrer quando usa os mesmos dados em várias divisões de dados. Se usar dados de séries cronológicas, certifique-se de que os dados da mesma data só são usados numa das três divisões de dados.
Evite o desvio aprendizagem/publicação
A discrepância entre a preparação e a publicação ocorre quando gera os dados de preparação de forma diferente da forma como gera os dados que usa para pedir inferências.
Por exemplo, se usar um valor médio e, para fins de formação, fizer a média durante 10 dias, mas, quando pedir a inferência, fizer a média durante o último mês.
Em geral, reveja qualquer diferença entre a forma como gera os dados de preparação e os dados de publicação (os dados que usa para gerar inferências) para evitar a discrepância entre a preparação e a publicação.
Desvio aprendizagem/publicação e distribuição de dados
A discrepância entre a preparação e a publicação também pode ocorrer com base na distribuição dos dados nas divisões dos dados de preparação, validação e testes. Existe frequentemente uma diferença entre a distribuição de dados que um modelo vê quando é implementado na produção e a distribuição de dados do conjunto de dados com o qual um modelo é preparado. Por exemplo, na produção, um modelo pode ser aplicado a uma população de utilizadores totalmente diferente da observada durante a preparação, ou o modelo pode ser usado para fazer inferências 30 dias após o registo dos dados de preparação finais.
Para ter os melhores resultados, certifique-se de que a distribuição das divisões de dados usadas para criar o modelo reflete com precisão a diferença entre os dados de preparação e os dados sobre os quais faz inferências no seu ambiente de produção. O Vertex AI pode produzir inferências não monótonas e, se os dados de produção forem amostrados a partir de uma distribuição muito diferente dos dados de preparação, as inferências não monótonas não são muito fiáveis.
Além disso, a diferença entre os dados de produção e os dados de preparação tem de se refletir na diferença entre a divisão de dados de validação e a divisão de dados de preparação, e entre a divisão de dados de teste e a divisão de dados de validação.
Por exemplo, se planear fazer inferências sobre o valor do cliente (LTV) nos próximos 30 dias, certifique-se de que os dados na divisão de dados de validação são de 30 dias após os dados na divisão de dados de preparação e que os dados na divisão de dados de teste são de 30 dias após a divisão de dados de validação.
Da mesma forma, se quiser que o modelo seja ajustado para fazer inferências generalizadas sobre novos utilizadores, certifique-se de que os dados de um utilizador específico estão contidos apenas numa divisão dos dados de preparação. Por exemplo, todas as linhas relativas a user1
estão na divisão de dados de preparação, todas as linhas relativas a user2
estão na divisão de dados de validação e todas as linhas relativas a user3
estão na divisão de dados de teste.
Forneça um sinal de tempo
Para modelos de classificação e regressão, se o padrão subjacente nos seus dados tender a mudar ao longo do tempo (não está distribuído aleatoriamente no tempo), faculte essas informações ao Vertex AI. Pode fornecer um sinal de tempo de várias formas:
Se cada linha de dados tiver uma data/hora, certifique-se de que essa coluna está incluída, tem um tipo de transformação de
Timestamp
e está definida como a coluna Hora quando treina o modelo. Esta ordem é usada para dividir os dados, com os dados mais recentes como dados de teste e os dados mais antigos como dados de preparação. Saiba mais.Se a coluna de tempo não tiver muitos valores distintos, use uma divisão manual em vez de usar a coluna de tempo para dividir os dados. Caso contrário, pode não ter linhas suficientes em cada conjunto de dados, o que pode fazer com que a preparação falhe.
Se as informações de tempo não estiverem contidas numa única coluna, pode usar uma divisão manual de dados para usar os dados mais recentes como os dados de teste e os dados mais antigos como os dados de treino.
Tornar as informações explícitas quando necessário
Para alguns primitivos de dados, pode melhorar a qualidade do modelo através da engenharia de funcionalidades.
Por exemplo, se os seus dados incluírem longitude e latitude, estas colunas são tratadas como numéricas, sem cálculos especiais. Se a localização ou a distância fornecer um sinal para o seu problema, crie uma funcionalidade que forneça essas informações explicitamente.
Alguns tipos de dados que podem exigir engenharia de funcionalidades:
- Longitude/latitude
- URLs
- Endereços IP
- Moradas de email
- Números de telefone
- Outros códigos geográficos (por exemplo, códigos postais)
Inclua dados calculados ou agregados numa linha
O Vertex AI usa apenas os dados de entrada numa única linha para prever o valor de destino dessa linha. Se tiver calculado ou agregado dados de outras linhas ou origens que seriam valiosos para determinar o valor previsto de uma linha, inclua esses dados na linha de origem. Tenha cuidado para que a nova coluna não cause fuga de dados nem desvio entre a preparação e a publicação.
Por exemplo, se quiser prever a procura de um produto na próxima semana, melhore a qualidade da inferência incluindo colunas com os seguintes valores:
- O número total de artigos em stock da mesma categoria que o produto.
- O preço médio dos artigos em stock da mesma categoria que o produto.
- O número de dias antes de um feriado conhecido quando a inferência é pedida.
Noutro exemplo, se quiser prever se um utilizador específico vai comprar um produto, melhore a qualidade da inferência incluindo colunas com os seguintes valores:
- A taxa de conversão histórica média ou a taxa de cliques do utilizador específico.
- Quantos produtos estão atualmente no carrinho de compras do utilizador.
Evite parcialidade
Certifique-se de que os seus dados de preparação são representativos de todo o universo de dados potenciais para os quais faz inferências. Por exemplo, se tiver clientes em todo o mundo, não use dados de formação apenas de um país.
Práticas recomendadas para modelos AutoML tabulares
As seguintes práticas recomendadas destinam-se à criação de dados de preparação tabulares para modelos tabulares do AutoML.
Represente valores nulos de forma adequada
Se importar a partir de um CSV, use strings vazias para representar valores nulos. A partir do BigQuery, use o valor NULL.
Se os seus dados usarem carateres especiais ou números para representar valores nulos, incluindo zero, estes valores são interpretados incorretamente, o que reduz a qualidade do modelo.
Evite valores em falta sempre que possível
Verifique se existem valores em falta nos seus dados e corrija-os, se possível. Caso contrário, pode deixar o valor em branco, e este é tratado como um valor nulo.
Use espaços para separar texto
A Vertex AI tokeniza strings de texto e pode obter um sinal de preparação a partir de palavras individuais. Usa espaços para separar palavras; as palavras separadas por outros carateres são tratadas como uma única entidade.
Por exemplo, se fornecer o texto "vermelho/verde/azul", este não é dividido em tokens em "vermelho", "verde" e "azul". Se essas palavras individuais puderem ser importantes para preparar o modelo, transforme o texto em "red green blue" antes de o incluir nos dados de preparação.
Certifique-se de que as suas caraterísticas categóricas são precisas e estão limpas
As inconsistências nos dados podem fazer com que as categorias sejam divididas incorretamente. Por exemplo, se os seus dados incluírem "Castanho" e "castanho", o Vertex AI usa esses valores como categorias separadas, quando pode ter pretendido que fossem iguais. Os erros ortográficos podem ter um efeito semelhante. Certifique-se de que remove este tipo de inconsistências dos dados categóricos antes de criar os dados de preparação.
Tenha especial cuidado com as classes desequilibradas para modelos de classificação
Se tiver classes desequilibradas (um problema de classificação com um ou mais resultados que ocorrem raramente), reveja as seguintes sugestões.
Forneça dados de preparação suficientes para a classe minoritária
Ter poucas linhas de dados para uma classe degrada a qualidade do modelo. Se possível, forneça, pelo menos, 100 linhas de dados para cada classe.
Considere usar uma divisão manual
O Vertex AI seleciona aleatoriamente as linhas para o conjunto de dados de teste (mas de forma determinística). Para classes desequilibradas, pode acabar com um pequeno número da classe minoritária no conjunto de dados de teste ou mesmo nenhum, o que faz com que a preparação falhe.
Se tiver classes desequilibradas, pode querer atribuir uma divisão manual para garantir que são incluídas linhas suficientes com os resultados minoritários em cada divisão.
Forneça dados de preparação suficientes
Se não fornecer dados de preparação suficientes, o modelo resultante pode ter um desempenho fraco. Quanto mais colunas usar para preparar o modelo, mais dados tem de fornecer.
O seu conjunto de dados tem de incluir sempre, pelo menos, 1000 linhas.
A tabela seguinte fornece algumas heurísticas sobre a quantidade de dados de preparação a fornecer, consoante o seu objetivo.
Objetivo | Quantidade mínima sugerida de dados de preparação |
---|---|
Classificação | Pelo menos 10 vezes mais linhas do que colunas. |
Previsão | Pelo menos 10 séries cronológicas para cada coluna usada para preparar o modelo. |
Regressão | Pelo menos 50 vezes mais linhas do que o número de colunas. |
Deixe todo o outro pré-processamento e transformações para o Vertex AI
Salvo indicação em contrário, deixe que o Vertex AI faça a engenharia de funcionalidades por si quando preparar um modelo do AutoML. O AutoML funciona melhor quando tem acesso aos seus dados subjacentes. Para ver uma lista de todas as transformações que o AutoML realiza por tipo de transformação, consulte as transformações da Vertex AI.
Práticas recomendadas para modelos de previsão tabulares
Os dados de preparação para modelos de previsão têm algumas considerações especiais.
Considerações para escolher o nível de detalhe dos dados
Quando prepara um modelo de previsão, especifica a granularidade dos dados ou o intervalo de tempo entre as linhas de dados de preparação. Pode ser por hora, diário, semanal, mensal ou anual. Além disso, pode ser a cada 1, 5, 10, 15 ou 30 minutos.
O nível de detalhe dos dados tem de ser consistente em todos os dados de preparação e em todos os dados de inferência em lote. Se especificar uma granularidade diária e existirem 2 dias entre duas linhas de dados de preparação, o Vertex AI trata o dia intermédio como dados em falta, o que pode degradar o desempenho do modelo. Várias linhas na mesma série cronológica com a mesma data/hora (conforme determinado pela granularidade) são consideradas um erro de validação no momento da preparação.
Geralmente, as suas práticas de recolha de dados determinam a granularidade dos dados.
Como encontrar um bom valor para a capacidade de resposta
Se espera ter muitos dados de inferência que não se estendem ao passado (inícios a frio), comece por definir 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 deve funcionar bem.
Pode experimentar os seguintes passos para encontrar um bom valor para os seus dados:
Para a primeira iteração de preparação, defina o período de contexto e o horizonte de previsão para o mesmo valor e defina o orçamento de preparação para, pelo menos, 6 horas.
Volte a preparar o modelo com o mesmo orçamento de preparação, mas duplique o tamanho da janela de contexto para 2 vezes o tamanho do horizonte de previsão.
Se as métricas de avaliação do segundo modelo mostrarem uma melhoria substancial, volte a preparar o modelo, aumentando a janela de contexto para 5 vezes o tamanho do horizonte de previsão. Pondere fazer um aumento proporcional ao orçamento de treino (se treinou durante 10 horas no primeiro passo, aumente o orçamento de treino para 50 horas).
Continue a aumentar a janela de contexto até deixar de ver métricas de avaliação melhoradas ou até ficar satisfeito com os resultados. Reverter para o valor mais baixo da janela de contexto que produziu resultados aceitáveis.
O aumento da capacidade de resposta tem os seguintes efeitos:
Aumenta o tempo de formação
Com uma capacidade de resposta maior, o modelo usa mais pontos de dados na preparação, o que faz com que o tempo de preparação aumente.
Aumenta a quantidade de histórico necessária para os dados de inferência
Os dados de inferência devem fornecer tantos pontos de dados do histórico quanto o valor da janela de contexto.
Práticas recomendadas para o formato de dados
Pode criar os dados de preparação no formato largo ou estreito. Para modelos de regressão e classificação, o formato largo é amplamente usado e pode ser mais fácil de montar e rever. Para os modelos de previsão, a utilização do formato estreito pode ajudar a evitar a configuração de ligações não intencionais entre os seus dados e o seu destino (roubo de dados).
Quando cria dados de preparação para preparar um modelo de previsão, cada linha deve representar uma única observação numa única série cronológica. Tem de ter uma coluna que represente o identificador da série cronológica (como as séries cronológicas se distinguem entre si) e uma coluna que represente o valor que vai prever (o seu objetivo). Em seguida, todos os outros valores na linha que são usados para preparar o modelo têm de estar presentes no momento em que pede uma inferência para o seu objetivo.
Considere os seguintes dados de preparação de exemplo (simplificados e abreviados):
Data | Widget_1_Demand | Widget_2_Demand | Widget_3_Demand | Promoção | 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 |
Esta tabela, no formato largo, mostra os dados da empresa por data, mas não seria usável para um modelo de previsão na sua forma atual. Não existe uma única coluna de destino, nem uma coluna de ID de série cronológica e, para qualquer data específica, não sabe a procura dos outros widgets no momento da inferência.
Pode converter esta tabela neste formato:
Data | Produto | Region_CA_Demand | Region_IL_Demand | Promoção |
---|---|---|---|---|
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 potencial coluna de ID de série cronológica, Product. No entanto, este formato só pode ser usado para prever uma das regiões, e os dados da outra região têm de ser conhecidos no momento da inferência.
A solução é converter para o formato estreito, para que cada linha represente uma única observação. Todos os dados independentes da série cronológica são repetidos para cada linha:
Data | Procura | ID | Promoção |
---|---|---|---|
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 cronológica (ID), uma coluna de destino (Procura) e uma coluna de tempo (Data). Além disso, cada linha baseia-se numa única observação, que pode ser usada para prever o valor-alvo. A coluna Promo é usada como uma funcionalidade para preparar o modelo.
Na realidade, terá muito mais linhas e colunas do que nestes exemplos. No entanto, tem de seguir as diretrizes aqui apresentadas para estruturar os seus dados de forma a evitar a fuga de dados.
O que se segue?
- Os meus dados são bons? Uma lista de verificação pré-ML
- Preparar e organizar os seus dados para a aprendizagem automática