Randomização

Considerações práticas

Tornar o pipeline de geração de dados reproduzível. Digamos que você queira adicionar um recurso para ver como ele afeta a qualidade do modelo. Para um experimento justo, os conjuntos de dados precisam ser idênticos, exceto o novo recurso. Se as execuções de geração de dados não forem reproduzíveis, não será possível criar esses conjuntos de dados.

Sendo assim, certifique-se de que qualquer ordem aleatória na geração de dados possa ser determinística:

  • Provoque seus geradores de números aleatórios (RNGs). A propagação garante que o RNG gerará os mesmos valores na mesma ordem a cada vez que você o executar, recriando o conjunto de dados.
  • Use chaves de hash invariantes. Hash é uma forma comum de dividir ou coletar dados. É possível gerar hash de cada exemplo e usar o número inteiro resultante para decidir em qual divisão colocar o exemplo. As entradas da função de hash não devem mudar cada vez que você executar o programa de geração de dados. Não use o horário atual ou um número aleatório no hash, por exemplo, se você quiser recriar os hashes sob demanda.

As abordagens anteriores se aplicam à amostragem e à divisão dos dados.

Considerações para a geração de hash

Imagine novamente que você estava coletando consultas de pesquisa e usando hash para incluir ou excluir consultas. Se a chave de hash tiver usado apenas a consulta, em vários dias de dados, sempre inclua essa consulta ou sempre a exclua. Sempre incluir ou sempre excluir uma consulta é ruim porque:

  • Seu conjunto de treinamento vai ver um conjunto menos diversificado de consultas.
  • Seus conjuntos de avaliações serão artificialmente difíceis porque não se sobrepõem aos seus dados de treinamento. Na realidade, no momento da disponibilização, você verá uma parte do tráfego em tempo real nos seus dados de treinamento, portanto, sua avaliação deve refletir isso.

Em vez disso, é possível gerar hash na consulta + data, o que resultaria em um hash diferente todos os dias.

 

A visualização animada mostra como o hash na consulta faz com que os dados sejam colocados no mesmo bucket todos os dias. Já o hash na consulta e o tempo da consulta fazem com que os dados fiquem diferentes em buckets diferentes a cada dia. Os três 
buckets são: Treinamento,
Avaliação e Ignorado.