3
respostas

[Dúvida] x_val vs x_teste

Olá João, blz?

João, na atividade do desafio da aula 1, eu construi duas matrizes de confusão com Random Forest usando os valores de x_val e x_teste para criar os valores de predict. Ao plotar as duas matrizes, a que utiliza os valores x_teste teve um desempenho muito superior ao que utiliza x_val. Pq essa diferença? Pq usar o x_val ao invés do x_teste? Segue a figura com as duas matrizes: ![](Insira aqui a descrição dessa imagem para ajudar na acessibilidade )

Encontrei o mesmo padrão de melhora com o modelo DecisionTree, porém este apresentou resultado inferior ao Random Forest e por isso não ganhou imagem!

3 respostas

E aí!

Então, a diferença entre usar x_val e x_teste tá relacionada com o propósito de cada um. O x_val, ou conjunto de validação, é usado durante o treinamento pra ajustar os hiperparâmetros do teu modelo, tipo tuning, saca? Já o x_teste, é usado depois do treino pra avaliar o desempenho final, como se fosse um "exame" pro modelo.

Se a tua matriz usando x_teste tá arrasando, pode ser que o modelo ficou afiado demais pra esses dados específicos, tipo "decorou" ao invés de generalizar. Já o x_val serve pra dar uma ideia mais geral de como o modelo tá se saindo durante o treino, mas não deve ser usado pra avaliação final.

Enfim, cada um tem seu papel. Se o x_teste tá detonando, ótimo! Mas é sempre bom cuidar pra não overfitar demais. Se liga na consistência do teu modelo nos dados novos.

Sim, sim... eu entendi a diferença entre um e outro. Mas no exercício era pedido para usar o conjunto de validação para construir a matriz de confusão. Foi mais essa questão do que o modelo de validação ao invés de usar o de teste. Eu não deixei isso claro na minha pergunta.

E quanto ao overfitting, não seria o contrário, onde o modelo de treino "decora" os valores ao invés de aprender o padrão dos dados e quando utilizamos o modelo de teste desempenho decaí? Pode ocorrer overfitting no modelo de teste? Mas não seria o ideal mandar super bem? Nesses dados aí de cima, quando olhamos o valor de acurácia, o score do modelo é sempre mais baixo que o da validação, mas no hora de visualizarmos o desempenho dele através da matriz de confusão, ele teve esse desempenho muito bom!

Obrigado pelo feedback!

Isso acaba dependendo do acaso. A train_test_split separa seu conjunto de dados de maneira aleatória, então no seu caso o seu conjunto de testes teve a "sorte" de ter valores que passaram bem na predição do modelo (vale também levar em conta que o conjunto de testes tem somente 20 amostras). Se você remover o random_state = 5 do seu train_test_split e rodar seu código novamente, tem uma chance de a situação se inverter e seu conjunto de validação ir melhor do que o de teste, ou de ambos irem mal (que é o que mais acontece). Se você rodar o código sucessivas vezes vai perceber melhor essa questão da aleatoriedade dos dados na separação.

Pelo que eu entendi das aulas até aqui, a gente usa x_val ao invés de x_teste (neste momento) porque estamos na etapa de análise de diferentes modelos, procurando encontrar o modelo mais genérico que vá bem no conjunto de treinamento+validação. Se a gente ficar olhando para x_teste neste momento, podemos ter a tendência de ficar melhorando os modelos de modo a atender bem tanto x_val quanto x_teste, o que pode inserir um viés no modelo.