MAE, MSE, RMSE et R² : formules, exemple calculé et Python
Les métriques de régression décrivent des aspects différents des erreurs de prédiction. La MAE mesure leur valeur absolue moyenne, la MSE leur carré moyen, la RMSE la racine de cette MSE et le R² une comparaison avec la prédiction constante de la moyenne observée. Voici un exemple numérique reproductible : deux séries peuvent avoir la même MAE, mais des RMSE et des R² différents.
Formules et unités
Pour n observations non pondérées et une seule variable cible, on note y la valeur observée, p la prédiction et moyenne(y) la moyenne des valeurs observées. Les sommes portent sur les mêmes n observations.
| Métrique | Calcul | Unité et interprétation |
|---|---|---|
| MAE | somme(|y − p|) / n | Unité de la cible. Chaque erreur absolue entre linéairement dans la somme. |
| MSE | somme((y − p)²) / n | Unité de la cible au carré. Les grandes erreurs contribuent davantage par élévation au carré. |
| RMSE | racine(MSE) | Unité de la cible. Le calcul conserve la pénalisation quadratique avant de prendre la racine. |
| R² | 1 − somme((y − p)²) / somme((y − moyenne(y))²) | Sans unité, pour une cible non constante. Il compare les erreurs à la variabilité des observations. |
La MAE n’est pas insensible aux valeurs aberrantes : une erreur de 100 contribue davantage qu’une erreur de 1. La différence est sa contribution linéaire, plutôt que quadratique. Les définitions et options de pondération sont documentées par scikit-learn : MAE, MSE et RMSE.
Exemple original avec quatre observations
Prenons les observations [2, 4, 6, 8]. Leur moyenne vaut 5 et la somme des écarts à cette moyenne au carré vaut 9 + 1 + 1 + 9 = 20. Les prédictions ci-dessous sont des exemples construits, pas les performances mesurées de modèles entraînés.
| Série | Prédictions | MAE | MSE | RMSE | R² |
|---|---|---|---|---|---|
| A | [1, 5, 5, 9] | 1 | 1 | 1 | 0,8 |
| B | [2, 4, 6, 12] | 1 | 4 | 2 | 0,2 |
| Moyenne observée | [5, 5, 5, 5] | 2 | 5 | 2,236068 | 0 |
| C | [10, 10, 10, 10] | 5 | 30 | 5,477226 | −5 |
Pour A, les quatre erreurs absolues valent 1 : MAE = 4/4 = 1 et MSE = 4/4 = 1. Le R² vaut 1 − 4/20 = 0,8. Pour B, une seule erreur absolue vaut 4 : la MAE reste 4/4 = 1, mais la MSE devient 16/4 = 4, la RMSE vaut 2 et le R² vaut 1 − 16/20 = 0,2. La même MAE ne décrit donc pas la même répartition des erreurs.
Reproduire les résultats sans dépendance externe
Ce programme Python a été exécuté pour vérifier le tableau. Il illustre le cas simple d’une cible non constante, sans pondération ni valeurs manquantes. Il ne remplace pas les contrôles de données d’une bibliothèque.
from math import sqrt
y = [2, 4, 6, 8]
predictions = {
"A": [1, 5, 5, 9],
"B": [2, 4, 6, 12],
"moyenne": [5, 5, 5, 5],
"C": [10, 10, 10, 10],
}
mean_y = sum(y) / len(y)
sst = sum((value - mean_y) ** 2 for value in y)
for name, predicted in predictions.items():
errors = [actual - estimate for actual, estimate in zip(y, predicted)]
mae = sum(abs(error) for error in errors) / len(y)
sse = sum(error ** 2 for error in errors)
mse = sse / len(y)
rmse = sqrt(mse)
r2 = 1 - sse / sst
print(name, *(f"{value:.6f}" for value in (mae, mse, rmse, r2)))
Dans les versions actuelles de scikit-learn, la fonction dédiée est root_mean_squared_error(y_true, y_pred), disponible depuis la version 1.4. La signature actuelle de mean_squared_error ne contient plus l’argument squared=False de l’ancien exemple. Pour ce cas à une seule cible, on peut aussi calculer la racine de la MSE. Vérifiez la version installée avant de réutiliser un ancien tutoriel.
R² négatif, cible constante et petit échantillon
Le meilleur R² est 1, mais il peut être négatif. Dans la série C, la somme des erreurs au carré vaut 120 : R² = 1 − 120/20 = −5. Les prédictions sont moins bonnes que la constante égale à la moyenne des observations évaluées. Cela ne signifie pas une « précision de −500 % ».
Pour une cible constante, le dénominateur de la formule vaut zéro. scikit-learn indique alors un résultat mathématique non fini, mais sa valeur par défaut force_finite=True remplace les cas parfaits par 1 et les cas imparfaits par 0. Avec force_finite=False, ces cas restent respectivement NaN et −Inf. Avec moins de deux observations, le R² n’est pas bien défini. Documentation de r2_score.
Choisir et interpréter une métrique
Comparez les séries sur les mêmes observations, avec les mêmes unités et la même politique de données manquantes. Pour une cible non constante et une évaluation identique à une seule sortie, réduire la MSE réduit aussi la RMSE et augmente le R² : ces trois classements ne constituent pas trois confirmations indépendantes. La MAE peut conduire à un autre classement.
Le choix dépend du coût réel des erreurs et de la question étudiée. Aucun seuil universel ne permet de déclarer un modèle « bon ». Un R² élevé sur les données utilisées pour construire un modèle ne démontre pas sa qualité sur de nouvelles observations, sa causalité ou son équité. L’exemple de quatre valeurs sert à comprendre les calculs ; il ne constitue pas une validation prédictive.