Quando estamos construindo um modelo estatístico ou de machine learning precisamos estimar quão bom ele é, baseado em alguma métrica. Adicionalmente, este teste de “qualidade” deve ser executado em dados que não foram usados na construção do modelo, assim poderemos inferir o comportamento do modelo em dados novos (que nunca foram vistos).

Isso faz todo sentido quanto entendemos o processo como um todo. Veja na figura abaixo os diferentes tipos de dados existentes no processo de modelagem.

dados

Se um modelo for testado com os dados de treino (os mesmos dados em que foi construído) não podemos generalizar seu resultado para o ambiente de produção, já que não sabemos qual será seu comportamento em dados nunca vistos. É por isso que existe o papel dos dados de teste.

Durante o processo de treino do modelo, ainda é possível dividir os dados de treino em diferentes subconjuntos de dados. Chamamos estes subconjuntos de dados de validação e os utilizamos para fazer validações iniciais durante a aprendizagem do modelo.

É importante garantir que os conjuntos de dados de treino, validação e teste contenham a mesma distribuição dos dados, ou seja, de nada adianta treinar/validar o modelo em um conjunto de dados que não representa o cenário real do problema em estudo.

Chamamos de resampling toda essa organização dos conjuntos de dados. As principais formas resampling são:

  • Hold-out validation: Esta é a forma mais simples de separar os dados. Define-se um percentual para cada conjunto de dados (treino, validação e teste) e cria-se as amostras. Geralmente este método é usado quando temos mais dados e conseguimos comprovar que a amostra as amostras criados têm significância estatística para representar a população.
  • Bootstrap: Neste método são selecionadas amostras aleatórias dos dados (sendo que as observações podem ser reutilizadas) para avaliação do modelo. No geral, os resultados a variância do desempenho do modelo.
  • Cross validation: Existem vários tipos de cross validation, porém a mais comum é conhecida como k-fold cross validation. Neste método criamos um número k de amostras, sendo que cada amostra é deixada de lado enquanto o modelo treina com o restante delas. O processo de repete até que seja possível determinar a “qualidade” (depende da métrica em uso) de cada observação (chegando também em uma média geral). Os valores comuns para o número k de amostras são entre 5 e 10.
    k-fold cross validation geralmente é usado quando não se tem dados suficientes para seguir com a estratégia mais simples de hold-out validation.Um outro tipo de cross validation é conhecido como repeated k-fold cross validation. Neste método o processo realizado na abordagem k-fold cross validation é repetido n vezes. No final a qualidade do modelo é definida pelo desempenho médio de cada repetição. Este método é mais utilizado quando temos mais capacidade de processamento disponível.

    Por fim, um outro tipo comum de cross validation é o Leave One Out Cross Validation (LOOCV). Neste método uma observação é deixada de lado e um modelo treina com o restante delas. O processo se repete para todas as observações.

Na parte prática vamos fazer alguns exemplos de cada um destes tipos de resampling.

Faça download do material sobre resampling com R

Abraços.
Weslley Moura

Sobre o Autor: Weslley Moura

Mestre em engenharia da computação, professor de cursos relacionados a análise de dados e co-fundador da empresa Pepsoft Sistemas. Profissional apaixonado pela ciência existente nos dados e suas aplicações práticas. Nos últimos anos vem dedicando seu tempo a projetos de aprendizagem de máquina e mantém seu site pessoal com dicas e aulas relacionadas ao tema em Hacking Analytics.

3 comentários

  1. Legal o post Weslley. Você conhece os papers do Demsar de 2006 (http://goo.gl/tBpqPl) e do Salvador García de 2008 (http://goo.gl/VHLCPK)? Ambos tratam da comparação estatística de classificatores. São bem interessantes para saber quando aplicar cada um dos métodos de resampling dependendo do ser cenário experimental. Eu uso muito 5x2fold cross validation. A justificativa está nos papers 🙂
    Encontrei no github um pacote para rodar alguns testes e com algumas ferramentas para gerar gráficos para análise dos restultados. Talvez vc se interesse: https://goo.gl/w7EjUD

    Curtido por 1 pessoa

  2. Oi Jean.
    Obrigado pelas referências, vou ler asap!

    Na maioria dos meus projetos costumo aplicar hold-out validation para separar os dados de treino e teste (geralmente tenho bastante informação para aplicar esta técnica) e algum método de cross-validation durante a fase de treino (depende do caso).

    A menos que o dataset seja muito pequeno, costumo seguir esta abordagem como “rule of thumb” para pelo menos criar uma baseline do modelo.

    Você costuma seguir alguma abordagem parecida?

    Grande abraço!

    Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s