O perigo de se basear cegamente em métricas

Entenda quando a melhor performance pode não ser sua melhor opção

Andre Alves Ambrósio
Data Hackers
5 min readNov 8, 2019

--

Photo by Artem Beliaikin from Pexels

Não me leve a mal, se basear em números para tomada de decisão é sim eficiente e fundamental. Porém não é suficiente.

Indo às compras

Imagine que seja de seu interesse fazer um suco de abacaxi, mas quem irá escolher o melhor abacaxi será um robô. Que instruções você passaria?

  • Procure pelo cheiro doce
  • Evite folhas amareladas
  • Prefira os mais pesados

Podemos utilizar essas três ordens para criar uma pontuação numérica em que quão menor seja este valor, melhor será o abacaxi! E por meio desse score o seu robô será capaz de talvez selecionar um abacaxi com a suculência desejada.

E se eu não especificar o que é um abacaxi?

Então o seu robô poderia muito bem escolher uma melancia que foi cortada ao meio!

Embora não faça sentido para nós (verificar as folhas de uma melancia), o seu robô irá respeitar os três requisitos solicitados:

  • Sentirá cheiro doce
  • Não encontrará folhas amareladas
  • Notará um peso considerável

E assim teremos uma incrível melancia que não satisfaz o desejo de quem tomará o suco, mas satisfez as ordens dadas.

O mesmo acontece com a ciência de dados

Quando queremos produzir um modelo para explicar nossos dados é indiscutível que a etapa de escolha do melhor modelo o computador fará de forma mais rápida e eficiente que nós humanos.

Porém o computador não pensa, ele obedece! Se quem o programou der ordens incompletas, o algoritmo não fará milagres.

Assim, ainda é nosso trabalho definir quais modelos fazem sentido serem ajustados para a realidade do nosso conjunto de dados antes do computador fazer o operacional de escolha do melhor modelo baseado em uma métrica dada.

Mão na massa

Para exemplificar iremos aplicar um ajuste de regressão para explicar uma dada variável Y por outra X.

Seguindo o fluxo:

  • Gerar dados
  • Retirar uma amostra desses dados
  • Produzir dois modelos distintos para essa amostra
  • Comparar ambos modelos com a métrica RMSE
  • Replicar o cálculo RMSE para os dados deixados de fora da amostra

Caso queira conferir o código na íntegra, está disponível no meu GitHub: https://github.com/andrealvesambrosio/Variados/blob/master/Overfit_RMSE.R

Vamos lá!

Iremos gerar dados com comportamento semelhante à de uma distribuição Exponencial, com alguns ruídos. (Y condicionada à X)

Nossa população será composta por 101 observações. Porém, iremos fingir que não temos acesso à nossa população, que é o que acontece na prática.

Assim, pegaremos apenas 40 observações para modelar o comportamento de nossa população.

Temos a seguinte disposição de nossos dados e amostra:

Percebe-se que nossa amostra mantém o comportamento da população, embora tenha menos da metade de suas observações.

Agora, iremos ajustar dois modelos distintos:

  • Regressão Polinomial de Grau 2
  • Regressão Gama com função de ligação log (Modelo Linear Generalizado)

E, para comparar qual modelo se ajustou melhor, daremos a seguinte ordem:

Quem obtiver o menor RMSE (Root-mean-square deviation) será o nosso melhor modelo

Essa métrica é calculada a partir dos resíduos gerados pelo modelo ajustado da seguinte maneira:

A priori, parece fazer sentido. Pois estamos minimizando o erro associado à curva ajustada.

Quem obtiver o menor RMSE possui a curva mais próxima dos pontos.

Logo abaixo podemos verificar o comportamento dos modelos para os dados amostrados.

Aparentemente, a curva de cor azul (Modelo Quadrático) está mais fiel aos dados, certo? Vamos verificar o RMSE:

  • RMSE Gama = 124.1
  • RMSE Quadrático = 118.4

De acordo com essa métrica, temos que o melhor modelo é o quadrático.

E qual é o problema por trás disso?

Bem, enquanto um Modelo Linear Generalizado (Regressão Gama) utiliza uma distribuição para ajustar os dados estimando seus parâmetros e então inferindo sobre sua população, um modelo de regressão polinomial apenas ajusta a melhor curva sob grau desejado (no caso 2) que minimize o erro associado.

Deste modo, o modelo quadrático fica super ajustado (overfit) aos dados estudados, e não tem como premissa entender a distribuição da população original.

Podemos verificar isso ao comparar ambos modelos ajustados com as 61 observações restantes (aquelas que foram deixadas de lado na modelagem).

Percebe-se que a Regressão Gama mantém comportamento semelhante aos dados anteriores (aqueles que foram amostrados), enquanto o modelo quadrático se comporta de maneira visivelmente pior.

Seus respectivos RMSE agora são:

  • RMSE Gama = 118.7
  • RMSE Quadrático = 132.3

O que podemos concluir sobre isto?

Bem, evidenciamos o risco de se ajustar qualquer espécie de modelo para explicar seus dados e se basear em algum tipo de métrica.

Antes de comparar modelos, é preciso escolher a dedo os modelos que façam sentido para a realidade do seu conjunto de dados. O computador sempre irá executar as contas necessárias, mas quem precisa definir quais modelos serão ajustados é você!

Se a regressão Polinomial não faz sentido, por quê a outra faz?

Como nosso conjunto de dados possui comportamento semelhante à de uma Exponencial escolhemos a distribuição Gama, pois a Exponencial é um caso específico da distribuição Gama.

Em que uma Exp(k) é igual a uma Gama (1, k). E utilizamos a função de ligação log pois é a função inversa da função exp.

Ainda assim teríamos que realizar uma análise de resíduos, também chamada de análise de diagnóstico e verificar outras suposições. Porém o foco deste artigo não é ensinar a modelar passo a passo, então não entraremos em muitos detalhes técnicos.

E aí, curtiu?

Caso tenha alguma sugestão ou crítica, deixa aí nos comentários o que achou. E se quiser fazer contato, me manda alguma mensagem lá no Linkedin.

Abraço!

Leituras semelhantes:

Correlação e Causalidade: https://towardsdatascience.com/why-correlation-does-not-imply-causation-5b99790df07e

Trade-off de vício e variância na modelagem: https://medium.com/datadriveninvestor/bias-and-variance-in-machine-learning-51fdd38d1f86

--

--