Overfitting

08/04/2020
Overfitting

Hoje quero comentar sobre um fenômeno muito perigoso quando se treinam modelos de aprendizado de máquina. Para mensurar o quão bem um algoritmo aprendeu determinada tarefa, geralmente faz-se alguma validação ou teste com esse modelo, tiramos medidas como a acurácia, que mede a taxa de acerto geral de um modelo ou também a média do erro absoluto, que mede “por quanto” o nosso modelo está errando. Enfim, cada métrica e forma de validar possui uma finalidade, e elas devem ser selecionadas com cuidado.

Vamos imaginar que estamos ensinando um amigo a dirigir, realizamos sempre os mesmos trajetos com ele e em horários mais tranquilos. Em determinado momento ele se sente capaz de pegar o carro e ir enfrentar o trânsito, e nesse momento ele percebe que não faz a menor ideia de como enfrentar uma Ipiranga às 18h ou como pegar a estrada para ir para praia. Ou seja, fugindo do que ele já viu e andou antes, fica muito perdido. Conclui-se que ele não aprendeu a andar de carro, aprendeu como fazer aqueles trajetos específicos. Isso pode acontecer com os modelos e é o que chamamos de “overfitting”, quando nosso modelo, ao invés de aprender com os dados, decora-os.

Havia comentado sobre saber selecionar quais formas de validação e métricas iríamos usar por causa disso. Se utilizamos dados já vistos no treino para testar a qualidade do nosso modelo, ele tem uma tendência muito grande de ir bem “até demais”, uma vez que ele se baseou naqueles dados para aprender um padrão. Médias de acerto muito altas, ou taxas de erro muito baixas, podem ser um alerta de que o modelo que criamos está decorando dados e não aprendendo com eles. Isso é ruim porque a capacidade de generalização é perdida, e sem ela não se consegue usar o modelo para lidar com dados não vistos ainda, que é o nosso principal objetivo. Aplicar um algoritmo que realize uma tarefa específica se torna inviável, pois criamos um modelo perfeito para prever os dados que ele já viu, mas incapaz de prever novos dados.

Para conseguir escapar desse fenômeno, cientistas de dados desenvolveram uma série de boas práticas. A primeira delas é manter a mentalidade científica e sempre estar alerta para os resultados obtidos e como eles foram obtidos. A segunda é a separação entre os dados de treino e os dados de teste. Se tivermos 80000 clientes em um banco, por exemplo, utilizamos 70000 para realizar o treinamento, e depois o restante é utilizado para testar o nosso modelo recém treinado. Dessa forma, vemos como o nosso algoritmo lida com informações completamente novas, simulando uma situação real, já com o sistema em produção. Essa metodologia de treino e teste é um padrão que se mostrou altamente eficiente para identificar problemas como o overfitting, e exatamente por isso foram criadas diversas outras técnicas em cima desse padrão: divisão de dados em treino, validação e teste, k-fold cross validation, random subsampling, entre outras.

Espero que tenham compreendido um pouco mais sobre esse fenômeno muito famoso e presente na área de ciência de dados.

 

Por Otávio Parraga, desenvolvedor do #TimeUbots.

Cadastre-se e receba nossas notícias e atualizações.