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
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
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
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 (%).
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.
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.
Utilizaremos os algorítimos RandomForest e o Decision Tree apenas para comparativo de resultado entre os dois modelos.
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.
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.
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.
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.
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/