Conjuntos de dados: como dividir o conjunto de dados original

Todos os bons projetos de engenharia de software dedicam energia considerável ao teste dos apps. Da mesma forma, recomendamos testar seu modelo de ML para determinar a precisão das previsões.

Conjuntos de treinamento, validação e teste

Teste um modelo com um conjunto de exemplos diferente do que foi usado para treinar o modelo. Como você vai aprender um pouco mais tarde, o teste em exemplos diferentes é uma prova mais forte da adequação do modelo do que o teste no mesmo conjunto de exemplos. Onde você encontra esses exemplos diferentes? Tradicionalmente, no aprendizado de máquina, você recebe esses exemplos diferentes dividindo o conjunto de dados original. Portanto, você pode supor que precisa dividir o conjunto de dados original em dois subconjuntos:

Figura 8. Uma barra horizontal dividida em duas partes: cerca de 80% é o conjunto de treinamento e cerca de 20% é o conjunto de teste.
Figura 8. Não é uma divisão ideal.

 

Exercício: verificar sua intuição

Suponha que você treine no conjunto de treinamento e avalie no conjunto de teste em várias rodadas. Em cada rodada, você usa os resultados do conjunto de testes para orientar como atualizar os hiperparâmetros e o conjunto de recursos. Você identificou algum problema com essa abordagem? Escolha apenas uma resposta.
Fazer muitas rodadas desse procedimento pode fazer com que o modelo se ajuste implicitamente às peculiaridades do conjunto de testes.
Sim. Quanto mais vezes você usar o mesmo conjunto de testes, maior será a probabilidade de o modelo se ajustar ao conjunto de testes. Assim como um professor "ensinando para o teste", o modelo se encaixa inadvertidamente no conjunto de teste, o que pode dificultar a adaptação dos dados reais.
Essa abordagem está correta. Afinal, você está treinando no conjunto de treinamento e avaliando em um conjunto de teste separado.
Na verdade, há um problema sutil aqui. Pense no que pode dar errado aos poucos.
Essa abordagem é computacionalmente ineficiente. Não mude os hiperparâmetros ou conjuntos de recursos após cada rodada de testes.
Testes frequentes são caros, mas essenciais. No entanto, os testes frequentes são muito menos caros do que o treinamento adicional. A otimização de hiperparâmetros e o conjunto de recursos pode melhorar significativamente a qualidade do modelo. Portanto, sempre reserve tempo e recursos computacionais para trabalhar neles.

Dividir o conjunto de dados em dois conjuntos é uma boa ideia, mas uma abordagem melhor é dividir o conjunto de dados em três subconjuntos. Além do conjunto de treinamento e do conjunto de teste, o terceiro subconjunto é:

Figura 9. Uma barra horizontal dividida em três partes: 70% do conjunto de treinamento, 15% do conjunto de validação e 15% do conjunto de teste.
Figura 9. Uma divisão muito melhor.

Use o conjunto de validação para avaliar os resultados do conjunto de treinamento. Depois que o uso repetido do conjunto de validação sugerir que o modelo está fazendo boas previsões, use o conjunto de teste para verificar novamente o modelo.

A figura a seguir sugere esse fluxo de trabalho. Na figura, "Tweak model" significa ajustar qualquer coisa sobre o modelo, desde a taxa de aprendizado, a adição ou remoção de recursos até a criação de um modelo completamente novo do zero. Ao final desse fluxo de trabalho, você escolhe o modelo que tem o melhor desempenho no conjunto de teste.

Figura 10. Um diagrama de fluxo de trabalho com as seguintes etapas:
            1. Treine o modelo no conjunto de treinamento.
            2. Avalie o modelo no conjunto de validação.
            3. Ajustar o modelo de acordo com os resultados do conjunto de validação.
            4. Itere em 1, 2 e 3, escolhendo o modelo que se sai melhor no conjunto de validação.
            5. Confirme os resultados no conjunto de testes.
Figura 10. Um bom fluxo de trabalho para desenvolvimento e testes.

O fluxo de trabalho mostrado na Figura 10 é ideal, mas, mesmo com ele, os conjuntos de teste e de validação ainda "se desgastam" com o uso repetido. Ou seja, quanto mais você usar os mesmos dados para tomar decisões sobre as configurações de hiperparâmetros ou outras melhorias do modelo, menor será a confiança de que o modelo vai fazer boas previsões com novos dados. Por isso, é recomendável coletar mais dados para "atualizar" o conjunto de teste e o conjunto de validação. Começar de novo é uma ótima redefinição.

Exercício: verificar sua intuição

Você misturou todos os exemplos no conjunto de dados e dividiu os exemplos em conjuntos de treinamento, validação e teste. No entanto, o valor de perda no conjunto de testes é tão baixo que você suspeita de um erro. O que pode ter dado errado?
Muitos dos exemplos no conjunto de teste são duplicatas de exemplos no conjunto de treinamento.
Sim. Isso pode ser um problema em um conjunto de dados com muitos exemplos redundantes. É altamente recomendável excluir exemplos duplicados do conjunto de testes antes do teste.
O treinamento e o teste não são determinísticos. Às vezes, por acaso, a perda do teste é muito baixa. Execute o teste novamente para confirmar o resultado.
Embora a perda varie um pouco em cada execução, ela não deve variar tanto que você pense que ganhou a loteria de machine learning.
Por acaso, o conjunto de teste continha exemplos em que o modelo teve um bom desempenho.
Os exemplos foram bem misturados, então isso é extremamente improvável.

Outros problemas com séries de testes

Como a pergunta anterior ilustra, exemplos duplicados podem afetar a avaliação do modelo. Depois de dividir um conjunto de dados em conjuntos de treinamento, validação e teste, exclua todos os exemplos no conjunto de validação ou de teste que sejam duplicatas de exemplos no conjunto de treinamento. O único teste justo de um modelo é contra novos exemplos, não cópias.

Por exemplo, considere um modelo que prevê se um e-mail é spam usando o assunto, o corpo do e-mail e o endereço de e-mail do remetente como recursos. Suponha que você divida os dados em conjuntos de treinamento e teste, com uma divisão de 80-20. Após o treinamento, o modelo alcança 99% de precisão no conjunto de treinamento e no conjunto de teste. Você provavelmente espera uma precisão menor no conjunto de teste. Por isso, você analisa os dados novamente e descobre que muitos dos exemplos no conjunto de teste são duplicações de exemplos no conjunto de treinamento. O problema é que você não limpou as entradas duplicadas do mesmo e-mail de spam do seu banco de dados de entrada antes de dividir os dados. Você treinou acidentalmente com alguns dos seus dados de teste.

Em resumo, um bom conjunto de teste ou de validação atende a todos os seguintes critérios:

  • Grande o suficiente para gerar resultados de teste estatisticamente significativos.
  • Representa o conjunto de dados como um todo. Em outras palavras, não escolha um conjunto de teste com características diferentes do conjunto de treinamento.
  • Representam os dados reais que o modelo vai encontrar como parte do objetivo de negócios.
  • Zero exemplos duplicados no conjunto de treinamento.

Exercícios: teste seu conhecimento

Considerando um único conjunto de dados com um número fixo de exemplos, qual das afirmações a seguir é verdadeira?
Cada exemplo usado no teste do modelo é um exemplo a menos usado no treinamento do modelo.
A divisão de exemplos em conjuntos de treinamento/teste/validação é um jogo de soma zero. Essa é a compensação central.
O número de exemplos no conjunto de teste precisa ser maior que o número de exemplos no conjunto de validação.
Em teoria, o conjunto de validação e o teste precisam conter o mesmo número de exemplos ou quase isso.
O número de exemplos no conjunto de teste precisa ser maior que o número de exemplos no conjunto de validação ou de treinamento.
O número de exemplos no conjunto de treinamento geralmente é maior do que o número de exemplos no conjunto de validação ou de teste. No entanto, não há requisitos de porcentagem para os diferentes conjuntos.
Suponha que seu conjunto de teste tenha exemplos suficientes para realizar um teste estatisticamente significativo. Além disso, o teste em relação ao conjunto de teste gera uma perda baixa. No entanto, o modelo teve um desempenho ruim no mundo real. O que você deve fazer?
Determine como o conjunto de dados original é diferente dos dados reais.
Sim. Mesmo os melhores conjuntos de dados são apenas um resumo dos dados reais. A verdade tende a mudar com o tempo. Embora o conjunto de teste tenha correspondido bem ao conjunto de treinamento para sugerir uma boa qualidade do modelo, ele provavelmente não corresponde aos dados reais. Talvez seja necessário treinar e testar novamente com um novo conjunto de dados.
Faça o teste novamente no mesmo conjunto de testes. Os resultados do teste podem ter sido uma anomalia.
Embora o novo teste possa gerar resultados ligeiramente diferentes, essa tática provavelmente não é muito útil.
Quantos exemplos o conjunto de testes deve conter?
Exemplos suficientes para gerar um teste estatisticamente significativo.
Sim. Quantos exemplos são? Você vai precisar testar.
Pelo menos 15% do conjunto de dados original.
15% pode ou não ser um número suficiente de exemplos.