8.2. Regression
Regressão prevê um número, então o erro também é um número — e é aí que está toda a dificuldade. Em classificação o erro é um fato: certo ou errado. Aqui toda previsão está um pouco errada, e uma métrica é uma decisão sobre como somar toda essa falta de acerto. Formas diferentes de somar premiam modelos completamente diferentes, então a métrica não é um relatório no fim; é uma especificação no começo.
Tudo abaixo é construído sobre o resíduo:
e difere apenas no que faz com o sinal, a magnitude e os outliers.
A escolha que decide tudo: absoluto ou quadrático
Parecem dois sabores da mesma ideia. Não são, e a diferença tem enunciado preciso: elas são minimizadas por previsões diferentes.
- Minimizar o MSE entrega a média da distribuição do alvo1.
- Minimizar o MAE entrega a mediana.
Por isso a escolha não é questão de gosto. Se você treina um modelo de tempo de entrega com MSE, ele prevê o tempo médio, e médias são puxadas para cima pelo desastre raro. Treine com MAE e ele prevê o tempo que metade das entregas bate — em geral o que o cliente estava perguntando. Mesmos dados, mesma arquitetura, pergunta respondida diferente.
Abaixo: um conjunto de tempos de entrega com cauda longa à direita. As curvas são o MSE e o MAE como funções de uma única previsão constante \(c\); arraste o \(c\) e veja onde cada uma atinge o fundo.
Por que elevar ao quadrado produz a média, em uma linha
Minimize \(\sum (y_i - c)^2\) zerando a derivada: \(-2\sum(y_i - c) = 0 \Rightarrow c = \frac{1}{N}\sum y_i\). A média, exatamente.
Faça o mesmo com \(\sum |y_i - c|\): a derivada de \(|y_i - c|\) vale \(-1\) para os pontos acima de \(c\) e \(+1\) para os abaixo, então o total zera quando há tantos pontos acima quanto abaixo — a mediana, e não importa o quão acima eles estão. Essa indiferença à distância é a robustez, enunciada com precisão.
RMSE: as unidades voltam
O MSE está em unidades ao quadrado — minutos ao quadrado, reais ao quadrado — que ninguém consegue interpretar. Tirar a raiz resolve:
O RMSE mantém a preferência do MSE pela média e a sensibilidade a erros grandes, mas se lê na mesma unidade do alvo. Isso o torna o padrão para relatório, e ele vem com um diagnóstico de brinde:
com igualdade apenas quando todos os erros têm exatamente a mesma magnitude. Então a razão RMSE/MAE mede o quanto os seus erros são desiguais. Ruído gaussiano puro dá \(\sqrt{\pi/2} \approx 1{,}25\); bem acima disso significa que algumas previsões são muito piores que as demais, e o certo é ir olhar esses casos um a um em vez de ajustar qualquer coisa.
O que um único outlier faz
Arraste o ponto vermelho. Nada mais muda: mesmos dados, mesma família de modelos, mesmo código.
Duas coisas acontecem ao mesmo tempo quando você arrasta, e só uma delas é culpa da métrica.
As métricas se movem: o RMSE cresce mais rápido que o MAE, e o MedAE — a mediana dos erros absolutos — quase não percebe, porque mediana não liga para o quão longe está o ponto distante. Isso é robustez medida, não afirmada.
O modelo também se move. A reta laranja é ajustada por mínimos quadrados, então ela persegue o outlier: a inclinação cai de 0,961 para 0,423 conforme você puxa o ponto para baixo. A reta verde, ajustada para minimizar o erro absoluto, fica em 0,989 o tempo todo. A métrica que você otimiza é o modelo que você obtém — a mesma lição da média e da mediana, agora visível no próprio ajuste.
O que fazer a respeito
- Olhe os resíduos antes de escolher. Um histograma de resíduos vale mais que qualquer regra.
- Se a cauda é real (tempos de entrega, rendas, sinistros de seguro), ela é o dado, não um erro — reporte MedAE ou um quantil, e considere treinar com MAE ou Huber.
- Se a cauda é dado ruim (um sensor travado em zero, um erro de digitação em um preço), conserte o dado. Nenhuma métrica compensa rótulo corrompido.
- A perda de Huber é o meio-termo, quadrática perto de zero e linear além de \(\delta\):
Ela é diferenciável em todo ponto (ao contrário do MAE em zero) e de influência limitada (ao contrário do MSE), e é por isso que a torch.nn.SmoothL1Loss é o padrão em detectores de objetos2.
R²: uma comparação, não uma porcentagem
Olhe o que está no denominador: o erro de prever a média de \(y\) para todo mundo. Ou seja, o \(R^2\) não mede qualidade em abstrato — mede o quanto você é melhor que a linha de base mais boba possível. Esse enquadramento resolve quase toda a confusão em torno dele:
- \(R^2 = 1\) — previsões perfeitas.
- \(R^2 = 0\) — você foi exatamente tão bem quanto chutar sempre a média. O modelo não acrescentou nada.
- \(R^2 < 0\) — possível, e comum em dados de teste. Você foi pior que a média constante. Se você nunca viu um \(R^2\) negativo, provavelmente só o calculou no conjunto de treino.
Três coisas que o \(R^2\) não é
Não é "a porcentagem da variância explicada" em geral. Essa leitura só vale para modelos lineares ajustados por mínimos quadrados nos mesmos dados. Para uma rede neural em dados separados, é apenas a comparação acima.
Não é comparável entre conjuntos de dados. O \(R^2\) depende da variância de \(y\) na sua amostra. Um modelo de preços de imóveis pode marcar 0,9 em uma cidade e 0,3 em outra mais homogênea — errando os mesmos reais. Compare RMSE entre conjuntos, não \(R^2\).
Ele nunca diminui quando você acrescenta variáveis, por mais inúteis que sejam, e é para isso que existe o \(R^2\) ajustado:
com \(k\) preditores. Use-o para comparar modelos de tamanhos diferentes nos mesmos dados.
Erros percentuais, e onde eles mordem
O MAPE é popular porque "estamos errando 8%" viaja bem em reunião. Ele também tem três arestas afiadas, e a primeira sozinha já o desqualifica para muitos problemas:
- É indefinido em \(y_i = 0\) e enorme perto disso. Previsão de demanda tem zeros. Qualquer alvo de contagem tem zeros.
- É assimétrico. Prever 50 quando a verdade é 100 dá 50%. Prever 150 quando a verdade é 100 também dá 50%, mas prever 200 dá 100% — enquanto o maior erro possível por subestimação é limitado a 100%. Otimizar MAPE, portanto, enviesa o modelo a prever baixo.
- Ele pesa enormemente os alvos pequenos. Errar por 1 unidade em um valor verdadeiro de 2 custa 50%; o mesmo erro absoluto sobre 1000 custa 0,1%.
| Em vez disso | Definição | Por que é melhor |
|---|---|---|
| sMAPE | \(\dfrac{100}{N}\sum \dfrac{\lvert e_i\rvert}{(\lvert y_i\rvert + \lvert\hat{y}_i\rvert)/2}\) | Quase simétrico e limitado, embora ainda desconfortável perto de zero |
| MASE3 | \(\dfrac{\text{MAE do seu modelo}}{\text{MAE da previsão ingênua}}\) | Livre de escala, definido em zero, e se lê direto: abaixo de 1 você bate a linha de base ingênua |
| WAPE | \(\dfrac{\sum \lvert e_i\rvert}{\sum \lvert y_i \rvert}\) | Erro percentual agregado; robusto a alvos pequenos individuais |
Calcule sempre a linha de base
Todo relatório de regressão deveria trazer, ao lado do modelo, a nota do modelo trivial: prever a média, a mediana ou — para qualquer coisa com tempo envolvido — o último valor observado. Bater o último valor é genuinamente difícil em previsão de séries, e um modelo que não bate não é um modelo. Esta é a versão em regressão da checagem de prever-sempre-a-majoritária da página de classificação.
Prever uma faixa em vez de um número
Às vezes um número só é a saída errada. A perda quantílica (ou pinball) treina o modelo para prever o quantil \(\tau\) em vez da média:
Leia como um MAE assimétrico: com \(\tau = 0{,}9\), subestimar é punido nove vezes mais que superestimar, então o modelo aprende um valor que ele só vai ultrapassar em 10% das vezes. Treine três modelos em \(\tau = 0{,}1;\ 0{,}5;\ 0{,}9\) e você tem um intervalo de previsão em vez de um ponto — muitas vezes bem mais útil para quem precisa agir sobre ele. Note que \(\tau = 0{,}5\) é o MAE, a menos de um fator dois4.
Qual métrica, e por quê
| A sua situação | Use | Porque |
|---|---|---|
| Erros mais ou menos simétricos, sem outliers absurdos | RMSE | Mesma unidade, padrão, pune erros grandes |
| A cauda é real e você não pode persegui-la | MAE ou MedAE | Os dois miram o meio da distribuição, não a média |
| Os outliers são dados corrompidos | Conserte o dado, depois RMSE | Nenhuma métrica repara rótulo ruim |
| Comparar com uma linha de base "não fazer nada" | R², MASE | Ambos são razões contra um preditor trivial |
| Comparar conjuntos com escalas diferentes | MASE, WAPE, ou R² com cuidado | RMSE não é comparável entre variâncias de \(y\) diferentes |
| A chefia pensa em porcentagem | WAPE ou MAPE se não houver zeros | Porcentagem viaja bem, mas cheque zeros e o viés para baixo |
| Você precisa de uma faixa, não de um ponto | Perda quantílica | Entrega o intervalo diretamente |
| Treinar uma rede com alvos de cauda pesada | Huber / SmoothL1 | Diferenciável e de influência limitada |
No código
import numpy as np
from sklearn.metrics import (mean_absolute_error, root_mean_squared_error,
median_absolute_error, r2_score)
mae = mean_absolute_error(y_test, pred)
rmse = root_mean_squared_error(y_test, pred) # sklearn >= 1.4
medae = median_absolute_error(y_test, pred)
r2 = r2_score(y_test, pred)
# as linhas de base — reporte sempre ao lado do modelo
mean_rmse = root_mean_squared_error(y_test, np.full_like(y_test, y_train.mean()))
median_mae = mean_absolute_error(y_test, np.full_like(y_test, np.median(y_train)))
print(f"RMSE {rmse:.3f} vs {mean_rmse:.3f} prevendo a média")
print(f"MAE {mae:.3f} vs {median_mae:.3f} prevendo a mediana")
print(f"RMSE/MAE {rmse/mae:.2f} (≈1,25 para erros gaussianos; acima disso, cauda pesada)")
print(f"R² {r2:.3f} ({'pior que a média!' if r2 < 0 else 'melhor que a média'})")
As definições exatas de cada função — incluindo as convenções de sinal dos scorers neg_*, que derrubam todo mundo na primeira vez que usam cross_val_score — estão no guia do scikit-learn5.
Pontos-chave
- A métrica não é um relatório, é uma especificação: minimizar MSE pede a média condicional, minimizar MAE pede a mediana. Decida qual delas o seu usuário quer.
- O RMSE é o padrão sensato para reportar — mesma unidade do alvo — e a razão RMSE/MAE já diz de graça o quanto os erros são desiguais.
- O MedAE é a leitura robusta; use quando a cauda é genuína e você se recusa a persegui-la.
- O R² compara você com prever a média. Ele pode ser negativo, e não é comparável entre conjuntos de dados.
- O MAPE é indefinido em zero, assimétrico, e enviesa o modelo a prever baixo. Prefira MASE ou WAPE.
- Reporte sempre uma linha de base — média, mediana ou última observação. Um modelo que não a bate não é um modelo.
- Se a decisão precisa de uma faixa, treine quantis e entregue o intervalo.
Recursos Adicionais
-
Evaluating forecast accuracy — Hyndman, R. J., & Athanasopoulos, G., Forecasting: Principles and Practice (3ª ed.). O tratamento mais claro de erros dependentes e independentes de escala, escrito por quem propôs o MASE. Gratuito online, e os capítulos vizinhos são a referência sobre linhas de base.
-
Regression metrics — Guia do scikit-learn. Definições exatas, incluindo as convenções de sinal dos scorers
neg_*. -
Root mean square error (RMSE) or mean absolute error (MAE)? — Chai, T., & Draxler, R. R. (2014)6. Um argumento curto e legível dentro de uma discordância real entre pesquisadores — vale ler contra o caso oposto de Willmott & Matsuura1 para ver que a escolha é mesmo uma decisão de modelagem, e não um fato resolvido.
Referências bibliográficas
As obras citadas ao longo do texto, na ordem em que aparecem:
-
Willmott, C. J., & Matsuura, K. (2005). Advantages of the mean absolute error (MAE) over the root mean square error (RMSE) in assessing average model performance — Climate Research 30, 79–82. A defesa do MAE, e o artigo que começou a discussão continuada abaixo. ↩↩
-
Huber, P. J. (1964). Robust Estimation of a Location Parameter — Annals of Mathematical Statistics 35(1), 73–101. De onde vem a perda quadrática-depois-linear, e a origem da estatística robusta moderna. ↩
-
Hyndman, R. J., & Koehler, A. B. (2006). Another look at measures of forecast accuracy — International Journal of Forecasting 22(4), 679–688. Cataloga como os erros percentuais falham, e propõe o MASE. ↩
-
Koenker, R., & Bassett, G. (1978). Regression Quantiles — Econometrica 46(1), 33–50. Regressão quantílica, e a perda assimétrica que a produz. ↩
-
Regression metrics — Guia do scikit-learn. ↩
-
Chai, T., & Draxler, R. R. (2014). Root mean square error (RMSE) or mean absolute error (MAE)? – Arguments against avoiding RMSE in the literature — Geoscientific Model Development 7, 1247–1250. A réplica a Willmott & Matsuura, defendendo que o RMSE é o resumo certo quando os erros são gaussianos. ↩