Cross Validation: Avaliando seu modelo de Machine Learning

Eduardo Braz Rabello
4 min readJul 8, 2019

--

Muitas vezes quando estamos criando nosso modelo baseado em aprendizado de máquina nos deparamos com a interpretação dos resultados e na avaliação do modelo surgem aquelas dúvidas, será que ele tem uma boa performance? Será que ele funcionaria bem com outros dados? A técnica de Cross Validation é uma das técnicas que pode nos ajudar nesse ponto.

Normalmente antes de treinar nosso modelo separamos de forma aleatória nossos dados em base de treino e teste (ex: 70% para treino e 30% para teste). Após o modelo treinado utilizamos a base de teste para avaliar o desempenho do modelo utilizando dados nunca antes vistos pelo mesmo. É uma boa abordagem porém pode não ser suficiente para avaliar o modelo e é nessa hora que entra o Cross Validation.

O que é Cross Validation (CV)

Cross Validation é uma técnica muito utilizada para avaliação de desempenho de modelos de aprendizado de máquina. O CV consiste em particionar os dados em conjuntos(partes), onde um conjunto é utilizado para treino e outro conjunto é utilizado para teste e avaliação do desempenho do modelo. A utilização do CV tem altas chances de detectar se o seu modelo está sobreajustado aos seus dados de treinamento, ou seja, sofrendo overfitting. Existem mais de um método de aplicação de CV, nesse artigo estarei focando nos métodos K-fold.

Faz parte…

K-fold Cross Validation

K-fold consiste em dividir a base de dados de forma aleatória em K subconjuntos (em que K é definido previamente) com aproximadamente a mesma quantidade de amostras em cada um deles. A cada iteração, treino e teste, um conjunto formado por K-1 subconjuntos são utilizados para treinamento e o subconjunto restante será utilizado para teste gerando um resultado de métrica para avaliação (ex: acurácia). Esse processo garante que cada subconjunto será utilizado para teste em algum momento da avaliação do modelo.

Processo K-fold. Fonte: https://towardsdatascience.com/cross-validation-explained-evaluating-estimator-performance-e51e5430ff85)

Vamos levar em consideração um cenário de 5-fold cross validation. Os dados serão divididos em 5 partes. Na primeira iteração a primeira parte será utilizada para teste e as partes restantes serão utilizadas para treinamento do modelo gerando uma métrica de avaliação. Na segunda iteração, a segunda parte será utilizada para teste enquanto as demais para treino. Esse processo será repetido 5 vezes até que toda a base passe pelo processo de treino e teste gerando uma métrica de avaliação média para o modelo, conforme a imagem acima.

Valor de K

O valor de K deve ser escolhido cuidadosamente de forma que cada grupo de dados para treino e teste sejam grandes o suficiente para representarem estatisticamente o dataset original. É possível encontrar na literatura a orientação para a utilização de k=5 ou k=10, valores encontrados através de experimentos, mas não é uma regra formal.

Um valor de K mal escolhido pode resultar em uma interpretação errada do desempenho do seu modelo como medidas de avaliação do modelo com alta variância (as medidas podem variar bastante de acordo com os dados utilizados para treinamento).

Aplicando o K-fold cross validation

Nossa querida biblioteca sklearn (sempre nos salvando) possui uma função chamada cross_val_score que podemos utilizar para aplicar o método K-fold cross validation.

Como exemplo, vou utilizar um modelo simples de classificação treinado com a base do desafio do Kaggle Titanic: Machine Learning from Disaster para aplicar o K-fold.

1- Primeiro importamos as bibliotecas necessárias para aplicar CV em um modelo de machine learning

2- Carregando os dados

3- Instanciando o modelo classificador, nesse caso o KNN, e aplicando K-fold CV

Scores:

array([0.62011173, 0.45810056, 0.46067416, 0.52247191, 0.68361582])

A função cross_val_score tem como resultado de saída uma lista com os scores de cada iteração feita com cada parte(fold) do método k-fold cross validation. A partir dos resultados registrados (linha 5) podemos perceber como a escolha dos dados de treino e teste, mesmo de maneira aleatória, influenciam na avaliação do desempenho do modelo. Tivemos um melhor resultado de 0.68 e um pior resultado de 0.45, uma diferença considerável se tratando de avaliação de modelos.

Podemos fazer uma média e também o desvio padrão dos resultados para análise (linha 8) e desempenho geral do modelo:

Accuracy: 0.55 (+/- 0.18)

Como o objetivo desse post é mostrar o que é Cross Validation e sua aplicação, não estarei entrando em detalhes de como melhorar o desempenho do modelo agora (mas sim em futuros posts).

Espero que esse post tenha conseguido transmitir o básico de como funciona uma das técnicas muito aplicadas na avaliação de modelos de machine learning. Até a próxima!!!

Link para o jupyter notebook com o código de exemplo postado acima: https://github.com/eedubraz/medium/blob/master/cross-validation-k-fold/k-fold-application.ipynb

Referências

--

--

Eduardo Braz Rabello

Data Scientist at Carrefour Group | Data Science | Artificial Intelligence | Python s2