Qual é a melhor validação cruzada para o seu projeto de ML?

Vitor Ferreira Lins
Data Hackers
Published in
6 min readFeb 20, 2024

Quando queremos avaliar o desempenho de um modelo, precisamos de um conjunto de dados para realizar o treinamento e outro com observações diferentes para realizar o teste.

A validação cruzada é um processo iterativo, onde esta separação de treino-teste é realizada diversas vezes, mas com algum nível de variabilidade para as observações usadas em cada recorte.

1 Por que?

Já temos uma pequena definição do que é validação cruzada, mas por que isto seria melhor que um treino-teste simples? Temos alguns bons motivos:

1.1 Prevenção de over-fit

Ás vezes podemos acabar fazendo que o nosso modelo se ajuste “muito bem” aos dados de treino, o que gera scores de desempenho altíssimos, mas que prejudicam grandemente sua capacidade de generalizar, e com isso, prejudica sua utilidade como produto.

A validação cruzada permite que tenhamos muitos cenários diferentes de treino e teste do modelo, e com isto deve nos mostrar melhor a capacidade que nosso modelo tem de aprender e generalizar.

1.2 Variabilidade

Quando fazemos o split comum, temos apenas um conjunto de treino e um cenário de teste em que o modelo é posto à prova. A validação cruzada, independentemente do método adotado, vai separar diversos grupos diferentes para treino, e a mesma quantidade de cenários de teste, também diferentes.

Conhecendo o desempenho do modelo em diversos cenários, temos mais segurança do quanto pode variar o desempenho do modelo, dependendo de qual conjunto de dados está sendo utilizado para o treino.

1.3 Tamanho da amostra de teste

Outro fator importante à favor da validação cruzada está na quantidade de dados de validação que teremos disponíveis ao fim da validação. Como sabemos, quando se trata de dados, quanto mais qualidade e quantidade, melhor.

Teremos muito mais segurança estatística depois de ter testado o modelo em diversos cenários possíveis de validação.

2 Quais são os principais métodos?

Existem diversos métodos de validação cruzada, e uns são mais populares que outros, a seguir vou apresentar os mais populares, e também explicar o motivo:

2.1 K-fold

Quando se pergunta sobre validação cruzada, este quase sempre é o primeiro a ser mencionado. Consiste em separar o conjunto de dados em k partes com a mesma quantidade de observações, definida arbitrariamente antes de começar a validação.

k-fold usando: 10 splits

Em cada iteração do k-fold uma destas partes será separada para o teste, enquanto que as demais serão usadas para o treino do modelo. O valor de k pode ser arbitrário, mas normalmente é escolhido o valor 8 ou 10, que garantem uma quantidade relevante de observações de treino para o modelo.

Uma vantagem muito mencionada sobre este método de validação é o fato dele garantir que todos os dados serão usados pelo menos uma vez na etapa de teste. De modo geral será sempre preferível à uma simples divisão treino-teste comum.

A maioria dos próximos exemplos ainda são versões do método k-fold, mas com algumas variações que se ajustam para diferentes necessidades de validação:

2.2 Leave-one-out

O valor de k é igual à quantidade de observações, isto quer dizer que a cada iteração, apenas uma observação será reservada para o teste (daí o nome leave-one-out), e todas as demais serão usadas para o treinamento do modelo.

Este método maximiza a quantidade de treinos e a quantidade de dados usados em cada treino. Pode ser útil quando existem poucos dados disponíveis para treinar o modelo. Você pode escolher uma quantidade arbitrária p para a quantidade de observações reservadas ao teste do modelo, neste caso será chamado de “Leave-p-out”.

2.3 Stratified k-fold

Muito usado em problemas de classificação, algumas vezes queremos garantir que nossa variável target esteja presente tanto no treino quanto no teste. Com esta variação do k-fold podemos ter certeza de que o nosso modelo vai ter a oportunidade de treinar e testar proporcionalmente em todas as instâncias do target.

Stratified k-fold usando: 10 splits

Existe uma confusão entre os iniciantes (eu incluso) de que o stratified k-fold vai “resolver” o problema desbalanceamento da classe de interesse. Na verdade este método vai garantir que as proporções se mantenham durante a divisão de treino-teste, se a classe de interesse estiver desbalanceada, esta validação vai garantir que continue desbalanceada na mesma proporção ao longo de todas as iterações.

Para garantir que uma classe estará balanceada durante todas as etapas da validação, será necessário aplicar algum método de balanceamento antes de iniciar a validação cruzada. Só então o stratified k-fold poderá garantir que seu esforço para balancear a classe de interesse não foi em vão.

2.4 Sliding (ou rolling) Window

Este é mais usado para casos de forecast, em que precisamos que nosso modelo seja capaz de prever as observações no futuro usando dados do passado. Consiste simplesmente em aumentar a quantidade de dados de treino iterativamente, usando sempre os mais antigos. Enquanto isso, a “janela” de dados de teste “desliza” para o futuro.

Sliding Window usando: 10 splits

2.5 Walk Forward

Algumas vezes o nosso modelo de previsão precisa “esquecer” os padrões que foram detectados no passado para se ajustar melhor aos padrões mais recentes da série temporal. Existem duas maneiras de lidar com isso: uma é implementar um algoritmo que naturalmente dará menos importância às observações mais antigas, e a outra é retirar as observações mais antigas do grupo de treino e deixar de usá-las.

Para este último caso existe o Walk Forward cross validation, esta é uma versão do Sliding Window que vai também retirar observações muito antigas, preservando um “limite máximo” para o tamanho do grupo de treino.

Walk Forward usando: 10 splits, tamanho máximo 30% dos dados

2.6 Monte Carlo Cross Validation (MCCV)

Parece maluco de se pensar que todos os métodos que mostramos acima são apenas variações do primeiro (k-fold simples). De fato o k-fold é um método conceitualmente muito simples, e que pode ser adaptado para muitas situações, por isso acaba sendo muito usado.

Neste tópico vamos falar de um método de validação que não é uma variação do k-fold, mas é tão simples de entender quanto ele, este é o método de Monte Carlo:

MCCV usando: 10 iterações, 10% dos dados para o teste

Neste caso, você controla a quantidade de iterações e o tamanho da amostra de teste em cada iteração. Este algoritmo seleciona aleatoriamente as observações que serão usadas para o teste do modelo, e reserva todas as demais para o treino.

É discutido que este método vai ter menos poder que o k-fold e suas variações para combater o over-fitting do seu modelo, e também pode fazer com que algumas observações não sejam nunca usadas para o teste, enquanto outras sejam usadas mais de uma vez. Mas compensa na variabilidade e tamanho da amostra de validação (dois pontos apontados no tópico “1. Por quê?”), já que você vai ter muita liberdade para aumentar a quantidade de iterações o quanto quiser.

Outras coisas para ter em mente sobre este método:

  1. Também é possível implementar uma versão estratificada deste método de validação, garantindo que a classe de interesse esteja presente tanto no treino quanto no teste, preservando sua proporção;
  2. Executar esta validação duas vezes pode retornar resultados ligeiramente diferentes, por causa da sua aleatoriedade;
  3. Já que este método de validação não é tão eficiente em penalizar o viés do modelo, ele será mais útil quando seu processo de modelagem já inclui algum controle de viés. Se estiver na dúvida, prefira o k-fold ou alguma de suas variações.

3. Concluindo

Agora você já sabe:

  1. O que é validação cruzada;
  2. Porque ela é preferível à uma validação de treino-teste convencional;
  3. Quais são os principais tipos de validação cruzada, como funcionam, e em que situação cada tipo é mais adequado.

Espero ter contribuído em algo com o seu projeto, seja você um estudante que está procurando técnicas pertinentes para aprimorar o seu processo de modelagem, ou um experiente na área procurando relembrar quais são os principais métodos de validação cruzada e os conceitos relacionados a cada um. Até a próxima! 👋

--

--

Vitor Ferreira Lins
Data Hackers

Data Scientist in Brazil, Bachelor's Degree in Economic Sciences. I like to talk about Data Science, Economics, and sometimes, also poetry.