TATECHATLAS
◎ Français
Mathématiques et modèles / Guide

Choisir une métrique de régression pour des données non négatives dans scikit-learn

Choisissez une métrique de régression pour des données non négatives en décidant d'abord l'objectif de prédiction, puis en sélectionnant une perte cohérente comme MAE, RMSE ou la perte de pinball, et enfin en comparant les performances à une baseline constante avec un score de type D2.

Dans ce guide

Commencez par l'objectif de prédiction et le but décisionnel, et non par la liste des métriques. Pour des quantités non négatives comme des comptages ou des montants, mean_absolute_error est une perte non négative simple avec une valeur optimale de 0,0 et une interprétation de coût linéaire, tandis que root_mean_squared_error est également non négatif avec une valeur optimale de 0,0 mais pénalise davantage les erreurs les plus importantes. Si vous avez besoin d'une estimation supérieure conservative, entraînez un régresseur quantile et évaluez-le avec un scorer basé sur la perte de pinball, comme make_scorer(mean_pinball_loss, alpha=0.95). Comparez les performances à un modèle constant avec un score de type D2, et évaluez plusieurs métriques ensemble lors de la validation croisée ou de la recherche. Si une fonction de scoring est imposée de l'extérieur, utilisez-la directement ; sinon, privilégiez la même métrique strictement cohérente pour l'entraînement et l'évaluation.

Commencez par l'objectif de prédiction, et non par la liste des métriques

Le choix de la métrique doit suivre le but décisionnel et la fonctionnelle à prédire, et non la liste des scores disponibles. Dans les recommandations d'évaluation des modèles de scikit-learn, la première question est de savoir si la fonction de scoring est imposée de l'extérieur, par exemple par une compétition ou un contrat métier. Si elle est imposée, utilisez directement cette fonction de scoring. Si vous êtes libre de choisir, les recommandations indiquent de partir de l'objectif final et de l'application de la prédiction, puis de distinguer la prédiction de la prise de décision.

Pour la régression, la réponse est généralement traitée comme une variable aléatoire avec une distribution, donc une prédiction ponctuelle vise généralement une fonctionnelle comme la moyenne, la médiane ou un quantile. Une fois cette fonctionnelle fixée, les recommandations conseillent d'utiliser une fonction de scoring strictement cohérente pour cette fonctionnelle. Une fonction de scoring strictement cohérente est alignée avec la mesure de la distance entre les prédictions et la vraie fonctionnelle cible à partir d'observations, et elle peut servir à la fois comme perte d'entraînement et comme métrique d'évaluation. Cet alignement est important car il fait parler la même langue l'entraînement et l'évaluation.

Pour des cibles non négatives comme des comptages ou des montants, cela signifie que vous devez décider si vous voulez une prévision ponctuelle de type moyenne, de type médiane ou un quantile comme une borne supérieure, puis choisir une métrique cohérente avec ce choix. La liste des métriques est secondaire par rapport à cette décision.

Lorsque l'impact métier est grossièrement linéaire en erreur absolue sur des quantités non négatives, commencez par mean_absolute_error car elle est facile à expliquer aux parties prenantes et sa valeur optimale est 0,0. Si les grandes erreurs sont disproportionnellement coûteuses, passez à root_mean_squared_error en précisant clairement qu'elle pénalise davantage les grandes déviations. Pour des objectifs quantiles comme une estimation supérieure conservative, entraînez un régresseur quantile et évaluez-le avec un scorer basé sur la perte de pinball au niveau alpha choisi, puis comparez les performances à un modèle constant avec un score de type D2 pour mesurer l'amélioration par rapport à une règle simple plutôt qu'à un nombre arbitraire.

Utilisez MAE lorsque l'erreur absolue sur des comptages ou des montants est importante

L'erreur absolue moyenne est une perte de régression non négative avec une valeur optimale de 0,0, et elle est simple à interpréter car elle moyenne les déviations absolues. La documentation de scikit-learn la décrit comme une valeur flottante non négative dont la meilleure valeur est 0,0, et elle prend en charge les poids d'échantillon et l'agrégation mult sortie.

Pour des cibles non négatives, MAE est souvent un bon premier choix lorsque l'impact métier est grossièrement linéaire en erreur absolue. Si une erreur de 3 unités coûte environ trois fois plus qu'une erreur d'1 unité, MAE correspond à cette intuition plus directement qu'une métrique de type perte quadratique. L'exemple concret montre une petite série non négative où l'erreur absolue moyenne est 1,0.

Une mise en garde pratique est que MAE est linéaire dans chaque erreur absolue, donc elle est moins sensible aux très grandes erreurs que les métriques de type erreur quadratique, mais elle n'est pas insensible à celles-ci. Une sensibilité moindre aux valeurs aberrantes n'est pas la même chose qu'ignorer les erreurs extrêmes.

from sklearn.metrics import mean_absolute_error

y_true = [0, 2, 5, 9]
y_pred = [1, 2, 4, 10]

mae = mean_absolute_error(y_true, y_pred)
print(mae)
# 1.0

Utilisez RMSE ou l'erreur quadratique moyenne racinée lorsque les grandes erreurs sont coûteuses

L'erreur quadratique moyenne racinée est également une perte de régression non négative avec une valeur optimale de 0,0, et elle a été ajoutée à scikit-learn dans la version 1,4. Parce qu'elle met au carré les erreurs avant de les moyenner puis prend la racine carrée, elle met davantage l'accent sur les déviations importantes que MAE.

Cela rend RMSE un choix raisonnable lorsque les grandes erreurs sont disproportionnellement coûteuses, par exemple lorsque une sous-prédiction ou une sur-prédiction d'un montant non négatif a un coût non linéaire. L'exemple concret utilise les mêmes entrées que l'exemple MAE et montre une valeur légèrement plus grande car la plus grande erreur contribue davantage sous le carré.

Une incompréhension courante est de traiter RMSE comme l'écart-type des erreurs en général. Cette égalité nécessite des conditions particulières comme une erreur moyenne nulle et un diviseur correspondant, il est donc plus sûr de décrire RMSE par son profil de sensibilité plutôt que de l'équivaloir à un écart-type d'erreur. Aussi, lors de la traduction de changements relatifs, recalculer ceux-ci depuis le dénominateur original et conserver la racine carrée dans chaque traduction de RMSE.

from sklearn.metrics import root_mean_squared_error

y_true = [0, 2, 5, 9]
y_pred = [1, 2, 4, 10]

rmse = root_mean_squared_error(y_true, y_pred)
print(rmse)
# 1.118033988749895

Envisagez la perte quantile et de pinball pour un risque non symétrique sur des données non négatives

Lorsque l'objectif n'est pas une prévision ponctuelle centrale mais une estimation supérieure conservative pour une demande non négative, la régression quantile et la perte de pinball sont utiles. La documentation de scikit-learn présente mean_pinball_loss et explique que vous pouvez construire un scorer avec un alpha spécifique, par exemple make_scorer(mean_pinball_loss, alpha=0.95).

Ce scorer peut être utilisé pour évaluer la performance de généralisation d'un régresseur quantile via la validation croisée, et il peut aussi servir à l'ajustement des hyperparamètres si le signe est inversé pour que plus grand signifie meilleur. La documentation pointe également vers un exemple sur les intervalles de prédiction pour la régression par boosting de gradient, où la perte de pinball est utilisée pour évaluer et ajuster la régression quantile sur des données avec un bruit non symétrique et des valeurs aberrantes.

Cela est important pour les données non négatives car le risque peut être asymétrique : sous-prédire la demande peut coûter plus cher que la sur-prédire, ou l'inverse. Un objectif quantile permet de cibler directement cette asymétrie, et la perte de pinball offre une façon cohérente de l'évaluer.

from sklearn.metrics import mean_pinball_loss, make_scorer

mean_pinball_loss_95p = make_scorer(mean_pinball_loss, alpha=0.95)

# Illustrative use with a quantile regressor:
# cross_val_score(estimator, X, y, cv=5, scoring=mean_pinball_loss_95p)

Utilisez des scores de compétence de type D2 pour comparer à un modèle constant

D2 est décrit dans la documentation de scikit-learn comme la fraction de déviance expliquée, et c'est une généralisation de R2 où l'erreur quadratique est remplacée par une déviance de choix telle que Tweedie, pinball ou erreur absolue moyenne. C'est une forme de score de compétence et il est calculé comme 1 moins le ratio de la déviance du modèle sur la déviance du modèle nul.

La prédiction nulle dépend de la déviance choisie : pour Tweedie c'est la moyenne de y_true, pour l'erreur absolue c'est la médiane, et pour la perte de pinball c'est le quantile alpha. Un modèle constant qui prédit toujours cette valeur nulle obtient un D2 de 0,0, le meilleur score possible est 1,0, et le score peut être négatif car un modèle peut être arbitrairement pire que le modèle nul.

Pour la régression non négative, cela est utile car cela encadre l'amélioration par rapport à une baseline constante simple au lieu d'un nombre absolu arbitraire. Si vous choisissez un D2 basé sur la pinball, la baseline elle-même devient le quantile pertinent, ce qui correspond à un objectif de prédiction quantile.

Évaluez plusieurs métriques ensemble lors de la validation croisée et de la recherche

Scikit-learn permet d'évaluer plusieurs métriques dans GridSearchCV, RandomizedSearchCV et cross_validate. La documentation décrit trois façons de spécifier plusieurs métriques de scoring : comme un itérable de noms de métriques sous forme de chaînes, comme un dictionnaire associant un nom de scorer à une fonction de scoring ou une chaîne prédéfinie, ou comme une fonction appelable renvoyant un dictionnaire de scores.

Pour la régression non négative, cela est utile car une seule métrique raconte rarement toute l'histoire. Vous pouvez vouloir MAE pour l'interprétabilité linéaire, RMSE pour la sensibilité aux grandes erreurs et un scorer basé sur la pinball pour un objectif quantile, le tout évalué sur les mêmes plis de validation croisée.

Une note pratique de la documentation est que les scorers personnalisés utilisés avec n_jobs supérieur à 1 sont plus robustes lorsqu'ils sont importés depuis un autre module plutôt que définis en ligne. Veillez aussi aux conventions de signe lors de l'encapsulation d'une perte en scorer, car greater_is_better doit correspondre au fait que la métrique est une perte ou un score.

from sklearn.model_selection import cross_validate
from sklearn.metrics import mean_absolute_error, root_mean_squared_error, make_scorer

scoring = {
    'mae': make_scorer(mean_absolute_error),
    'rmse': make_scorer(root_mean_squared_error),
}

# cv_results = cross_validate(estimator, X, y, scoring=scoring, cv=5)

Utilisez des estimateurs fictifs comme test de cohérence pour la régression

La documentation de scikit-learn décrit les estimateurs fictifs comme un test de cohérence simple lors de l'apprentissage supervisé : comparez votre estimateur à des règles simples. DummyClassifier implémente plusieurs stratégies pour la classification, et la même idée s'applique dans l'esprit aux baselines de régression, où une prédiction constante ou une règle simple aide à juger si un modèle améliore des prédictions triviales.

La documentation souligne que avec ces stratégies fictives, la méthode predict ignore complètement les données d'entrée, ce qui est précisément pourquoi elles sont utiles comme baselines : elles montrent à quoi ressemble la performance lorsqu'un modèle n'utilise aucune information des caractéristiques.

Pour la régression non négative, une baseline constante peut être particulièrement informative lorsqu'elle est associée à un score de type D2, car le modèle nul est défini relativement à la déviance choisie. Si votre modèle ne bat pas une règle constante pertinente, c'est un signal fort pour réexaminer les caractéristiques, la transformation de la cible ou la métrique d'évaluation.

Alignez la perte d'entraînement, la métrique d'évaluation et le scoring métier

Les recommandations d'évaluation des modèles indiquent que, une fois une fonction de scoring strictement cohérente choisie, il est préférable de l'utiliser à la fois pour l'entraînement et l'évaluation. Cette recommandation est particulièrement pertinente pour la régression non négative car la fonctionnelle cible et la structure de coût doivent guider la métrique, et non la commodité.

Si une fonction de scoring est imposée de l'extérieur, utilisez celle-ci directement, même si elle n'est pas la perte d'entraînement la plus pratique. Si vous êtes libre de choisir, sélectionnez une métrique qui correspond à l'objectif de prédiction, puis alignez l'entraînement et l'évaluation avec celle-ci lorsque cela est possible.

En pratique, cela peut signifier utiliser MAE ou RMSE pour une prévision ponctuelle orientée moyenne ou médiane, utiliser la perte de pinball pour un objectif quantile, et utiliser un score de type D2 pour communiquer l'amélioration par rapport à une baseline constante. L'essentiel est que la métrique reflète le problème décisionnel, et la même logique doit guider l'entraînement et l'évaluation chaque fois que vous avez la liberté de choisir.

Points à vérifier

  • Confirmez d'abord la fonction de prédiction : moyenne, médiane, quantile ou distribution complète, car le choix de la métrique en découle.
  • Utilisez mean_absolute_error lorsque l'erreur absolue sur des comptages ou des montants non négatifs est importante et que l'impact métier est grossièrement linéaire.
  • Utilisez root_mean_squared_error lorsque les grandes erreurs sont disproportionnellement coûteuses, car elle met l'accent sur les déviations les plus importantes.
  • Pour des objectifs quantiles, construisez un scorer avec make_scorer(mean_pinball_loss, alpha=...) et évaluez ou ajustez un régresseur quantile avec celui-ci.
  • Comparez les modèles à un modèle constant avec un score de type D2, en gardant à l'esprit que la prédiction nulle dépend de la déviance choisie.
  • Évaluez plusieurs métriques ensemble en passant une liste, un dictionnaire ou une fonction renvoyant un dictionnaire à GridSearchCV, RandomizedSearchCV ou cross_validate.
  • Utilisez un estimateur fictif comme test de cohérence pour vérifier si le modèle améliore une règle triviale.
  • Si une fonction de scoring est imposée de l'extérieur, utilisez-la directement ; sinon, alignez la perte d'entraînement et la métrique d'évaluation sur la même fonction de scoring strictement cohérente.

Les sources fournies ne donnent pas une règle de décision complète pour chaque cas de régression non négative. Le choix de la métrique dépend toujours de l'application, de la structure de coût et de la fonctionnelle cible à prédire. Des données non négatives seules ne déterminent pas la meilleure métrique. Les scorers personnalisés et l'évaluation mult métriques peuvent nécessiter une attention particulière concernant la parallélisation et les conventions de signe, par exemple lorsque greater_is_better doit être défini correctement pour une perte. Les exemples des sources sont illustratifs et peuvent dépendre des détails du jeu de données, des états aléatoires ou des versions de la bibliothèque.

Sources

  1. scikit-learn: model evaluation ↗
  2. scikit-learn: mean_absolute_error ↗
  3. scikit-learn: root_mean_squared_error ↗
Retour en haut ↑