Desenvolvendo um Modelo - Introdução

Introdução

O processo de criação de um modelo pode ser resumido em 6 passos:
  1. Repartição dos dados em 3 conjuntos: treino/teste/validação
  2. Escolha do modelo
  3. Otimização hiperparâmetros do modelo (usa os dados de treino e validação)
  4. Treino do modelo usando a união dos conjuntos treino e validação
  5. Avaliação do modelo nos dados de teste
  6. Treino do modelo usando a união dos conjuntos treino, validação e teste
Veja bem que, para obter o modelo final, nós normalmente usamos todos os dados em disposição !
Quando nosso objetivo é comparar a performance de vários modelos em um mesmo problema, nós fixamos os dados da etapa  e fazemos as etapas 2-5 para cada um dos modelos usados na comparação (isso se chama fazer um Benchmark).

Vamos explicar um pouco melhor o interesse dessa repartição, aplicando nesse passo-a-passo.

Repartição treino/teste/validação

Dados de treino

Esses são os dados que são de fato utilizados no treino do modelo, falamos que o modelo "vê diretamente" esses dados durante a sua etapa de otimização. (usamos ele nas etapas 3 e 4)

Dados de validação

Normalmente quando treinamos um modelo ele possui os chamados hiperparâmetros. São parâmetros do modelo que são escolhidos à priori e não são (ou não podem) ser otimizados durante o treino. É aqui que entra o interesse dos dados de validação: Eles são usados na otimização dos hiperparâmetros (etapa 3) ! Normalmente se define uma grade de hiperparâmetros que serão testados (criamos váarios modelos), testamos a performance desses modelos nos dados de validação e, finalmente, escolhemos os melhores híperparametros.

Com os hiperparâmetros escolhidos, nós treinamos o modelo novamente, mas dessa vez nós usamos os dados de treino e validação juntos (etapa 4)! E voilà, nosso modelo final foi obtido !

Dados de teste

Esses são os dados usados na avaliação FINAL do modelo: quando nós já temos nosso modelo final (hiperparâmetros otimizados) e queremos avaliar a sua performance em dados NUNCA vistos (direta ou indiretamente). Essa é a partição realmente importante para a comparação de modelos.

Aqui termina a parte prática da criação de um modelo, abaixo eu sigo com mais algumas precisões (ainda sem aprofundamento matemático, apenas noções) adicionais para ajudar a entender os conceitos abordados até então.

Interesse e motivação dessa repartição - Generalização

O motivo por trás dessa repartição vêm da necessidade do modelo ser capaz de generalizar um problema. O conceito é bem simples na realidade, nenhum mistério !

Essa capacidade de generalização é simplesmente o fato de o modelo ter uma boa performance mesmo em dados que ele nunca viu ! 

Um modelo que é muito bom em classificar pontos que ele já viu durante o treino mas que é péssimo com pontos que ele nunca viu significa que ele não é capaz de generalizar o problema !

Como nossa quantidade de dados é sempre limitada, nós sempre buscamos modelos bons nos dados que ele já viu e igualmente bons nos dados que ele nunca viu.

Esse problema de generalização é na realidade outro problema bem conhecido que tem até nome: Bias–variance tradeoff (Trade-off entre viés e variância).

Trade-off entre viés e variância

Esse problema não é bem o interesse desse post (farei um no futuro), mas de modo simples:
- Um modelo com Viés muito baixo (muito bom nos dados já vistos) terá provavelmente tem provavelmente uma variância muito elevada, o que implica que o modelo vai ser bem ruim nos dados nunca vistos.
- Um modelo com Viés muito alto (já muito ruim nos dados já vistos) terá provavelmente uma variância muito baixa, o que implica que o modelo também vai ser muito ruim nos dados nunca vistos, pois ele vai ter uma performance parecida à performance obtida nos dados já vistos (ele não "varia" muito).
O que nós buscamos é um modelo com Viés "razoavelmente baixo" e variância "razoavelmente baixa".
Tentei explicar esse trade-off de forma intuitiva, porém o uso do termo variância vem na realidade de um desenvolvimento matemático (posso aprofundar futuramente, mas se quiserem podem dar uma olhada no Wikipédia).
E, ainda, esse trade-off origina dois outros paradigmas BEM importantes: overfitting e underfitting.

Overfitting vs Underfitting

Esses conceitos são intrinsecamente ligados ao trade-off entre viés e variância. É outro conceito na realidade bem simples, mas, como dizem, uma imagem fala mais que mil palavras. Então, veja a imagem abaixo:

Trade-off viés-variância. Fonte: towardsdatascience.com



Com essa imagem creio eu que fique fácil de entender:
  • Overfitting: O modelo aprendeu muito bem (até demais) o dados de treino, ele é capaz de prever com exatidão cada um dos "pontos" de treino. Porém, se testarmos esse modelo com um ponto de teste que nunca foi visto, a previsão vai ser catastrófica.
  • Underfitting: O modelo usado é simples demais e ele não é capaz de prever os dados de treino. Consequentemente, ele vai ser igualmente ruim na predição de pontos de treino que nunca foram vistos.
  • Good balance: O modelo aqui não prevê com exatidão os pontos de treino (viés não nulo, mas ainda baixo), porém o modelo vai ter uma performance similar (i.e., boa) com pontos nunca vistos ! Esse é o grande objetivo.

Como chegar no "Good balance" ?

Então, para chegar nessa tão desejada "Good balance" nós precisamos de um modelo que seja bom no treino (baixo viés) e também bom no teste (o que implica baixa variância).
Para isso, deve-se ajustar a complexidade dos modelos: um modelo extremamente complexo tende normalmente ao overfitting, enquanto um modelo extremamente simples tende ao underfitting.  A complexidade dos modelos é, normalmente, medida em função do número de parâmetros do modelo. Por exemplo:
  1. Um modelo linear (2D) tem 2 parâmetros (a, b) à serem ajustados: y = a*x + b
  2. Um modelo quadrático (2d) tem 3 parâmetros (a, b, c) à serem ajustados: y = a*x^2 +   b * x + c

Comentários

Postagens mais visitadas deste blog

Tipos de Aprendizado - Supervisionado x Não-Supervisionado