Maintenant qu’on a parlé feature engineering, de méthodes de séparation Train-Test et de modèles étalons, on a un cadre solide pour pouvoir tester des modèles et en évaluer leur performance. Comme promis, on va enfin aborder ce point-là dans le détail, en commençant par le cas de la régression.
Comparez finement les métriques classiques
Reprenons d’abord les bases ! Les 3 métriques les plus connues (qui ont déjà été évoquées dans le cours d’initiation lors du chapitre Évaluez la performance d’un modèle prédictif) pour mesurer les performances sont la MAE, le RMSE et le R².
On commence par la MAE qui est la plus facile ! Elle signifie Mean Absolute Error et elle est calculée en 3 étapes :
On prend notre jeu de données (train ou test peu importe) et on demande au modèle entraîné de prédire les targets pour chaque observation. On obtient alors une liste de prédictions.
On prend cette liste de prédictions et la liste des valeurs de la target (concrètement notre y) et on calcule la différence entre les deux. On obtient alors une liste de différences entre les estimations et les valeurs réelles de la target, autrement dit : une liste contenant les erreurs du modèle pour chaque prédiction ! Parfois, on appelle également ces erreurs résidus. ;)
Comme certaines erreurs seront positives (quand la prédiction est supérieure à la target) et d’autres seront négatives (quand la prédiction sous-estime la target), faire une moyenne ne sera pas très parlant ! On va venir mettre en valeur absolue toutes ces erreurs, et calculer enfin la moyenne de ces erreurs.
C’est une bonne métrique pour commencer, mais elle présente plusieurs limites. L’une d’entre elles est que le calcul de la moyenne ne différencie pas entre les petites et les énormes erreurs de prédictions. Pour mieux comprendre ce point, parlons de la 2ᵉ métrique, le RMSE, qui va résoudre en partie le problème de la MAE.
Le RMSE (Root Mean Squared Error) reprend les mêmes étapes de calcul que la MAE mais modifie un peu l’étape 3 : au lieu de mettre en valeur absolue les erreurs, on va les mettre au carré ! En plus de gommer la distinction entre sous-estimation et sur-estimation, cette étape va surtout venir gonfler les erreurs significatives du modèle ! Enfin, nous appliquons une racine carrée aux erreurs pour les ramener à la même échelle que celle au carré et l'autre non).
Prenons deux exemples dans le contexte de notre projet filé :
Une MAE de 500 avec une RMSE de 550 indiquerait qu’il existe relativement peu d’erreurs extrêmes qui seraient exacerbées par la “mise au carré” du calcul du RMSE . On pourrait alors dire que notre modèle se trompe de manière plus ou moins uniforme à travers notre jeu de données.
Une MAE de 500 avec une RMSE de 1200 indique que notre modèle est très inégal dans sa manière de se tromper dans ses prédictions. Il y a alors des observations où le modèle est tellement à côté de la plaque dans son estimation que l’écart entre RMSE et MAE devient énorme.
On commence à comprendre que comparer le MAE et le RMSE nous informe sur la tendance d’erreur de notre modèle. ;)
Enfin, passons au R², qui est une métrique un peu moins “tangible” et un peu plus “statistique”, mais tout aussi importante. On la calcule avec les étapes suivantes :
Reprenons la liste des erreurs aux carrés de la dernière étape de calcul du RMSE. Au lieu d’en calculer la moyenne, on va cette fois-ci en calculer la somme. C’est d’une certaine manière l’erreur cumulée du modèle.
On va ensuite recalculer la même erreur cumulée, mais pour un autre modèle : le Dummy Regressor qu’on a vu lors du chapitre dernier !
Le R² se calcule alors comme étant 1 - (erreur_cumulée de notre modèle / erreur cumulée du modèle dummy).
Mais alors, le R² est un pourcentage ?
Non, et c’est une erreur très répandue ! Le R² n’est pas un pourcentage, parce qu'il peut être négatif ! En effet, on pourrait même croiser un R² de -2, ce qui signifierait selon la formule du R² que le modèle de ML se trompe en cumulet 3 fois plus qu’un modèle Dummy ! Encore un argument supplémentaire pour souligner l’importance des modèles benchmarks. ;)
Le R², la MAE et le RMSE, ainsi que la majorité des autres métriques ont quelque chose en commun : ce sont des mesures moyennes. Or, on sait en statistique que les moyennes dissimulent beaucoup de choses : elles ne représentent pas de manière fidèle la distribution de la variable en question, elles ne renseignent pas sur les cas extrêmes, comme les outliers, et viennent implicitement mettre dans le même lot toutes les observations du jeu de données, alors que celui-ci est diversifié par nature !
En tant que Data Scientists et ML Engineers, nous sommes tenus de raisonner d’une manière diamétralement opposée ! Le diable est souvent dans les détails en matière d’analyse de données, et l’évaluation des modèles de ML n’est pas une exception.
Comprenez la tendance d’erreur de votre modèle
On a vu que la méthode de calcul des 3 métriques précédentes supprime délibérément la distinction entre les erreurs positives et les erreurs négatives d’un modèle. Or, ce sont des informations précieuses pour l’interprétation de notre modèle ! Regardons cela ensemble de plus près !
On commence à voir qu’un modèle se trompe rarement de manière uniforme ! Ce n’est pas le cas dans notre projet fil rouge, mais nous pouvons parfois identifier des “groupes” distincts d’erreurs. Par exemple : À partir d’un certain seuil de la target, le modèle se trompe 2 fois plus qu’en dessous du seuil etc.
Identifiez “les bons et les mauvais élèves”
Nous pouvons pousser le raisonnement de la section précédente plus loin en croisant les erreurs du modèle avec ses features !
Effectivement, il est probable que certaines tendances de certaines features soient beaucoup plus faciles pour le modèle à estimer, et présentent souvent d’excellentes prédictions en jeu de test (ce sont les “bons élèves”). Inversement, certaines valeurs de features, plus rares ou plus particulières, ont été rarement vues en apprentissage, ce qui cause le modèle à se tromper significativement plus que la moyenne (nos fameux “mauvais élèves”).
Regardons comment chercher ces cas de figure en pratique :
Toutes ces analyses sont très utiles, particulièrement pour nous Data Scientists et ML Engineers afin de comprendre comment notre modèle fonctionne dans le détail. Mais à force de retourner un modèle dans tous les sens, on peut facilement rentrer dans un engrenage infini d’analyses pour identifier des pistes de plus en plus fines d’amélioration de nos modèles.
Pour livrer un projet de ML dans les temps et garder la confiance des équipes qui attendent notre modèle avec impatience, il faut lever le stylo à un moment donné et se poser la question suivante :
Au final… qu’est-ce qu’un “bon” modèle ?
Eh bien… Ce serait un modèle avec de bonnes performances, non ? Par exemple, un R² supérieur à 0.7 en moyenne en validation croisée tout en ayant un écart-type faible ?
C’est certes un repère assez connu et en principe rassurant ! Mais est-ce qu’un modèle avec un R² nécessairement de 0.59 en test est nécessairement mauvais ? Est-ce qu’un modèle avec un R² de 0.85 en test est obligatoirement excellent ? Tout dépend de votre cas d’usage et de votre contexte métier !
Si vous êtes client du Data Scientist qui développe le modèle du projet fil rouge : Seriez-vous satisfait d’un modèle qui se trompe en moyenne de 15000 euros dans l’estimation du prix d’une transaction, mais qui ne se trompe que de 3000 en moyenne euros concernant les transactions de maisons en région Provence-Alpes-Côtes-d’Azure où vous rêvez de vous installer ?
Un autre exemple : vous travaillez pour une entreprise de la grande distribution et voulez réaliser un modèle de régression pour prédire la demande cliente sur tous les produits afin d’éviter des ruptures de stock. Votre modèle présente un R² de 0.85, et il est excellent sur la prévision sur 90% des produits, mais il échoue lamentablement sur les 10% de produits qui génèrent 50% du chiffre d'affaires total. Ce n’est pas un modèle que vous pouvez présenter aux décideurs !
Vous vous doutez bien qu’il n’y a pas de réponse universelle à ces questions, car elles sont intimement liées aux spécificités de votre jeu de données et SURTOUT à la réalité métier de l’entreprise pour laquelle vous travaillez.
Est-ce qu’on a une méthode pour dire à l’algorithme de prioriser un périmètre de la donnée plutôt qu’un autre ?
Tout à fait ! Cette méthode s’appelle le sample weighting !
Le principe est assez simple : nous allons assigner un poids plus élevé à certaines observations comparé à d’autres. Ceci va pousser l’algorithme, pendant son apprentissage, à se focaliser sur les observations à poids élevé et à minimiser son erreur d’estimation les concernant. Quand nous n’utilisons pas cette technique, toutes les observations ont par défaut un poids égal.
Cette méthode est idéale quand nous avons identifié un périmètre prioritaire où le modèle doit être particulièrement fiable ! Voici comment nous pouvons implémenter cette technique avec Scikit-learn, en prenant par exemple le modèle SVC de la famille des SVM :
classifier = svm.SVC()
classifier.fit(
X,
y,
sample_weight=input_weights # Ici il s’agit d’une liste aussi longue que le vecteur y, ordonné de la même manière que la donnée qu’on injecte dans la méthode fit
)
À vous de jouer !
Nous avons vu dans le screencast comment explorer le lien entre l’erreur du modèle et des features numériques. A votre tour de faire de même avec les features catégorielles en reprenant les données du projet filé.
Complétez ce template de code pré-rempli.
Une fois que vous avez fini, vous avez ce corrigé à disposition.
En résumé
La MAE (Mean Absolute Error) mesure l'écart moyen entre les prédictions et les valeurs réelles, en prenant la valeur absolue des erreurs. Elle est simple à interpréter, mais ne différencie pas entre les petites et les grandes erreurs.
Le RMSE (Root Mean Squared Error) met en valeur les grandes erreurs en les élevant au carré avant de calculer la racine carrée. Il est donc plus sensible aux prédictions extrêmes que la MAE.
Le R² évalue la performance du modèle par rapport à un modèle de base (Dummy Regressor) et peut varier de 1 (parfait) à des valeurs négatives (pire qu’un modèle aléatoire). Il n'est pas un pourcentage et peut être trompeur sans contexte.
Les métriques comme la MAE, le RMSE et le R² sont des moyennes, qui peuvent masquer des erreurs importantes ou des outliers. Il est donc essentiel d'analyser la distribution des erreurs et d'identifier des patterns dans les données.
Un bon modèle est celui qui offre des performances optimales sur les observations critiques pour le contexte métier, et la technique du sample weighting permet de prioriser certaines observations pour mieux ajuster le modèle à ces priorités.
Vous avez compris les métriques de régression, passons maintenant à l'évaluation des modèles de classification et découvrons les outils adaptés !