Conjuntos de treinamento e teste: como dividir dados

O módulo anterior apresentou a ideia de dividir seu conjunto de dados em dois subconjuntos:

  • conjunto de treinamento: um subconjunto para treinar um modelo.
  • conjunto de teste: um subconjunto para testar o modelo treinado.

Imagine dividir o único conjunto de dados da seguinte forma:

Uma barra horizontal dividida em duas partes: 80% do conjunto de treinamento e 20% do conjunto de teste.

Figura 1. Dividir um único conjunto de dados em um conjunto de treinamento e outro de teste.

Verifique se o conjunto de testes atende às duas condições a seguir:

  • É grande o suficiente para gerar resultados estatisticamente significativos.
  • É representativa do conjunto de dados como um todo. Em outras palavras, não escolha um conjunto de teste com características diferentes do conjunto de treinamento.

Supondo que seu conjunto de teste atenda às duas condições anteriores, seu objetivo é criar um modelo que tenha uma boa generalização para novos dados. Nosso conjunto de teste serve como um proxy para novos dados. Por exemplo, considere a figura a seguir. Observe que o modelo aprendido para os dados de treinamento é muito simples. Esse modelo não faz um trabalho perfeito. Algumas previsões estão erradas. No entanto, esse modelo funciona tão bem nos dados de teste quanto nos dados de treinamento. Em outras palavras, esse modelo simples não sobrecarrega os dados de treinamento.

Dois modelos: um executado em dados de treinamento e outro em dados de teste.  O modelo é muito simples, apenas uma linha dividindo os pontos laranja dos pontos azuis.  A perda nos dados de treinamento é semelhante à perda nos dados de teste.

Figura 2. Validar o modelo treinado com os dados de teste.

Nunca treine com dados de teste. Se você está vendo resultados surpreendentemente bons nas métricas de avaliação, pode ser um sinal de que você está treinando sem querer no conjunto de teste. Por exemplo, alta acurácia pode indicar que dados de teste vazaram para o conjunto de treinamento.

Por exemplo, considere um modelo que prevê se um e-mail é spam usando a linha de assunto, o corpo do e-mail e o endereço de e-mail do remetente como recursos. Dividimos os dados em conjuntos de treinamento e teste, com uma divisão de 80 a 20. Após o treinamento, o modelo atinge uma precisão de 99% no conjunto de treinamento e no conjunto de teste. Esperaríamos uma precisão mais baixa no conjunto de teste. Portanto, analisamos os dados novamente e descobrimos que muitos dos exemplos no conjunto de teste são cópias de exemplos do conjunto de treinamento. Não conseguimos remover as entradas duplicadas do mesmo e-mail de spam do banco de dados de entrada antes de dividir os dados. Treinamos acidentalmente alguns dos nossos dados de teste e, por isso, não estamos mais medindo com precisão a eficiência do nosso modelo em generalizar dados novos.