DEV Community

Airton Lira junior
Airton Lira junior

Posted on

Métricas para algorítimos de regressão

Métricas de Erro para Algoritmos de Regressão

Quando elaboramos um algorítimo de regressão e queremos saber o quão eficiente foi esse modelo, utilizamos de métricas de erro para obter valores que representam o erro do nosso modelo de machine learning. As métricas desse artigo são importantes quando queremos medir o erro de modelos de previsão de valores numéricos (reais, inteiros).

Neste artigo vamos abordar as principais métricas de erro para algorítimos de regressão, efetuando os cálculos manualmente em Python e medindo o erro do modelo de machine learning de um dataset de cotação de dolar.

Métricas Abordadas

  • SE — Sum of error
  • ME — Mean error
  • MAE — Mean Absolute error
  • MPE — Mean Percentage error
  • MAPAE — Mean Absolute Percentage error

Ambas as métricas são um pouco parecidas, onde temos métricas para media e porcentagem do erro e métricas para media e porcentagem absoluta do erro, diferenciado assim apenas que um grupo obtêm o valor real da diferença e o outro obtêm o valor absoluto da diferença. É importante lembrar que em ambas as métricas, quanto menor o valor, melhor está nossa previsão.

SE — Sum of error

A métrica SE é a mais simples dentre todas desse artigo, onde sua formula é:

SE = εR — P
Enter fullscreen mode Exit fullscreen mode

Portanto se trata do somatório da diferença entre o valor real (variável alvo do modelo) e o valor previsto. Esta métrica tem alguns pontos negativos como, por exemplo, não tratar os valores como absolutos, o que consequentemente vai resultar em um valor falso.

ME — Mean of error

A métrica ME é um "complemento" da SE, onde temos basicamente a diferença de que vamos obter uma média do SE diante da quantidade de elementos:

ME = ε(R-P)/N
Enter fullscreen mode Exit fullscreen mode

Diferente do SE, apenas dividimos o resultado do SE pela quantidade de elementos. Esta métrica, assim como a SE, depende de escala, ou seja, devemos usar o mesmo conjunto de dados e podemos comparar com modelos de previsão diferentes.

MAE — Mean absolute error

Image description

A métrica MAE é o ME mas considerando apenas valores absolutos (não negativos). Quando estamos calculando a diferença entre o real e o previsto, podemos ter resultados negativos e essa diferença negativa é aplicada nas métricas anteriores. Já nesta métrica temos que transformar a diferença em valores positivos e posteriormente tirar a média com base no numero de elementos.

MPE — Mean Percentage error

A métrica MPE é a media do erro em porcentagem do somatório de cada diferença. Aqui temos que retirar o percentual da diferença, somar e posteriormente dividir pela quantidade de elementos para obtermos a média. Portanto é feito a diferença entre o valor real e o previsto, divido pelo valor real, multiplicado por 100, fazemos o somatório de toda essa porcentagem e dividimos pelo quantidade de elementos. Esta métrica é independente de escala (%).

Image description

MAPAE — Mean Absolute Percentage error

A métrica MAPAE é bem parecida com a métrica anterior, porém a diferença do previsto x real é feita de forma absoluta, ou seja, você calcula com valores positivos. Portanto esta métrica é a diferença absoluta do percentual de erro. Esta métrica também é independente de escala.

Image description

Utilizando as métricas na prática

Dado uma explicação sobre cada métrica, vamos calcular ambas manualmente no Python em cima de uma previsão de um modelo de machine learning de cotação do dólar. Atualmente existe boa parte das métricas de regressão em funções prontas no pacote do Sklearn, no entanto aqui vamos calcular manualmente apenas para fins didáticos.

Image description

Utilizaremos os algorítimos RandomForest e o Decision Tree apenas para comparativo de resultado entre os dois modelos.

Image description

Análise dos Dados

Em nosso dataset, temos uma coluna de SaldoMercado e saldoMercado_2 que são informações que influenciam na coluna Valor (nossa cotação dólar). Como podemos observar, o saldoMercado possui uma relação mais próxima da cotação do que o saldoMerado_2. Também é possível observar que não temos valores ausentes (infinitos ou valores Nan) e que a coluna de saldoMercado_2 possui muitos valores não absolutos.

Image description

Image description

Preparação do Modelo

Preparamos nossos valores para o modelo de machine learning definindo as variáveis preditoras e a variável que queremos prever. Utilizamos o train_test_split para fazer uma divisão aleatória dos dados em 30% para teste e 70% para treino.

Image description

Image description

Por fim, realizamos a inicialização de ambos os algoritmos (RandomForest e DecisionTree), realizamos o fit dos dados e fazemos uma medição do score de ambos com os dados de teste. Obtemos um score de 83% para o TreeRegressor e 90% para o ForestRegressor, o que na teoria indica que o ForestRegressor teve um melhor desempenho.

Image description

Image description

Image description

Resultados e Análise

Diante do desempenho parcialmente observado do ForestRegressor, criamos um dataset com os dados necessários para aplicarmos as métricas. Realizamos a predição dos dados de teste e criamos um DataFrame com os valores reais e previstos, incluindo colunas para diferença e porcentagem.

Image description

Podemos observar que em relação ao total real da cotação dolar vs cotação que nosso modelo fez de previsão:

  • Tivemos uma diferença total de R$578,00
  • Isso representa 0.36% de diferença entre o previsto x Real (não considerado valores absolutos)
  • Na parte do erro médio (ME) tivemos um valor baixo, média de R$0.009058
  • Para média absoluta esse valor aumenta um pouco, visto que temos valores negativos em nosso dataset

Reforço que aqui realizamos o calculo manualmente para fins didáticos. No entanto, o recomendado é utilizar as funções de métricas do pacote Sklearn devido a melhor performance e baixa chance de erro no cálculo.

O código completo está disponível no meu GitHub: github.com/AirtonLira/artigo_metricasregressao


Autor: Airton Lira Junior

LinkedIn: linkedin.com/in/airton-lira-junior-6b81a661/

Top comments (0)