From f601bb45a69d46392a496a320ce8502abec7a806 Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Tue, 26 Nov 2024 17:20:56 +0000 Subject: [PATCH 01/39] Bricole sur le boosting --- chapters/chapter1/1-survol.qmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chapters/chapter1/1-survol.qmd b/chapters/chapter1/1-survol.qmd index f4cc687..d5c2138 100644 --- a/chapters/chapter1/1-survol.qmd +++ b/chapters/chapter1/1-survol.qmd @@ -119,7 +119,7 @@ Alors que les forêts aléatoires construisent un ensemble d'arbres complexes et - Ce processus est répété en ajoutant des modèles simples, chaque modèle corrigeant les erreurs commises par l'ensemble des modèles précédents; - Tous ces modèles sont finalement combinés (souvent par une somme pondérée) pour obtenir un modèle complexe et performant. -Il s'avère que le _gradient boosting_ offre des performances prédictives particulièrement élevées. Toutefois, cet avantage incontestable ne doit pas masquer les sérieux inconvénients de cette approche: les algorithmes de _gradient boosting_ comprennent un nombre élevé d'hyperparamètres et sont plus sensibles que les forêts aléatoires aux valeurs de ces hyperparamètres. Par ailleurs, ces algorithmes se caractérisent par un risque élevé de surapprentissage, et sont assez sensibles au bruit statistique et aux éventuelles erreurs sur $y$. Par conséquent, l'usage de ces algorithmes est plus délicat, et l'optimisation de leurs hyperparamètres est une étape importante qui peut prendre un certain temps et demande une bonne connaissance des algorithmes. +Il s'avère que le _gradient boosting_ offre des performances prédictives particulièrement élevées. Toutefois, cet avantage incontestable ne doit pas masquer les sérieux inconvénients de cette approche: les algorithmes de _gradient boosting_ comprennent un nombre élevé d'hyperparamètres et sont plus sensibles que les forêts aléatoires aux valeurs de ces hyperparamètres. Par ailleurs, ces algorithmes se caractérisent par un risque élevé de surapprentissage, et sont assez sensibles au bruit statistique et aux éventuelles erreurs sur la variable-cible. Par conséquent, l'usage de ces algorithmes est plus délicat, et l'optimisation de leurs hyperparamètres est une étape importante qui peut prendre un certain temps et demande une bonne connaissance des algorithmes. Enfin, il est indispensable de disposer d'un jeu de données de test (non utilisées pendant l'entraînement) pour évaluer la qualité d'un modèle de _boosting_. From 49fb36ee64f1a93b9f3df21c6896d0673430ccfd Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Tue, 26 Nov 2024 17:21:14 +0000 Subject: [PATCH 02/39] =?UTF-8?q?Compl=C3=A9ter=20le=20quarto=20de=20l'ext?= =?UTF-8?q?rait=20tout=20r=C3=A9dig=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pdf/partie_toute_redigee.qmd | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pdf/partie_toute_redigee.qmd b/pdf/partie_toute_redigee.qmd index 230834a..951665e 100644 --- a/pdf/partie_toute_redigee.qmd +++ b/pdf/partie_toute_redigee.qmd @@ -50,3 +50,7 @@ functions: {{< include ../chapters/chapter1/1-survol.qmd >}} {{< include ../chapters/chapter1/2-comparaison_GB_RF.qmd >}} +{{< include ../chapters/chapter2/3-random_forest.qmd >}} + +{{< include ../chapters/chapter3/1-preparation_donnees.qmd >}} +{{< include ../chapters/chapter3/2-guide_usage_RF.qmd >}} From 3cdd8ff44bad79de7fa9f198a19c5c2dea5e324a Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Tue, 26 Nov 2024 17:24:53 +0000 Subject: [PATCH 03/39] Refs --- references.bib | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/references.bib b/references.bib index d5c27b2..d885269 100644 --- a/references.bib +++ b/references.bib @@ -314,6 +314,7 @@ @article{louppe2014understanding journal={arXiv preprint arXiv:1407.7502}, year={2014} } + @article{louppe2013understanding, title={Understanding variable importances in forests of randomized trees}, author={Louppe, Gilles and Wehenkel, Louis and Sutera, Antonio and Geurts, Pierre}, @@ -322,6 +323,17 @@ @article{louppe2013understanding year={2013} } +@article{biau2012analysis, + title={Analysis of a random forests model}, + author={Biau, G{\'e}rard}, + journal={The Journal of Machine Learning Research}, + volume={13}, + number={1}, + pages={1063--1095}, + year={2012}, + publisher={JMLR. org} +} + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Utilisation des GAMI pour interpréter les arbres %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% From c0eea7bc6efaa6d105d6f99620cc73f62bb936c7 Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Tue, 26 Nov 2024 17:46:50 +0000 Subject: [PATCH 04/39] Bricoles --- chapters/chapter2/3-random_forest.qmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chapters/chapter2/3-random_forest.qmd b/chapters/chapter2/3-random_forest.qmd index 5653dc2..1ba8a1a 100644 --- a/chapters/chapter2/3-random_forest.qmd +++ b/chapters/chapter2/3-random_forest.qmd @@ -15,7 +15,7 @@ Objectifs: ## Principe de la forêt aléatoire -Les forêts aléatoires reposent sur plusieurs éléments essentiels : +Les forêts aléatoires reposent sur quatre éléments essentiels : - **Les arbres CART**: Les modèles élémentaires sont des arbres CART non élagués, c'est-à-dire autorisés à pousser jusqu'à l'atteinte d'un critère d'arrêt défini en amont. @@ -23,7 +23,7 @@ Les forêts aléatoires reposent sur plusieurs éléments essentiels : - **La sélection aléatoire de caractéristiques (_variables_)** : Lors de la construction d'un arbre, à chaque nœud de celui-ci, un sous-ensemble aléatoire de variables est sélectionné. La meilleure division est ensuite choisie parmi ces caractéristiques aléatoires. -- **L'agrégation des prédictions** : Comme pour le bagging, les prédictions de tous les arbres sont combinées On procède généralement à la moyenne (ou à la médiane) des prédictions dans le cas de la régression, et au vote majoritaire (ou à la moyenne des probabilités prédites pour chaque classe) dans le cas de la classification. +- **L'agrégation des prédictions** : Comme pour le _bagging_, les prédictions de tous les arbres sont combinées. On procède généralement à la moyenne (ou à la médiane) des prédictions dans le cas de la régression, et au vote majoritaire (ou à la moyenne des probabilités prédites pour chaque classe) dans le cas de la classification. ## Pourquoi (et dans quelles situations) la random forest fonctionne: fondements théoriques des forêts aléatoires From d5f1405c4f9b70aaa2681f44b581d221272a49b7 Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Tue, 26 Nov 2024 17:47:00 +0000 Subject: [PATCH 05/39] Reformulation --- chapters/chapter2/3-random_forest.qmd | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/chapters/chapter2/3-random_forest.qmd b/chapters/chapter2/3-random_forest.qmd index 1ba8a1a..5a0f68e 100644 --- a/chapters/chapter2/3-random_forest.qmd +++ b/chapters/chapter2/3-random_forest.qmd @@ -36,10 +36,9 @@ L'agrégation de plusieurs arbres permet de réduire la variance globale du mod ### Convergence et limite théorique au surapprentissage -Les forêts aléatoires sont très performantes en pratique, mais la question de leur convergence vers une solution optimale lorsque la taille de l'échantillon tend vers l'infini reste ouverte (Loupes 2014). Plusieurs travaux théoriques ont toutefois fourni des preuves de convergence pour des versions simplifiées de l'algorithme (par exemple, Biau 2012). - -Même si la convergence vers le modèle optimal n'est pas encore formellement établie, il est possible de montrer, grâce à la Loi des Grands Nombres, que l'erreur de généralisation de l'ensemble diminue lorsque le **nombre d'arbres** augmente. Cela implique que la forêt aléatoire ne souffre pas d'un surapprentissage (également appelé _overfitting_) croissant avec le nombre d'arbres inclus dans le modèle (l'erreur de généralisation tend à se stabiliser), ce qui la rend particulièrement robuste. +Les forêts aléatoires sont très performantes en pratique, mais il n'est pas prouvé à ce stade qu'elles convergent vers une solution optimale lorsque la taille de l'échantillon tend vers l'infini (@louppe2014understanding). Plusieurs travaux théoriques ont toutefois fourni des preuves de convergence pour des versions simplifiées de l'algorithme (par exemple, @biau2012analysis). +Par ailleurs, il est possible de démontrer que l'erreur de généralisation, c'est-à-dire l'écart entre les prédictions du modèle et les résultats attendus sur des données jamais vues (donc hors de l'échantillon d'entraînement), diminue à mesure que le nombre d'arbres augmente. Autrement dit, la forêt aléatoire ne souffre pas d'un surapprentissage (également appelé _overfitting_) croissant avec le nombre d'arbres. La conséquence pratique de ce résultat est qu'inclure un (trop) grand nombre d'arbres dans le modèle n'en dégrade pas la qualité, ce qui contribue à la rendre particulièrement robuste. ### Facteurs influençant l'erreur de généralisation From 30e7c88820914a646071f9d5e3ea279b51153eb2 Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Tue, 26 Nov 2024 17:47:20 +0000 Subject: [PATCH 06/39] Reformulation --- chapters/chapter2/3-random_forest.qmd | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/chapters/chapter2/3-random_forest.qmd b/chapters/chapter2/3-random_forest.qmd index 5a0f68e..fe2326a 100644 --- a/chapters/chapter2/3-random_forest.qmd +++ b/chapters/chapter2/3-random_forest.qmd @@ -46,25 +46,21 @@ L'erreur de généralisation des forêts aléatoires est influencée par deux fa - **La puissance prédictrice des arbres individuels** : Les arbres doivent être suffisamment prédictifs pour contribuer positivement à l'ensemble, et idéalement sans biais. -- **La corrélation entre les arbres** : Moins les arbres sont corrélés, plus la variance de l'ensemble est réduite. En effet, des arbres fortement corrélés auront tendance à faire des erreurs similaires. La sélection aléatoires des caractéristiques (_variables_) à chaque nœud contribue à réduire cette corrélation, ce qui améliore la performance globale. +- **La corrélation entre les arbres** : Moins les arbres sont corrélés, plus la variance de l'ensemble est réduite, car leurs erreurs tendront à se compenser. Inversement, des arbres fortement corrélés auront tendance à faire des erreurs similaires, donc agréger un grand nombre d'arbres n'apportera pas grand chose. -La variance de la prédiction d'une forêt aléatoire en régression (où l'objectif est de minimiser l'erreur quadratique moyenne) peut être exprimée par : +On peut mettre en évidence ces deux facteurs dans le cas d'une forêt aléatoire utilisée pour une tâche de régression (où l'objectif est de minimiser l'erreur quadratique moyenne). Dans ce cas, la variance de la prédiction du modèle peut être décomposée de la façon suivante: $$ \text{Var}(\hat{f}(x)) = \rho(x) \sigma(x)^2 + \frac{1 - \rho(x)}{M} \sigma(x)^2 $$ -Où $\rho(x)$ est le coefficient de corrélation moyen entre les arbres individuels, $\sigma(x)^2$ est la variance d'un arbre individuel, $M$ est le nombre d'arbres dans la forêt. - -Cette décomposition fait apparaître l'influence de la corrélation entre les arbres sur les performance de la forêt aléatoire: - -- **Si $\rho(x)$ est élevée** (forte corrélation entre les arbres) : la première composante $\rho \sigma^2$ domine et la réduction de variance est moindre lorque le nombre d'arbres augmente. -- **Si $\rho(x)$ est faible** (faible corrélation entre les arbres) : la seconde composante $\frac{1 - \rho}{M} \sigma^2$ et la variance est davantage réduite avec l'augmentation du nombre d'arbres $M$. - -L'objectif des forêts aléatoires est donc de minimiser la corrélation entre les arbres tout en maximisant leur capacité à prédire correctement, ce qui permet de réduire la variance globale sans augmenter excessivement le biais. +où $\rho(x)$ est le coefficient de corrélation moyen entre les arbres individuels, $\sigma(x)^2$ est la variance d'un arbre individuel, $M$ est le nombre d'arbres dans la forêt. Cette décomposition fait apparaître l'influence de la corrélation entre les arbres sur les performance de la forêt aléatoire: +- **Si $\rho(x)$ est proche de 1** (forte corrélation entre les arbres) : la première composante $\rho \sigma^2$ domine et la réduction de variance est moindre lorsque le nombre d'arbres augmente. +- **Si $\rho(x)$ est proche de 0** (faible corrélation entre les arbres) : la seconde composante $\frac{1 - \rho}{M} \sigma^2$ et la variance est davantage réduite avec l'augmentation du nombre d'arbres $M$. +L'objectif de l'entraînement des forêts aléatoires est donc de minimiser la corrélation entre les arbres tout en maximisant leur capacité à prédire correctement, ce qui permet de réduire la variance globale sans augmenter excessivement le biais. La sélection aléatoires des caractéristiques (_features_) à chaque nœud joue un rôle majeur dans cet arbitrage entre puissance prédictive des arbres et corrélation entre arbres. ## Les hyper-paramètres clés des forêts aléatoires From 1b814fb6401a951a14caec5d3997c3d72e779d3e Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Tue, 26 Nov 2024 17:47:59 +0000 Subject: [PATCH 07/39] =?UTF-8?q?Reformulation=20partie=20hyperparam=C3=A8?= =?UTF-8?q?tres?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chapters/chapter2/3-random_forest.qmd | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/chapters/chapter2/3-random_forest.qmd b/chapters/chapter2/3-random_forest.qmd index fe2326a..bd04e29 100644 --- a/chapters/chapter2/3-random_forest.qmd +++ b/chapters/chapter2/3-random_forest.qmd @@ -64,23 +64,19 @@ L'objectif de l'entraînement des forêts aléatoires est donc de minimiser la c ## Les hyper-paramètres clés des forêts aléatoires -- **Nombre d'arbres** : plus le nombre d'arbes est élevé, plus la variance est réduite, jusqu'à un certain point de saturation. Souvent, quelques centaines d'arbres suffisent à stabiliser les performances des modèles. Au-delà, les gains de performance sont marginaux par rapport au temps de calcul nécessaire. +- **Nombre d'arbres**: les performances croissent avec le nombre d'arbres, jusqu'à un certain seuil à partir duquel elles se stabilisent. Souvent, quelques centaines d'arbres suffisent à stabiliser les performances des modèles. Au-delà, les gains de performance sont marginaux par rapport au temps de calcul nécessaire. -- **Méthode d'échantillonnage** : les échantillons bootstrap peuvent être construits par tirage aléatoire **avec** ou **sans** remise. +- **Méthode d'échantillonnage**: les échantillons _bootstrap_ peuvent être construits par tirage aléatoire **avec** ou **sans** remise. -- **Nombre de variables considérées à chaque noeud**: cet hyperparamètre détermine le nombre de variables prédictives sélectionnées aléatoirement à chaque nœud lors de la construction des arbres. +- **Taux d'échantillonnage**: cet hyperparamètre contrôle la taille des échantillons _bootstrap_ utilisés pour entraîner les arbres. -Un nombre plus faible de variables candidates conduit à des arbres plus diversifiés et donc moins corrélés entre eux. Cette réduction de la corrélation entre les arbres est bénéfique pour l'agrégation finale, car elle permet de réduire la variance globale du modèle, améliorant ainsi sa capacité de généralisation. Cependant, cela peut entraîner une diminution de la qualité prédictive des arbres individuels, car ils sont parfois contraints de se diviser sur des variables moins pertinentes. - -À l'inverse, un nombre plus élevé de variables candidates améliore la précision des arbres individuels en leur permettant d'utiliser des variables plus informatives, mais accroît leur corrélation (les mêmes variables ayant tendance à être sélectionnées dans tous les arbres), limitant ainsi les bénéfices de l'agrégation en termes de réduction de variance. Ce phénomène est amplifié si seules quelques variables sont fortement prédictives, car elles dominent les divisions dans la majorité des arbres. +- **Nombre de variables considérées à chaque noeud**: cet hyperparamètre détermine le nombre (ou la proportion) de _features_ sélectionnées aléatoirement à chaque nœud lors de la construction des arbres. Un nombre plus faible conduit à des arbres plus diversifiés et donc moins corrélés entre eux, mais peut entraîner une diminution de la qualité prédictive des arbres individuels, car ils sont parfois contraints de se diviser sur des variables moins pertinentes. Inversement, un nombre plus élevé améliore la performance des arbres individuels en leur permettant d'utiliser des variables plus informatives, mais accroît leur corrélation (les mêmes variables ayant tendance à être sélectionnées dans tous les arbres), limitant ainsi les bénéfices de l'agrégation en termes de réduction de variance. Ce phénomène est amplifié si seules quelques variables sont fortement prédictives, car elles dominent les divisions dans la majorité des arbres. - **Nombre minimal d'observations dans une feuille** : Un nombre d'observation minimal peut réduire le surapprentissage et surtout le temps de calcul. - **Critère de division des noeuds** (_splitting rule_) : -- **Nombre d'observations tirées pour construire un arbre** : - - **Profondeur maximale des arbres** : en général, il est conseillé de laisser les arbres se développer pleinement (sans élagage) pour profiter de la réduction de variance par agrégation. Limiter la profondeur des arbres peut toutefois réduire le risque de surapprentissage et diminuer le temps de calcul. From 6f1af323ce24b9bd0c0f9d3cb151074fea1e7c1e Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Tue, 26 Nov 2024 17:49:09 +0000 Subject: [PATCH 08/39] Titre --- chapters/chapter2/3-random_forest.qmd | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/chapters/chapter2/3-random_forest.qmd b/chapters/chapter2/3-random_forest.qmd index bd04e29..9a5df11 100644 --- a/chapters/chapter2/3-random_forest.qmd +++ b/chapters/chapter2/3-random_forest.qmd @@ -25,8 +25,7 @@ Les forêts aléatoires reposent sur quatre éléments essentiels : - **L'agrégation des prédictions** : Comme pour le _bagging_, les prédictions de tous les arbres sont combinées. On procède généralement à la moyenne (ou à la médiane) des prédictions dans le cas de la régression, et au vote majoritaire (ou à la moyenne des probabilités prédites pour chaque classe) dans le cas de la classification. - -## Pourquoi (et dans quelles situations) la random forest fonctionne: fondements théoriques des forêts aléatoires +## Pourquoi les forêts aléatoires sont-elles performantes? Les propriétés théoriques des forêts aléatoires permettent de comprendre pourquoi (et dans quelles situations) elles sont particulièrement robustes et performantes. From fa79d411012ff1552e435eade43e735ac70c9e90 Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Tue, 26 Nov 2024 17:49:47 +0000 Subject: [PATCH 09/39] Commenter une section --- chapters/chapter2/3-random_forest.qmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chapters/chapter2/3-random_forest.qmd b/chapters/chapter2/3-random_forest.qmd index 9a5df11..4aeb955 100644 --- a/chapters/chapter2/3-random_forest.qmd +++ b/chapters/chapter2/3-random_forest.qmd @@ -61,7 +61,7 @@ où $\rho(x)$ est le coefficient de corrélation moyen entre les arbres individu L'objectif de l'entraînement des forêts aléatoires est donc de minimiser la corrélation entre les arbres tout en maximisant leur capacité à prédire correctement, ce qui permet de réduire la variance globale sans augmenter excessivement le biais. La sélection aléatoires des caractéristiques (_features_) à chaque nœud joue un rôle majeur dans cet arbitrage entre puissance prédictive des arbres et corrélation entre arbres. -## Les hyper-paramètres clés des forêts aléatoires + ## Evaluation des performances du modèle et optimisation des hyper-paramètres From 13c2ec3a7431b77891908d16d165ffbafce862cf Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Tue, 26 Nov 2024 17:49:59 +0000 Subject: [PATCH 10/39] Ponctuation --- chapters/chapter2/3-random_forest.qmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chapters/chapter2/3-random_forest.qmd b/chapters/chapter2/3-random_forest.qmd index 4aeb955..553925b 100644 --- a/chapters/chapter2/3-random_forest.qmd +++ b/chapters/chapter2/3-random_forest.qmd @@ -6,7 +6,7 @@ La méthode s’appuie sur la technique du _bagging_, qui consiste à entraîner Objectifs: -- comprendre le principe et les propriétés fondamentales des forêts aléatoires afin de comprendre comment elles améliorent les performances des modèles +- comprendre le principe et les propriétés fondamentales des forêts aléatoires afin de comprendre comment elles améliorent les performances des modèles; - Apprendre les étapes de construction d'une forêt aléatoire : échantillonnage bootstrap, sélection de variables, partitions, prédiction, évaluation, interprétation From 3e8154d6ff2fa39cf1b134dffcb25d436c30bb10 Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Tue, 26 Nov 2024 18:59:24 +0000 Subject: [PATCH 11/39] =?UTF-8?q?Ajouter=20une=20partie=20qui=20explique?= =?UTF-8?q?=20l'entra=C3=AEnement=20d'une=20for=C3=AAt=20al=C3=A9atoire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chapters/chapter2/3-random_forest.qmd | 91 +++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/chapters/chapter2/3-random_forest.qmd b/chapters/chapter2/3-random_forest.qmd index 553925b..0877853 100644 --- a/chapters/chapter2/3-random_forest.qmd +++ b/chapters/chapter2/3-random_forest.qmd @@ -25,6 +25,97 @@ Les forêts aléatoires reposent sur quatre éléments essentiels : - **L'agrégation des prédictions** : Comme pour le _bagging_, les prédictions de tous les arbres sont combinées. On procède généralement à la moyenne (ou à la médiane) des prédictions dans le cas de la régression, et au vote majoritaire (ou à la moyenne des probabilités prédites pour chaque classe) dans le cas de la classification. + +## Comment construit-on une forêt aléatoire? + +L'entraînement d'une forêt aléatoire est similaire à celui du _bagging_ et se résume comme suit: + +- Le nombre d'arbres à construire est défini _a priori_. +- Pour chaque arbre, on effectue les étapes suivantes: + - Générer un échantillon _bootstrap_ de taille fixe à partir du jeu de données. + - Construire récursivement un arbre de décision à partir de cet échantillon: + - À chaque nœud de l'arbre, un sous-ensemble de _features_ est sélectionné aléatoirement. + - Déterminer quel couple (variable, valeur) définit la règle de décision qui divise la population du nœud en deux sous-groupes les plus homogènes possibles + - Créer des nœuds enfants. + - Arrêter la croissance de l'arbre selon des critères d'arrêt fixés _a priori_. + +Pour construire la prédiction de la forêt aléatoire, on agrège les arbres selon une méthode qui dépend du problème modélisé: + - Régression: la prédiction finale est la moyenne des prédictions de tous les arbres. + - Classification: chaque arbre vote pour une classe, et la classe majoritaire est retenue. + +Les principaux hyper-paramètres des forêts aléatoires sont donc les suivants: le nombre d'arbres, la méthode et le taux d'échantillonnage, le nombre (ou la proportion) de variables considérées à chaque nœud, le critère de division des nœuds (ou mesure d'hétérogénéité), et les critères d'arrêt (notamment la profondeur de l'arbre, le nombre minimal d'observations dans une feuille terminale, et le nombre minimal d'observations qu'un nœud doit comprendre pour être divisé en deux). + + + + + + ## Pourquoi les forêts aléatoires sont-elles performantes? Les propriétés théoriques des forêts aléatoires permettent de comprendre pourquoi (et dans quelles situations) elles sont particulièrement robustes et performantes. From d384b8dd25d9213889690d8e65115d806b93d8ea Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Tue, 26 Nov 2024 19:01:58 +0000 Subject: [PATCH 12/39] Niveau de plan --- chapters/chapter3/2-guide_usage_RF.qmd | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/chapters/chapter3/2-guide_usage_RF.qmd b/chapters/chapter3/2-guide_usage_RF.qmd index 5c62302..0c28d54 100644 --- a/chapters/chapter3/2-guide_usage_RF.qmd +++ b/chapters/chapter3/2-guide_usage_RF.qmd @@ -1,9 +1,9 @@ -## Guide d'entraînement des forêts aléatoires +# Guide d'entraînement des forêts aléatoires Cette section rassemble et synthétise des recommandations sur l'entraînement des forêts aléatoires disponibles dans la littérature, en particulier dans @probst2019hyperparameters. -### Quelle implémentation utiliser? +## Quelle implémentation utiliser? Il existe de multiples implémentations des forêts aléatoires. Le présent document présente et recommande l'usage de deux implémentations de référence: le _package_ `R` `ranger` et le _package_ `Python` `scikit-learn` pour leur rigueur, leur efficacité et leur simplicité d'utilisation. Il est à noter qu'il est possible d'entraîner des forêts aléatoires avec les algorithmes `XGBoost` et `LightGBM`, mais il s'agit d'un usage avancé qui n'est pas recommandé en première approche. Cette approche est présentée dans la partie __REFERENCE A LA PARTIE USAGE AVANCE__. @@ -25,7 +25,7 @@ Le processus pour construire une Random Forest se résume comme suit: - Classification : chaque arbre vote pour une classe, et la classe majoritaire est retenue. --> -### Les hyperparamètres clés des forêts aléatoires +## Les hyperparamètres clés des forêts aléatoires Cette section décrit en détail les principaux hyperparamètres des forêts aléatoires listés dans le tableau `@tbl-hyp-rf`{=typst}. Les noms des hyperparamètres utilisés sont ceux figurant dans le _package_ `R` `ranger`, et dans le _package_ `Python` `scikit-learn`. Il arrive qu'ils portent un nom différent dans d'autres implémentations des _random forests_, mais il est généralement facile de s'y retrouver en lisant attentivement la documentation. @@ -97,7 +97,7 @@ Par défaut, cette valeur est fréquemment fixée à $\sqrt{p}$ pour les problè - Le __critère de choix de la règle de division des noeuds intermédiaires__: la plupart des implémentations des forêts aléatoires retiennent par défaut l'impureté de Gini pour la classification et la variance pour la régression, même si d'autres critères de choix ont été proposés dans la littérature (p-value dans les forêts d'inférence conditionnelle, arbres extrêmement randomisés, etc.). Chaque règle présente des avantages et des inconvénients, notamment en termes de biais de sélection des variables et de vitesse de calcul. A ce stade, aucun critère de choix ne paraît systématiquement supérieur aux autres en matière de performance. Modifier cet hyperparamètre relève d'un usage avancé des forêts aléatoires. Le lecteur intéressé pourra se référer à la discussion détaillée dans @probst2019hyperparameters. -### Comment entraîner une forêt aléatoire? +## Comment entraîner une forêt aléatoire? Les forêts aléatoires nécessitent généralement moins d’optimisation que d’autres modèles de _machine learning_, car leurs performances varient relativement peu en fonction des hyperparamètres. Les valeurs par défaut fournissent souvent des résultats satisfaisants, ce qui réduit le besoin d'optimisation intensive. Cependant, un ajustement précis des hyperparamètres peut apporter des gains de performance, notamment sur des jeux de données complexes. @@ -106,7 +106,7 @@ Comme indiqué dans la partie __REFERENCE A AJOUTER__, la performance prédictiv Il existe plusieurs méthodes permettant d'optimiser simultanément plusieurs hyperparamètres: la recherche par grille, la recherche aléatoire et l'optimisation basée sur modèle séquentiel (SMBO). -#### Première approche exploratoire +### Première approche exploratoire Voici une procédure simple pour entraîner rapidement une forêt aléatoire. Elle ne garantit pas l'obtention d'un modèle optimal, mais elle est lisible et permet d'obtenir rapidement un modèle raisonnablement performant. @@ -116,7 +116,7 @@ Voici une procédure simple pour entraîner rapidement une forêt aléatoire. El - __Ajuster le nombre de variables candidates et le taux d'échantillonnage__: optimiser ces deux hyperparamètres grâce à une méthode de _grid search_ évaluée par une approche de validation-croisée. - __Evaluation du modèle final__: mesurer la performance du modèle final soit avec l'approche Out-of-Bag (OOB), soit avec un ensemble de test. Il est souvent instructif de comparer les performances du modèle final et du modèle entraîné avec les valeurs des hyperparamètres par défaut. -#### Approche plus avancée +### Approches plus avancées Lorsque l’espace des hyperparamètres est large ou que les performances initiales sont insuffisantes, adopter des méthodes avancées comme l'ptimisation basée sur un modèle séquentiel (SMBO). En `R`, il existe plusieurs implémentations d'appuyant sur cette méthode: `tuneRF` (limité à l’optimisation de `mtry`), tuneRanger (optimise simultanément `mtry`, node size, et sample size). La méthode SMBO est généralement la plus performante, mais demande un temps de calcul plus important. @@ -125,19 +125,19 @@ Il est également possible de remplacer les critères classiques (le taux d'erre Pour gérer la contrainte computationnelle, il est possible de commencer par utiliser des échantillons réduits pour les étapes exploratoires, puis d'augmenter la taille de l'échantillon pour les tests finaux. -#### Classification ordonnée versus non ordonnée + -### Mesurer l'importance des variables +## Mesurer l'importance des variables Les méthodes classiques d'évaluation de l'importance des variables, telles que l'indice de Gini (Mean Decrease in Impurity - MDI) et l'importance par permutation (Mean Decrease Accuracy - MDA), peuvent produire des résultats biaisés dans certaines situations (@strobl2007bias, @benard2022mda, @benard2022shaff). Notamment, lorsque les variables prédictives sont fortement corrélées, présentent des échelles de mesure différentes ou possèdent un nombre variable de catégories, ces méthodes peuvent surestimer l'importance de certaines variables. Par exemple, les variables avec un grand nombre de catégories ou des échelles continues étendues peuvent être artificiellement privilégiées, même si leur contribution réelle à la prédiction est limitée. En pratique, il est recommandé d'utiliser des méthodes d'importance des variables moins sensibles aux biais, comme les CIF ou la Sobol-MDA. Les valeurs de Shapley, issues de la théorie des jeux, sont également une alternative intéressante. Elles attribuent à chaque variable une contribution proportionnelle à son impact sur la prédiction. Cependant, leur calcul est souvent complexe et coûteux en ressources computationnelles, surtout en présence de nombreuses variables. Des méthodes comme SHAFF (SHApley eFfects via random Forests) ont été développées pour estimer efficacement ces valeurs, même en présence de dépendances entre variables. -On conseil l'utilisation de trois implémentations pour comparer l'importances des variables d'une forêt aléatoire: +On conseille l'utilisation de trois implémentations pour comparer l'importances des variables d'une forêt aléatoire: - Pour la MDI: l'algorithme CIF proposé par @strobl2007bias et implémenté en R From 8136d4ef99a337699ec263b7d593c05a13bfae9a Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Tue, 26 Nov 2024 19:02:02 +0000 Subject: [PATCH 13/39] crossref --- chapters/chapter2/3-random_forest.qmd | 2 +- chapters/chapter3/2-guide_usage_RF.qmd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/chapters/chapter2/3-random_forest.qmd b/chapters/chapter2/3-random_forest.qmd index 0877853..ec0d818 100644 --- a/chapters/chapter2/3-random_forest.qmd +++ b/chapters/chapter2/3-random_forest.qmd @@ -43,7 +43,7 @@ Pour construire la prédiction de la forêt aléatoire, on agrège les arbres se - Régression: la prédiction finale est la moyenne des prédictions de tous les arbres. - Classification: chaque arbre vote pour une classe, et la classe majoritaire est retenue. -Les principaux hyper-paramètres des forêts aléatoires sont donc les suivants: le nombre d'arbres, la méthode et le taux d'échantillonnage, le nombre (ou la proportion) de variables considérées à chaque nœud, le critère de division des nœuds (ou mesure d'hétérogénéité), et les critères d'arrêt (notamment la profondeur de l'arbre, le nombre minimal d'observations dans une feuille terminale, et le nombre minimal d'observations qu'un nœud doit comprendre pour être divisé en deux). +Les principaux hyper-paramètres des forêts aléatoires (détaillés dans la section @sec-guide-rf) sont les suivants: le nombre d'arbres, la méthode et le taux d'échantillonnage, le nombre (ou la proportion) de variables considérées à chaque nœud, le critère de division des nœuds (ou mesure d'hétérogénéité), et les critères d'arrêt (notamment la profondeur de l'arbre, le nombre minimal d'observations dans une feuille terminale, et le nombre minimal d'observations qu'un nœud doit comprendre pour être divisé en deux). - - - ## Pourquoi les forêts aléatoires sont-elles performantes? Les propriétés théoriques des forêts aléatoires permettent de comprendre pourquoi (et dans quelles situations) elles sont particulièrement robustes et performantes. @@ -227,11 +224,7 @@ Il s'agit d'un cas particulier où le nombre de sous-échantillons est égal à L'estimation Out-of-Bag (OOB) et la validation croisée sont deux méthodes clés pour optimiser les hyper-paramètres d'une forêt aléatoire. Les deux approches permettent de comparer les performances obtenues pour différentes combinaisons d'hyper-paramètres et de sélectionner celles qui maximisent les performances prédictives, l'OOB étant souvent plus rapide et moins coûteuse, tandis que la validation croisée est plus fiable dans des situations où le surapprentissage est un risque important (@probst2019hyperparameters). -Il convient néanmoins de mettre en place une stratégie d'optimisation des hyperparamètres. Plusieurs stratégies existent pour y parvenir, les principales sont exposées dans ce qui suit. - -Il convient de noter que les implémentations "clés en main" en R ou Python ne permettent en général d'optimiser que les hyper-paramètres qui influent le plus sur la performance du modèle. Il s'agit généralement de mtry (nombre de variables sélectionnées aléatoirement à chaque nœud), la taille minimale des nœuds (nodesize ou min_node_size), et la taille de l'échantillon utilisé pour construire chaque arbre (sample size). - - +Il convient de définir une stratégie d'optimisation des hyperparamètres pour ne pas perdre de temps à tester trop de jeux d'hyperparamètres. Plusieurs stratégies existent pour y parvenir, les principales sont exposées dans la section @sec-guide-rf. Les implémentations des forêts aléatoires disponibles en `R` et en Python permettent d'optimiser aisément les principaux hyper-paramètres des forêts aléatoires. #### Méthodes de recherche exhaustives From 0ecd496c0e55277249cdba84b2839afa52808f9b Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Tue, 26 Nov 2024 19:20:32 +0000 Subject: [PATCH 18/39] WIP --- chapters/chapter2/3-random_forest.qmd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/chapters/chapter2/3-random_forest.qmd b/chapters/chapter2/3-random_forest.qmd index b3b894f..bd662fa 100644 --- a/chapters/chapter2/3-random_forest.qmd +++ b/chapters/chapter2/3-random_forest.qmd @@ -124,9 +124,9 @@ L'agrégation de plusieurs arbres permet de réduire la variance globale du mod ### Convergence et limite théorique au surapprentissage -Les forêts aléatoires sont très performantes en pratique, mais il n'est pas prouvé à ce stade qu'elles convergent vers une solution optimale lorsque la taille de l'échantillon tend vers l'infini (@louppe2014understanding). Plusieurs travaux théoriques ont toutefois fourni des preuves de convergence pour des versions simplifiées de l'algorithme (par exemple, @biau2012analysis). +Bien qu'elle s'avèrent très performantes en pratique, __il n'est pas prouvé à ce stade que les forêts aléatoires convergent vers une solution optimale__ lorsque la taille de l'échantillon tend vers l'infini (@louppe2014understanding). Plusieurs travaux théoriques ont toutefois fourni des preuves de convergence pour des versions simplifiées de l'algorithme (par exemple, @biau2012analysis). -Par ailleurs, il est possible de démontrer que l'erreur de généralisation, c'est-à-dire l'écart entre les prédictions du modèle et les résultats attendus sur des données jamais vues (donc hors de l'échantillon d'entraînement), diminue à mesure que le nombre d'arbres augmente. Autrement dit, la forêt aléatoire ne souffre pas d'un surapprentissage (également appelé _overfitting_) croissant avec le nombre d'arbres. La conséquence pratique de ce résultat est qu'inclure un (trop) grand nombre d'arbres dans le modèle n'en dégrade pas la qualité, ce qui contribue à la rendre particulièrement robuste. +Par ailleurs, une propriété importante des forêts aléatoires démontrée par @breiman2001random est que leur erreur de généralisation, c'est-à-dire l'écart entre les prédictions du modèle et les résultats attendus sur des données jamais vues (donc hors de l'échantillon d'entraînement), diminue à mesure que le nombre d'arbres augmente et converge vers une valeur constante. Autrement dit, __la forêt aléatoire ne souffre pas d'un surapprentissage croissant avec le nombre d'arbres__. La conséquence pratique de ce résultat est qu'inclure un (trop) grand nombre d'arbres dans le modèle n'en dégrade pas la qualité, ce qui contribue à la rendre particulièrement robuste. En revanche, une forêt aléatoire peut souffrir de surapprentissage si ses autres hyperparamètres sont mal choisis (des arbres trop profonds par exemple). ### Facteurs influençant l'erreur de généralisation @@ -222,7 +222,7 @@ Il s'agit d'un cas particulier où le nombre de sous-échantillons est égal à ### Choix des hyper-paramètres du modèle -L'estimation Out-of-Bag (OOB) et la validation croisée sont deux méthodes clés pour optimiser les hyper-paramètres d'une forêt aléatoire. Les deux approches permettent de comparer les performances obtenues pour différentes combinaisons d'hyper-paramètres et de sélectionner celles qui maximisent les performances prédictives, l'OOB étant souvent plus rapide et moins coûteuse, tandis que la validation croisée est plus fiable dans des situations où le surapprentissage est un risque important (@probst2019hyperparameters). +L'estimation Out-of-Bag (OOB) et la validation croisée sont deux méthodes clés pour optimiser les hyper-paramètres d'une forêt aléatoire. Les deux approches permettent de comparer les performances obtenues pour différentes combinaisons d'hyper-paramètres et de sélectionner celles qui maximisent les performances prédictives, l'OOB étant souvent plus rapide et moins coûteuse, tandis que la validation croisée est plus fiable dans des situations où le surapprentissage est un risque important (@probst2019hyperparameters). Il convient de définir une stratégie d'optimisation des hyperparamètres pour ne pas perdre de temps à tester trop de jeux d'hyperparamètres. Plusieurs stratégies existent pour y parvenir, les principales sont exposées dans la section @sec-guide-rf. Les implémentations des forêts aléatoires disponibles en `R` et en Python permettent d'optimiser aisément les principaux hyper-paramètres des forêts aléatoires. From bfcae958568abc5b45c646ca87e1aa29afbc6fa9 Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Tue, 26 Nov 2024 19:22:21 +0000 Subject: [PATCH 19/39] WIP --- chapters/chapter2/3-random_forest.qmd | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/chapters/chapter2/3-random_forest.qmd b/chapters/chapter2/3-random_forest.qmd index bd662fa..e83be12 100644 --- a/chapters/chapter2/3-random_forest.qmd +++ b/chapters/chapter2/3-random_forest.qmd @@ -39,7 +39,7 @@ L'entraînement d'une forêt aléatoire est similaire à celui du _bagging_ et s - Créer les deux nœuds-enfants à partir de cette règle de décision. - Arrêter la croissance de l'arbre selon des critères d'arrêt fixés _a priori_. -Pour construire la prédiction de la forêt aléatoire, on agrège les arbres selon une méthode qui dépend du problème modélisé: +Pour construire la prédiction de la forêt aléatoire une fois celle-ci entraînée, on agrège les arbres selon une méthode qui dépend du problème modélisé: - Régression: la prédiction finale est la moyenne des prédictions de tous les arbres. - Classification: chaque arbre vote pour une classe, et la classe majoritaire est retenue. @@ -189,11 +189,11 @@ L'estimation **Out-of-Bag (OOB)** est une méthode particulièrement efficace po - **Approximation de l'erreur de généralisation** : L'erreur OOB est considérée comme une bonne approximation de l'erreur de généralisation, comparable à celle obtenue par une validation croisée 10-fold. -### Estimation de l'erreur par cross-validation +### Estimation de l'erreur par validation croisée -La validation croisée est une technique d'évaluation couramment utilisée en apprentissage automatique pour estimer la capacité d'un modèle à généraliser les prédictions à de nouvelles données. Bien que l'estimation Out-of-Bag (OOB) soit généralement suffisante pour les forêts aléatoires, la validation croisée permet d'obtenir une évaluation plus robuste, car moins sensible à l'échantillon d'entraînement, notamment sur des jeux de données de petite taille. +La validation croisée est une technique d'évaluation couramment utilisée en apprentissage automatique pour estimer la capacité d'un modèle à généraliser les prédictions à de nouvelles données. Bien que l'évaluation par l'erreur _Out-of-Bag_ (OOB) soit généralement suffisante pour les forêts aléatoires, la validation croisée permet d'obtenir une évaluation plus robuste, car moins sensible à l'échantillon d'entraînement, notamment sur des jeux de données de petite taille. -Concrètement, le jeu de donné est divisé en $k$ sous-ensembles, un modèle est entraîné sur k-1 sous-ensembles et testé sur le sous-ensemble restant. L'opération est répétée k-fois de manière à ce que chaque observation apparaisse au moins une fois dans l'échantillon test. L'erreur est ensuite moyennée sur l'ensemble des échantillons test. +Concrètement, le jeu de donné est divisé en $k$ sous-ensembles, un modèle est entraîné sur $k-1$ sous-ensembles et testé sur le sous-ensemble restant. L'opération est répétée $k$ fois de manière à ce que chaque observation apparaisse au moins une fois dans l'échantillon test. L'erreur est ensuite moyennée sur l'ensemble des échantillons test. **Procédure de validation croisée**: From 52b1c2d321d6f9b57905dbf710ab8299df42a3df Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Wed, 27 Nov 2024 09:33:18 +0000 Subject: [PATCH 20/39] crossref --- chapters/chapter2/2-bagging.qmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chapters/chapter2/2-bagging.qmd b/chapters/chapter2/2-bagging.qmd index 8d8d228..ea1fb6a 100644 --- a/chapters/chapter2/2-bagging.qmd +++ b/chapters/chapter2/2-bagging.qmd @@ -1,4 +1,4 @@ -# Le bagging +# Le bagging {#sec-bagging-detail} Le bagging, ou "bootstrap aggregating", est une méthode ensembliste qui vise à améliorer la stabilité et la précision des algorithmes d'apprentissage automatique en agrégeant plusieurs modèles (@breiman1996bagging). Chaque modèle est entraîné sur un échantillon distinct généré par une technique de rééchantillonnage (_bootstrap_). Ces modèles sont ensuite combinés pour produire une prédiction agrégée, souvent plus robuste et généralisable que celle obtenue par un modèle unique. From a303f0292eca2245f67b11986c2042a656670ac5 Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Wed, 27 Nov 2024 09:33:57 +0000 Subject: [PATCH 21/39] Reformulation --- chapters/chapter2/3-random_forest.qmd | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/chapters/chapter2/3-random_forest.qmd b/chapters/chapter2/3-random_forest.qmd index e83be12..c5052e4 100644 --- a/chapters/chapter2/3-random_forest.qmd +++ b/chapters/chapter2/3-random_forest.qmd @@ -1,9 +1,8 @@ -# La forêt aléatoire +# La forêt aléatoire {#sec-rf-detail} -La forêt aléatoire (_random forests_) est une méthode ensembliste puissante, largement utilisée pour les tâches de classification et de régression. Elle combine la simplicité des arbres de décision avec la puissance de l'agrégation pour améliorer les performances prédictives et réduire le risque de surapprentissage (_overfitting_). - -La méthode s’appuie sur la technique du _bagging_, qui consiste à entraîner chaque arbre sur un échantillon (_bootstrap_) tiré au hasard à partir du jeu de données initial. Elle introduit un degré supplémentaire de randomisation au moment de la construction d'un arbre, puisqu'à chaque nouvelle division (_noeud_), un sous-ensemble de variables sur lequel sera fondé le critère de séparation est **sélectionné aléatoirement**. Cette randomisation supplémentaire **réduit la corrélation** entre les arbres, ce qui permet de diminuer la variance des prédiction du modèle agrégé. +La forêt aléatoire (_random forests_) est une méthode ensembliste puissante, largement utilisée pour les tâches de classification et de régression. Elle combine la simplicité des arbres de décision et l'échantillonnage des observations et des variables avec la puissance de l'agrégation pour améliorer les performances prédictives et réduire le risque de surapprentissage (_overfitting_). + ## Principe de la forêt aléatoire +La forêt aléatoire est une extension du _bagging_, présenté dans la section @sec-bagging-detail. Elle introduit un niveau supplémentaire de randomisation dans la construction des arbres, puisqu'à chaque nouvelle division (_noeud_), le critère de séparation est choisi en considérant uniuquement un sous-ensemble de variables **sélectionné aléatoirement**. Cette randomisation supplémentaire **réduit la corrélation** entre les arbres, ce qui permet de diminuer la variance des prédiction du modèle agrégé. + Les forêts aléatoires reposent sur quatre éléments essentiels : - **Les arbres CART**: Les modèles élémentaires sont des arbres CART non élagués, c'est-à-dire autorisés à pousser jusqu'à l'atteinte d'un critère d'arrêt défini en amont. @@ -28,7 +29,7 @@ Les forêts aléatoires reposent sur quatre éléments essentiels : ## Comment construit-on une forêt aléatoire? -L'entraînement d'une forêt aléatoire est similaire à celui du _bagging_ et se résume comme suit: +L'entraînement d'une forêt aléatoire est très similaire à celui du _bagging_ et se résume comme suit: - Le nombre d'arbres à construire est défini _a priori_. - Pour chaque arbre, on effectue les étapes suivantes: @@ -251,7 +252,7 @@ Voici les étapes clés de cette méthode: ## Interprétation et importance des variables -Les forêts aléatoires sont des modèles d'apprentissage performants, mais leur complexité interne les rend difficiles à interpréter, ce qui leur vaut souvent le qualificatif de "boîtes noires". Comprendre l'influence des variables explicatives sur les prédictions est crucial pour interpréter les résulats et être en mesure d'extraire des connaissances. +Les forêts aléatoires sont des modèles d'apprentissage performants, mais leur complexité interne les rend difficiles à interpréter, ce qui leur vaut souvent le qualificatif de "boîtes noires". Comprendre l'influence des variables explicatives sur les prédictions est crucial pour interpréter les résutlats et être en mesure d'extraire des connaissances. L'objectif des **méthodes d'interprétabilité** (ou d'importance des variables) est d'identifier les variables les plus influentes sur la variable cible, de comprendre les mécanismes prédictifs sous-jacents, et potentiellement d'extraire des règles de décision simples et transparentes. Plusieurs méthodes d'importance des variables existent, mais il est important de comprendre leurs forces et faiblesses. From f74b7c71184cb527a6b22fd250df1f85ed66b05f Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Wed, 27 Nov 2024 09:37:24 +0000 Subject: [PATCH 22/39] Formulations --- chapters/chapter2/3-random_forest.qmd | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/chapters/chapter2/3-random_forest.qmd b/chapters/chapter2/3-random_forest.qmd index c5052e4..ce96bd3 100644 --- a/chapters/chapter2/3-random_forest.qmd +++ b/chapters/chapter2/3-random_forest.qmd @@ -14,15 +14,15 @@ Objectifs: ## Principe de la forêt aléatoire -La forêt aléatoire est une extension du _bagging_, présenté dans la section @sec-bagging-detail. Elle introduit un niveau supplémentaire de randomisation dans la construction des arbres, puisqu'à chaque nouvelle division (_noeud_), le critère de séparation est choisi en considérant uniuquement un sous-ensemble de variables **sélectionné aléatoirement**. Cette randomisation supplémentaire **réduit la corrélation** entre les arbres, ce qui permet de diminuer la variance des prédiction du modèle agrégé. +La forêt aléatoire est une extension du _bagging_, présenté dans la section @sec-bagging-detail. Elle introduit un niveau supplémentaire de randomisation dans la construction des arbres, puisqu'à chaque nouvelle division (_noeud_), le critère de séparation est choisi en considérant uniquement un sous-ensemble de variables **sélectionné aléatoirement**. Cette randomisation supplémentaire **réduit la corrélation** entre les arbres, ce qui permet de diminuer la variance des prédiction du modèle agrégé. -Les forêts aléatoires reposent sur quatre éléments essentiels : +Les forêts aléatoires reposent sur quatre éléments essentiels: - **Les arbres CART**: Les modèles élémentaires sont des arbres CART non élagués, c'est-à-dire autorisés à pousser jusqu'à l'atteinte d'un critère d'arrêt défini en amont. -- **L'échantillonnage bootstrap**: Chaque arbre est construit à partir d'un échantillon aléatoire tiré avec remise du jeu de données d'entraînement. +- **L'échantillonnage _bootstrap_**: Chaque arbre est construit à partir d'un échantillon aléatoire du jeu de données d'entraînement tiré avec remise (ou parfois sans remise). -- **La sélection aléatoire de caractéristiques (_variables_)** : Lors de la construction d'un arbre, à chaque nœud de celui-ci, un sous-ensemble aléatoire de variables est sélectionné. La meilleure division est ensuite choisie parmi ces caractéristiques aléatoires. +- **La sélection aléatoire de variables** : Lors de la construction d'un arbre, à chaque nœud de celui-ci, un sous-ensemble aléatoire de variables est sélectionné. La meilleure division est ensuite choisie parmi ces caractéristiques aléatoires. - **L'agrégation des prédictions** : Comme pour le _bagging_, les prédictions de tous les arbres sont combinées. On procède généralement à la moyenne (ou à la médiane) des prédictions dans le cas de la régression, et au vote majoritaire (ou à la moyenne des probabilités prédites pour chaque classe) dans le cas de la classification. From 78bc51631d83324f28154c115670070fe27f64e4 Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Wed, 27 Nov 2024 10:35:35 +0000 Subject: [PATCH 23/39] Reformulation partie OOB --- chapters/chapter2/3-random_forest.qmd | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/chapters/chapter2/3-random_forest.qmd b/chapters/chapter2/3-random_forest.qmd index ce96bd3..49b6d40 100644 --- a/chapters/chapter2/3-random_forest.qmd +++ b/chapters/chapter2/3-random_forest.qmd @@ -121,7 +121,7 @@ Les propriétés théoriques des forêts aléatoires permettent de comprendre po ### Réduction de la variance par agrégation -L'agrégation de plusieurs arbres permet de réduire la variance globale du modèle, ce qui améliore la stabilité des prédictions. Lorsque les estimateurs sont (faiblement) biaisés mais caractérisés par une variance élevée, l'agrégation permet d'obtenir un estimateur avec un biais similaire mais une variance réduite. La démonstration est présentée dans la section _bagging_. +L'agrégation de plusieurs arbres permet de réduire la variance globale du modèle, ce qui améliore la stabilité des prédictions. Lorsque les estimateurs sont (faiblement) biaisés mais caractérisés par une variance élevée, l'agrégation permet d'obtenir un estimateur avec un biais similaire mais une variance réduite. La démonstration est identique à celle présentée dans la section @sec-bagging-detail. ### Convergence et limite théorique au surapprentissage @@ -174,6 +174,27 @@ L'objectif de l'entraînement des forêts aléatoires est donc de minimiser la c ### Estimation de l'erreur Out-of-Bag (OOB) {#sec-rf-oob} +La forêt aléatoire présente une particularité intéressante et très utile en pratique: __il est possible d'évaluer les performances d'une forêt aléatoire directement à partir des données d'entraînement__, grâce à l'estimation de l'erreur _Out-of-Bag_ (OOB). Cette technique repose sur le fait que chaque arbre est construit à partir d'un échantillon _bootstrap_, c'est-à-dire un échantillon tiré avec remise. Cela implique qu'une part conséquente des observations ne sont pas utilisées pour entraîner un arbre donné. Ces observations laissées de côté forment un **échantillon dit _out-of-bag_**, que l'on peut utiliser pour évaluer la performance de chaque arbre. On peut donc construire pour chaque observation du jeu d'entraînement une prédiction qui agrège uniquement les prédictions des arbres pour lesquels cette observation est _out-of-bag_; cette prédiction n'est pas affectée par le surapprentissage (puisque cette observation n'a jamais été utilisée pour entraîner ces arbres). De cette façon, il est possible d'évaluer correctement la performance de la forêt aléatoire. + +La procédure d'estimation de l'erreur OOB se déroule comme ceci: + +1. **Entraînement de la forêt aléatoire**: la forêt aléatoire est entraînée sur les données d'entraînement selon la procédure détaillée ci-dessus. +2. **Prédiction _out-of-bag_** : Pour chaque observation $(x_i, y_i)$ des données d'entraînement, on calcule la prédiction de tous les arbres pour lesquels elle fait partie de l'échantillon _out-of-bag_. +3. **Agrégation des prédictions** : La prédiction finale est obtenue en agrégeant les prédictions selon la procédure standard détaillée ci-dessus (moyenne pour la régression, vote majoritaire pour la classification). +4. **Calcul de l'erreur OOB** : L'erreur OOB est ensuite calculée en calculant une métrique (précision, rappel, AUC, erreur quadratique moyenne...) qui compare les prédictions avec la variable-cible $y$ sur toutes les observations. + +L'utilisation de l'erreur OOB présente de multiples avantages: + +- **Approximation de l'erreur de généralisation**: L'erreur OOB est en général considérée comme une bonne approximation de l'erreur de généralisation, comparable à celle obtenue par une validation croisée. +- **Pas besoin de jeu de validation séparé** : L'un des principaux avantages de l'erreur OOB est qu'elle ne nécessite pas de réserver une partie des données pour la validation. Cela est particulièrement utile lorsque la taille du jeu de données est limitée, car toutes les données peuvent être utilisées pour l'entraînement tout en ayant une estimation fiable de la performance. Ceci dit, il est malgré tout recommandé de conserver un ensemble de test si la taille des données le permet, car il arrive que l'erreur OOB sous +- **Gain de temps** : Contrairement à la validation croisée qui requiert de réentraîner plusieurs fois le modèle pour un jeu donné d'hyperparamètres, l'erreur OOB ne nécessite qu'un seul entraînement du modèle. Cela induit un gain de temps appréciable lors de l'optimisation des hyperparamètres. + + + ### Estimation de l'erreur par validation croisée From 5a80197fd902e30b29b34c6c03038953a729126e Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Wed, 27 Nov 2024 10:38:25 +0000 Subject: [PATCH 24/39] =?UTF-8?q?D=C3=A9placer=20des=20morceaux?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chapters/chapter2/3-random_forest.qmd | 65 +-------------------- chapters/chapter3/1-preparation_donnees.qmd | 61 +++++++++++++++++++ 2 files changed, 62 insertions(+), 64 deletions(-) diff --git a/chapters/chapter2/3-random_forest.qmd b/chapters/chapter2/3-random_forest.qmd index 49b6d40..2b02c7f 100644 --- a/chapters/chapter2/3-random_forest.qmd +++ b/chapters/chapter2/3-random_forest.qmd @@ -170,9 +170,7 @@ L'objectif de l'entraînement des forêts aléatoires est donc de minimiser la c --> -## Evaluation des performances du modèle et optimisation des hyper-paramètres - -### Estimation de l'erreur Out-of-Bag (OOB) {#sec-rf-oob} +## Evaluation des performances par l'erreur _Out-of-Bag_ (OOB) {#sec-rf-oob} La forêt aléatoire présente une particularité intéressante et très utile en pratique: __il est possible d'évaluer les performances d'une forêt aléatoire directement à partir des données d'entraînement__, grâce à l'estimation de l'erreur _Out-of-Bag_ (OOB). Cette technique repose sur le fait que chaque arbre est construit à partir d'un échantillon _bootstrap_, c'est-à-dire un échantillon tiré avec remise. Cela implique qu'une part conséquente des observations ne sont pas utilisées pour entraîner un arbre donné. Ces observations laissées de côté forment un **échantillon dit _out-of-bag_**, que l'on peut utiliser pour évaluer la performance de chaque arbre. On peut donc construire pour chaque observation du jeu d'entraînement une prédiction qui agrège uniquement les prédictions des arbres pour lesquels cette observation est _out-of-bag_; cette prédiction n'est pas affectée par le surapprentissage (puisque cette observation n'a jamais été utilisée pour entraîner ces arbres). De cette façon, il est possible d'évaluer correctement la performance de la forêt aléatoire. @@ -210,67 +208,6 @@ L'estimation **Out-of-Bag (OOB)** est une méthode particulièrement efficace po - **Estimation directe et efficace** : Contrairement à la validation croisée qui peut être coûteuse en temps de calcul, l'estimation OOB est disponible "gratuitement" pendant la construction des arbres. Cela permet d'évaluer la performance du modèle sans avoir besoin de réentraîner plusieurs fois le modèle et d'optimiser plus rapidement les hyperparamètres. - **Approximation de l'erreur de généralisation** : L'erreur OOB est considérée comme une bonne approximation de l'erreur de généralisation, comparable à celle obtenue par une validation croisée 10-fold. --> - -### Estimation de l'erreur par validation croisée - -La validation croisée est une technique d'évaluation couramment utilisée en apprentissage automatique pour estimer la capacité d'un modèle à généraliser les prédictions à de nouvelles données. Bien que l'évaluation par l'erreur _Out-of-Bag_ (OOB) soit généralement suffisante pour les forêts aléatoires, la validation croisée permet d'obtenir une évaluation plus robuste, car moins sensible à l'échantillon d'entraînement, notamment sur des jeux de données de petite taille. - -Concrètement, le jeu de donné est divisé en $k$ sous-ensembles, un modèle est entraîné sur $k-1$ sous-ensembles et testé sur le sous-ensemble restant. L'opération est répétée $k$ fois de manière à ce que chaque observation apparaisse au moins une fois dans l'échantillon test. L'erreur est ensuite moyennée sur l'ensemble des échantillons test. - - -**Procédure de validation croisée**: - -La validation croisée la plus courante est la validation croisée en k sous-échantillons (_k-fold cross-validation_): - -- **Division des données** : Le jeu de données est divisé en k sous-échantillons égaux, appelés folds. Typiquement, k est choisi entre 5 et 10, mais il peut être ajusté en fonction de la taille des données. - -- **Entraînement et test** : Le modèle est entraîné sur k - 1 sous-échantillons et testé sur le sous-échantillon restant. Cette opération est répétée k fois, chaque sous-échantillon jouant à tour de rôle le rôle de jeu de test. - -- **Calcul de la performance** : Les k performances obtenues (par exemple, l'erreur quadratique moyenne pour une régression, ou l'accuracy (_exactitude_) pour une classification) sont moyennées pour obtenir une estimation finale de la performance du modèle. - - -**Avantages de la validation croisée**: - -- **Utilisation optimale des données** : En particulier lorsque les données sont limitées, la validation croisée maximise l'utilisation de l'ensemble des données en permettant à chaque échantillon de contribuer à la fois à l'entraînement et au test. - -- **Réduction de la variance** : En utilisant plusieurs divisions des données, on obtient une estimation de la performance moins sensible aux particularités d'une seule division. - -Bien que plus coûteuse en termes de calcul, la validation croisée est souvent préférée lorsque les données sont limitées ou lorsque l'on souhaite évaluer différents modèles ou hyperparamètres avec précision. - - -**Leave-One-Out Cross-Validation (LOOCV)** : -Il s'agit d'un cas particulier où le nombre de sous-échantillons est égal à la taille du jeu de données. En d'autres termes, chaque échantillon est utilisé une fois comme jeu de test, et tous les autres échantillons pour l'entraînement. LOOCV fournit une estimation très précise de la performance, mais est très coûteuse en temps de calcul, surtout pour de grands jeux de données. - - -### Choix des hyper-paramètres du modèle - -L'estimation Out-of-Bag (OOB) et la validation croisée sont deux méthodes clés pour optimiser les hyper-paramètres d'une forêt aléatoire. Les deux approches permettent de comparer les performances obtenues pour différentes combinaisons d'hyper-paramètres et de sélectionner celles qui maximisent les performances prédictives, l'OOB étant souvent plus rapide et moins coûteuse, tandis que la validation croisée est plus fiable dans des situations où le surapprentissage est un risque important (@probst2019hyperparameters). - -Il convient de définir une stratégie d'optimisation des hyperparamètres pour ne pas perdre de temps à tester trop de jeux d'hyperparamètres. Plusieurs stratégies existent pour y parvenir, les principales sont exposées dans la section @sec-guide-rf. Les implémentations des forêts aléatoires disponibles en `R` et en Python permettent d'optimiser aisément les principaux hyper-paramètres des forêts aléatoires. - -#### Méthodes de recherche exhaustives - -- **Recherche sur grille** (Grid Search): Cette approche simple explore toutes les combinaisons possibles d'hyperparamètres définis sur une grille. Les paramètres continus doivent être discrétisés au préalable. La méthode est exhaustive mais coûteuse en calcul, surtout pour un grand nombre d'hyperparamètres. - -- **Recherche aléatoire** (Random Search): Plus efficace que la recherche sur grille, cette méthode échantillonne aléatoirement les valeurs des hyperparamètres dans un espace défini. Bergstra et Bengio (2012) ont démontré sa supériorité pour les réseaux neuronaux, et elle est également pertinente pour les forêts aléatoires. La distribution d'échantillonnage est souvent uniforme. - - -#### Optimisation séquentielle/itérative basée sur un modèle (SMBO) - -La méthode SMBO (Sequential model-based optimization) est une approche plus efficace que les précédentes car elle s'appuie sur les résultats des évaluations déjà effectuées pour guider la recherche des prochains hyper-paramètres à tester (@probst2019hyperparameters). - -Voici les étapes clés de cette méthode: - -- Définition du problème: On spécifie une mesure d'évaluation (ex: AUC pour la classification, MSE pour la régression), une stratégie d'évaluation (ex: validation croisée k-fold), et l'espace des hyperparamètres à explorer. - -- Initialisation: échantillonner aléatoirement des points dans l’espace des hyperparamètres et évaluer leurs performances. - -- Boucle itérative : - - Construction d'un modèle de substitution (surrogate model): un modèle de régression (ex: krigeage ou une forêt aléatoire) est ajusté aux données déjà observées. Ce modèle prédit la performance en fonction des hyperparamètres. - - Sélection d'un nouvel hyperparamètre: un critère basé sur le modèle de substitution sélectionne le prochain ensemble d'hyperparamètres à évaluer. Ce critère vise à explorer des régions prometteuses de l'espace des hyperparamètres qui n'ont pas encore été suffisamment explorées. - - Évaluer les points proposés et les ajouter à l’ensemble déjà exploré: la performance du nouvel ensemble d'hyperparamètres est évaluée et ajoutée à l'ensemble des données d'apprentissage du modèle de substitution afin d'orienter les recherches vers de nouveaux hyper-paramètres prometteurs. - - ## Interprétation et importance des variables Les forêts aléatoires sont des modèles d'apprentissage performants, mais leur complexité interne les rend difficiles à interpréter, ce qui leur vaut souvent le qualificatif de "boîtes noires". Comprendre l'influence des variables explicatives sur les prédictions est crucial pour interpréter les résutlats et être en mesure d'extraire des connaissances. diff --git a/chapters/chapter3/1-preparation_donnees.qmd b/chapters/chapter3/1-preparation_donnees.qmd index 8a30eb6..2a90e20 100644 --- a/chapters/chapter3/1-preparation_donnees.qmd +++ b/chapters/chapter3/1-preparation_donnees.qmd @@ -16,3 +16,64 @@ Pas indispensable pour RF, mais faisable. Indispensable pour GB. + +## Evaluation des performances du modèle et optimisation des hyper-paramètres + +### Estimation de l'erreur par validation croisée + +La validation croisée est une technique d'évaluation couramment utilisée en apprentissage automatique pour estimer la capacité d'un modèle à généraliser les prédictions à de nouvelles données. Bien que l'évaluation par l'erreur _Out-of-Bag_ (OOB) soit généralement suffisante pour les forêts aléatoires, la validation croisée permet d'obtenir une évaluation plus robuste, car moins sensible à l'échantillon d'entraînement, notamment sur des jeux de données de petite taille. + +Concrètement, le jeu de donné est divisé en $k$ sous-ensembles, un modèle est entraîné sur $k-1$ sous-ensembles et testé sur le sous-ensemble restant. L'opération est répétée $k$ fois de manière à ce que chaque observation apparaisse au moins une fois dans l'échantillon test. L'erreur est ensuite moyennée sur l'ensemble des échantillons test. + + +**Procédure de validation croisée**: + +La validation croisée la plus courante est la validation croisée en k sous-échantillons (_k-fold cross-validation_): + +- **Division des données** : Le jeu de données est divisé en k sous-échantillons égaux, appelés folds. Typiquement, k est choisi entre 5 et 10, mais il peut être ajusté en fonction de la taille des données. + +- **Entraînement et test** : Le modèle est entraîné sur k - 1 sous-échantillons et testé sur le sous-échantillon restant. Cette opération est répétée k fois, chaque sous-échantillon jouant à tour de rôle le rôle de jeu de test. + +- **Calcul de la performance** : Les k performances obtenues (par exemple, l'erreur quadratique moyenne pour une régression, ou l'accuracy (_exactitude_) pour une classification) sont moyennées pour obtenir une estimation finale de la performance du modèle. + + +**Avantages de la validation croisée**: + +- **Utilisation optimale des données** : En particulier lorsque les données sont limitées, la validation croisée maximise l'utilisation de l'ensemble des données en permettant à chaque échantillon de contribuer à la fois à l'entraînement et au test. + +- **Réduction de la variance** : En utilisant plusieurs divisions des données, on obtient une estimation de la performance moins sensible aux particularités d'une seule division. + +Bien que plus coûteuse en termes de calcul, la validation croisée est souvent préférée lorsque les données sont limitées ou lorsque l'on souhaite évaluer différents modèles ou hyperparamètres avec précision. + + +**Leave-One-Out Cross-Validation (LOOCV)** : +Il s'agit d'un cas particulier où le nombre de sous-échantillons est égal à la taille du jeu de données. En d'autres termes, chaque échantillon est utilisé une fois comme jeu de test, et tous les autres échantillons pour l'entraînement. LOOCV fournit une estimation très précise de la performance, mais est très coûteuse en temps de calcul, surtout pour de grands jeux de données. + + +### Choix des hyper-paramètres du modèle + +L'estimation Out-of-Bag (OOB) et la validation croisée sont deux méthodes clés pour optimiser les hyper-paramètres d'une forêt aléatoire. Les deux approches permettent de comparer les performances obtenues pour différentes combinaisons d'hyper-paramètres et de sélectionner celles qui maximisent les performances prédictives, l'OOB étant souvent plus rapide et moins coûteuse, tandis que la validation croisée est plus fiable dans des situations où le surapprentissage est un risque important (@probst2019hyperparameters). + +Il convient de définir une stratégie d'optimisation des hyperparamètres pour ne pas perdre de temps à tester trop de jeux d'hyperparamètres. Plusieurs stratégies existent pour y parvenir, les principales sont exposées dans la section @sec-guide-rf. Les implémentations des forêts aléatoires disponibles en `R` et en Python permettent d'optimiser aisément les principaux hyper-paramètres des forêts aléatoires. + +#### Méthodes de recherche exhaustives + +- **Recherche sur grille** (Grid Search): Cette approche simple explore toutes les combinaisons possibles d'hyperparamètres définis sur une grille. Les paramètres continus doivent être discrétisés au préalable. La méthode est exhaustive mais coûteuse en calcul, surtout pour un grand nombre d'hyperparamètres. + +- **Recherche aléatoire** (Random Search): Plus efficace que la recherche sur grille, cette méthode échantillonne aléatoirement les valeurs des hyperparamètres dans un espace défini. Bergstra et Bengio (2012) ont démontré sa supériorité pour les réseaux neuronaux, et elle est également pertinente pour les forêts aléatoires. La distribution d'échantillonnage est souvent uniforme. + + +#### Optimisation séquentielle/itérative basée sur un modèle (SMBO) + +La méthode SMBO (Sequential model-based optimization) est une approche plus efficace que les précédentes car elle s'appuie sur les résultats des évaluations déjà effectuées pour guider la recherche des prochains hyper-paramètres à tester (@probst2019hyperparameters). + +Voici les étapes clés de cette méthode: + +- Définition du problème: On spécifie une mesure d'évaluation (ex: AUC pour la classification, MSE pour la régression), une stratégie d'évaluation (ex: validation croisée k-fold), et l'espace des hyperparamètres à explorer. + +- Initialisation: échantillonner aléatoirement des points dans l’espace des hyperparamètres et évaluer leurs performances. + +- Boucle itérative : + - Construction d'un modèle de substitution (surrogate model): un modèle de régression (ex: krigeage ou une forêt aléatoire) est ajusté aux données déjà observées. Ce modèle prédit la performance en fonction des hyperparamètres. + - Sélection d'un nouvel hyperparamètre: un critère basé sur le modèle de substitution sélectionne le prochain ensemble d'hyperparamètres à évaluer. Ce critère vise à explorer des régions prometteuses de l'espace des hyperparamètres qui n'ont pas encore été suffisamment explorées. + - Évaluer les points proposés et les ajouter à l’ensemble déjà exploré: la performance du nouvel ensemble d'hyperparamètres est évaluée et ajoutée à l'ensemble des données d'apprentissage du modèle de substitution afin d'orienter les recherches vers de nouveaux hyper-paramètres prometteurs. From 0d0458d3fb1c7ab4e85cc40ce1aa2e8cc0d9f613 Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Wed, 27 Nov 2024 10:39:26 +0000 Subject: [PATCH 25/39] =?UTF-8?q?R=C3=A9p=C3=A9tition?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chapters/chapter3/2-guide_usage_RF.qmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chapters/chapter3/2-guide_usage_RF.qmd b/chapters/chapter3/2-guide_usage_RF.qmd index e97699a..198832e 100644 --- a/chapters/chapter3/2-guide_usage_RF.qmd +++ b/chapters/chapter3/2-guide_usage_RF.qmd @@ -108,7 +108,7 @@ Il existe plusieurs méthodes permettant d'optimiser simultanément plusieurs hy ### Première approche exploratoire -Voici une procédure simple pour entraîner rapidement une forêt aléatoire. Elle ne garantit pas l'obtention d'un modèle optimal, mais elle est lisible et permet d'obtenir rapidement un modèle raisonnablement performant. +Voici une procédure simple pour entraîner une forêt aléatoire. Elle ne garantit pas l'obtention d'un modèle optimal, mais elle est lisible et permet d'obtenir rapidement un modèle raisonnablement performant. - __Commencer par entraîner une forêt aléatoire avec les valeurs des hyperparamètres par défaut__. Ce premier modèle servira de point de comparaison pour la suite. - __Ajuster le nombre d’arbres__: entraîner une forêt aléatoire avec les hyperparamètres par défaut en augmentant progressivement le nombre d'arbres, puis déterminer à partir de quel nombre d'arbres la performance se stabilise. Fixer le nombre d'arbres à cette valeur par la suite. From 14768569f2f8c245f1716261a06752cfa21fc4f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9lina=20Hillion?= <114908960+melinahillion@users.noreply.github.com> Date: Wed, 27 Nov 2024 11:49:43 +0100 Subject: [PATCH 26/39] Update chapters/chapter3/1-preparation_donnees.qmd --- chapters/chapter3/1-preparation_donnees.qmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chapters/chapter3/1-preparation_donnees.qmd b/chapters/chapter3/1-preparation_donnees.qmd index 2a90e20..cda0f5d 100644 --- a/chapters/chapter3/1-preparation_donnees.qmd +++ b/chapters/chapter3/1-preparation_donnees.qmd @@ -21,7 +21,7 @@ Pas indispensable pour RF, mais faisable. Indispensable pour GB. ### Estimation de l'erreur par validation croisée -La validation croisée est une technique d'évaluation couramment utilisée en apprentissage automatique pour estimer la capacité d'un modèle à généraliser les prédictions à de nouvelles données. Bien que l'évaluation par l'erreur _Out-of-Bag_ (OOB) soit généralement suffisante pour les forêts aléatoires, la validation croisée permet d'obtenir une évaluation plus robuste, car moins sensible à l'échantillon d'entraînement, notamment sur des jeux de données de petite taille. +La validation croisée est une méthode d'évaluation couramment utilisée en apprentissage automatique pour estimer la capacité d'un modèle à généraliser les prédictions à de nouvelles données. Bien que l'évaluation par l'erreur _Out-of-Bag_ (OOB) soit généralement suffisante pour les forêts aléatoires, la validation croisée permet d'obtenir une évaluation plus robuste, car moins sensible à l'échantillon d'entraînement, notamment sur des jeux de données de petite taille. Concrètement, le jeu de donné est divisé en $k$ sous-ensembles, un modèle est entraîné sur $k-1$ sous-ensembles et testé sur le sous-ensemble restant. L'opération est répétée $k$ fois de manière à ce que chaque observation apparaisse au moins une fois dans l'échantillon test. L'erreur est ensuite moyennée sur l'ensemble des échantillons test. From 852fdd435131be9c433bda9564ec9b6adf68ad40 Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Wed, 27 Nov 2024 12:44:03 +0000 Subject: [PATCH 27/39] Ajout intro --- chapters/chapter3/2-guide_usage_RF.qmd | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/chapters/chapter3/2-guide_usage_RF.qmd b/chapters/chapter3/2-guide_usage_RF.qmd index 198832e..d3aa01d 100644 --- a/chapters/chapter3/2-guide_usage_RF.qmd +++ b/chapters/chapter3/2-guide_usage_RF.qmd @@ -1,7 +1,8 @@ -# Guide d'entraînement des forêts aléatoires {#sec-guide-rf} +# Guide d'entraînement des forêts aléatoires {#sec-guide-rf} + +Ce guide d'entraînement des forêts aléatoires rassemble et synthétise des recommandations sur l'entraînement des forêts aléatoires disponibles dans la littérature, en particulier dans @probst2019hyperparameters. Ce guide comporte un certain nombre de choix méthodologiques forts, comme les implémentations recommandées ou la procédure d'entraînement proposée, et d'autres choix sont évidemment possibles. Les recommandations de ce guide doivent donc être considérées comme un point de départ raisonnable, pas comme un ensemble de règles devant être respectées à tout prix. -Cette section rassemble et synthétise des recommandations sur l'entraînement des forêts aléatoires disponibles dans la littérature, en particulier dans @probst2019hyperparameters. ## Quelle implémentation utiliser? From 9cb4d43c96a407cb436ae0d7d1d1f89710f3ae37 Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Wed, 27 Nov 2024 12:44:18 +0000 Subject: [PATCH 28/39] Titres et nettoyage --- chapters/chapter3/2-guide_usage_RF.qmd | 24 +++--------------------- 1 file changed, 3 insertions(+), 21 deletions(-) diff --git a/chapters/chapter3/2-guide_usage_RF.qmd b/chapters/chapter3/2-guide_usage_RF.qmd index d3aa01d..2c7a61e 100644 --- a/chapters/chapter3/2-guide_usage_RF.qmd +++ b/chapters/chapter3/2-guide_usage_RF.qmd @@ -4,29 +4,11 @@ Ce guide d'entraînement des forêts aléatoires rassemble et synthétise des recommandations sur l'entraînement des forêts aléatoires disponibles dans la littérature, en particulier dans @probst2019hyperparameters. Ce guide comporte un certain nombre de choix méthodologiques forts, comme les implémentations recommandées ou la procédure d'entraînement proposée, et d'autres choix sont évidemment possibles. Les recommandations de ce guide doivent donc être considérées comme un point de départ raisonnable, pas comme un ensemble de règles devant être respectées à tout prix. -## Quelle implémentation utiliser? +## Quelles implémentations utiliser? {#sec-implementation-rf} Il existe de multiples implémentations des forêts aléatoires. Le présent document présente et recommande l'usage de deux implémentations de référence: le _package_ `R` `ranger` et le _package_ `Python` `scikit-learn` pour leur rigueur, leur efficacité et leur simplicité d'utilisation. Il est à noter qu'il est possible d'entraîner des forêts aléatoires avec les algorithmes `XGBoost` et `LightGBM`, mais il s'agit d'un usage avancé qui n'est pas recommandé en première approche. Cette approche est présentée dans la partie __REFERENCE A LA PARTIE USAGE AVANCE__. - - - -## Les hyperparamètres clés des forêts aléatoires +## Les hyperparamètres clés des forêts aléatoires {#sec-hyperparam-rf} Cette section décrit en détail les principaux hyperparamètres des forêts aléatoires listés dans le tableau `@tbl-hyp-rf`{=typst}. Les noms des hyperparamètres utilisés sont ceux figurant dans le _package_ `R` `ranger`, et dans le _package_ `Python` `scikit-learn`. Il arrive qu'ils portent un nom différent dans d'autres implémentations des _random forests_, mais il est généralement facile de s'y retrouver en lisant attentivement la documentation. @@ -98,7 +80,7 @@ Par défaut, cette valeur est fréquemment fixée à $\sqrt{p}$ pour les problè - Le __critère de choix de la règle de division des noeuds intermédiaires__: la plupart des implémentations des forêts aléatoires retiennent par défaut l'impureté de Gini pour la classification et la variance pour la régression, même si d'autres critères de choix ont été proposés dans la littérature (p-value dans les forêts d'inférence conditionnelle, arbres extrêmement randomisés, etc.). Chaque règle présente des avantages et des inconvénients, notamment en termes de biais de sélection des variables et de vitesse de calcul. A ce stade, aucun critère de choix ne paraît systématiquement supérieur aux autres en matière de performance. Modifier cet hyperparamètre relève d'un usage avancé des forêts aléatoires. Le lecteur intéressé pourra se référer à la discussion détaillée dans @probst2019hyperparameters. -## Comment entraîner une forêt aléatoire? +## Comment entraîner une forêt aléatoire? {#sec-procedure-training-rf} Les forêts aléatoires nécessitent généralement moins d’optimisation que d’autres modèles de _machine learning_, car leurs performances varient relativement peu en fonction des hyperparamètres. Les valeurs par défaut fournissent souvent des résultats satisfaisants, ce qui réduit le besoin d'optimisation intensive. Cependant, un ajustement précis des hyperparamètres peut apporter des gains de performance, notamment sur des jeux de données complexes. From cf42cba50baf50ff618f8aac7344f9d57040e0bb Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Wed, 27 Nov 2024 13:00:02 +0000 Subject: [PATCH 29/39] Bricoles --- chapters/chapter3/2-guide_usage_RF.qmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chapters/chapter3/2-guide_usage_RF.qmd b/chapters/chapter3/2-guide_usage_RF.qmd index 2c7a61e..8090022 100644 --- a/chapters/chapter3/2-guide_usage_RF.qmd +++ b/chapters/chapter3/2-guide_usage_RF.qmd @@ -1,7 +1,7 @@ # Guide d'entraînement des forêts aléatoires {#sec-guide-rf} -Ce guide d'entraînement des forêts aléatoires rassemble et synthétise des recommandations sur l'entraînement des forêts aléatoires disponibles dans la littérature, en particulier dans @probst2019hyperparameters. Ce guide comporte un certain nombre de choix méthodologiques forts, comme les implémentations recommandées ou la procédure d'entraînement proposée, et d'autres choix sont évidemment possibles. Les recommandations de ce guide doivent donc être considérées comme un point de départ raisonnable, pas comme un ensemble de règles devant être respectées à tout prix. +Ce guide d'entraînement des forêts aléatoires rassemble et synthétise des recommandations sur l'entraînement des forêts aléatoires disponibles dans la littérature, en particulier dans @probst2019hyperparameters. Ce guide comporte un certain nombre de choix méthodologiques forts, comme les implémentations recommandées ou la procédure d'entraînement proposée, et d'autres choix pertinents sont évidemment possibles. Les recommandations de ce guide doivent donc être considérées comme un point de départ raisonnable, pas comme un ensemble de règles devant être respectées à tout prix. ## Quelles implémentations utiliser? {#sec-implementation-rf} @@ -10,7 +10,7 @@ Il existe de multiples implémentations des forêts aléatoires. Le présent doc ## Les hyperparamètres clés des forêts aléatoires {#sec-hyperparam-rf} -Cette section décrit en détail les principaux hyperparamètres des forêts aléatoires listés dans le tableau `@tbl-hyp-rf`{=typst}. Les noms des hyperparamètres utilisés sont ceux figurant dans le _package_ `R` `ranger`, et dans le _package_ `Python` `scikit-learn`. Il arrive qu'ils portent un nom différent dans d'autres implémentations des _random forests_, mais il est généralement facile de s'y retrouver en lisant attentivement la documentation. +Cette section décrit en détail les principaux hyperparamètres des forêts aléatoires listés dans le tableau `@tbl-hyp-rf`{=typst}. Les noms des hyperparamètres utilisés sont ceux figurant dans le _package_ `R` `ranger`, et dans le _package_ `Python` `scikit-learn`. Il arrive qu'ils portent un nom différent dans d'autres implémentations des forêts aléatoires, mais il est généralement facile de s'y retrouver en lisant attentivement la documentation. ::: {.content-visible unless-format="html"} From 2a6bb958844526f4eb87fd06134812878fd8dc1e Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Wed, 27 Nov 2024 13:02:17 +0000 Subject: [PATCH 30/39] Ordre dans le tableau --- chapters/chapter3/2-guide_usage_RF.qmd | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/chapters/chapter3/2-guide_usage_RF.qmd b/chapters/chapter3/2-guide_usage_RF.qmd index 8090022..5dcaf12 100644 --- a/chapters/chapter3/2-guide_usage_RF.qmd +++ b/chapters/chapter3/2-guide_usage_RF.qmd @@ -18,7 +18,7 @@ Cette section décrit en détail les principaux hyperparamètres des forêts al #figure( table( - columns: (3fr, 3fr, 6fr,), + columns: (3fr, 3fr, 5fr,), // align: (center, center, center), table.header( table.cell(colspan: 2)[ @@ -28,14 +28,14 @@ Cette section décrit en détail les principaux hyperparamètres des forêts al ], [Description] ), + [ `num.trees` ], [ `n_estimators` ], [Le nombre d'arbres ], [ `mtry` ], [ `max_features` ], [Le nombre de variables candidates à chaque noeud ], - [ `replacement` ], [ ], [L'échantillonnage des données se fait-il avec ou sans remise? ], [ `sample.fraction` ], [ `max_samples` ], [Le taux d'échantillonnage des données ], + [ `replacement` ], [ ], [L'échantillonnage des données se fait-il avec ou sans remise? ], [ `min.node.size` ], [ `min_samples_leaf` ], [Nombre minimal d'observations nécessaire pour qu'un noeud puisse être partagé ], - [ `num.trees` ], [ `n_estimators` ], [Le nombre d'arbres ], - [ `splitrule` ], [ `criterion` ], [Le critère de choix de la règle de division des noeuds intermédiaires ], [ `min.bucket` ], [ `min_samples_split` ], [Nombre minimal d'observations dans les noeuds terminaux ], [ `max.depth` ], [ `max_depth` ], [Profondeur maximale des arbres ], + [ `splitrule` ], [ `criterion` ], [Le critère de choix de la règle de division des noeuds intermédiaires ], ), caption: [ Les principaux hyperparamètres des forêts aléatoires], ) From 3b121f8ec050ef07b77adc4f14987f87187fd8e1 Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Wed, 27 Nov 2024 13:09:12 +0000 Subject: [PATCH 31/39] =?UTF-8?q?Am=C3=A9lioration=20explication=20mtry?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chapters/chapter3/2-guide_usage_RF.qmd | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/chapters/chapter3/2-guide_usage_RF.qmd b/chapters/chapter3/2-guide_usage_RF.qmd index 5dcaf12..6a45eab 100644 --- a/chapters/chapter3/2-guide_usage_RF.qmd +++ b/chapters/chapter3/2-guide_usage_RF.qmd @@ -64,11 +64,7 @@ Cette section décrit en détail les principaux hyperparamètres des forêts al - Le __nombre d'arbres__ par défaut varie selon les implémentations (500 dans `ranger`, 100 dans `scikit-learn`). Il s'agit d'un hyperparamètre particulier car il n'est associé à aucun arbitrage en matière de performance: la performance de la forêt aléatoire croît avec le nombre d'arbres, puis se stabilise. Le nombre optimal d'arbres est celui à partir duquel la performance de la forêt ne croît plus (ce point est détaillé plus bas) où à partir duquel l'ajout d'arbres supplémentaires génère des gains marginaux. Il est important de noter que ce nombre optimal dépend des autres hyperparamètres. Par exemple, un taux d'échantillonnage faible et un nombre faible de variables candidates à chaque noeud aboutissent à des arbres peu corrélés, mais peu performants, ce qui requiert probablement un plus grand nombre d'arbres. L'utilisation de mesures comme le score de Brier est recommandée pour évaluer la convergence plutôt que le taux d'erreur. -- Le __nombre (ou la part) de variables candidates à chaque noeud__ (souvent appelé `mtry`) est un hyperparamètre fondamental qui détermine le nombre de variables prédictives sélectionnées aléatoirement à chaque nœud lors de la construction des arbres. Ce paramètre exerce la plus forte influence sur les performances du modèle. - -Un nombre plus faible de variables candidates conduit à des arbres moins performants mais plus diversifiés et donc moins corrélés entre eux. À l'inverse, un nombre plus élevé de variables candidates améliore la précision des arbres individuels mais accroît leur corrélation (les mêmes variables ayant tendance à être sélectionnées dans tous les arbres), limitant ainsi les bénéfices de l'agrégation en termes de réduction de variance. Un compromis doit être trouvé et le choix optimal dépend du nombre de variables réellement pertinentes dans les données. Une faible valeur de `mtry` est préférable lorsque la plupart des variables sont pertinentes, tandis qu'une valeur élevé est meilleure lorsqu'il y a peu de variables pertinentes parmi l'ensemble des variables considérées. Par ailleurs, une valeur élevée de `mtry` est préférable si les données comprennent un grand nombre de variables binaires issues du _one-hot-encoding_ des variables catégorielles (LIEN AVEC LA PARTIE PREPROCESSING). - -Par défaut, cette valeur est fréquemment fixée à $\sqrt{p}$ pour les problèmes de classification et à $p/3$ pour les problèmes de régression, où $p$ représente le nombre total de variables prédictives disponibles. Ces choix par défaut reposent sur des heuristiques empiriques qui offrent généralement un bon compromis entre la précision des prédictions et la diversité des arbres. +- Le __nombre (ou la part) de variables candidates à chaque noeud__ (souvent appelé `mtry`) est un hyperparamètre essentiel qui détermine le nombre de variables prédictives sélectionnées aléatoirement à chaque nœud lors de la construction des arbres. Ce paramètre exerce la plus forte influence sur les performances du modèle, et un compromis doit être trouvé entre puissance prédictive des arbres et corrélation entre arbres. Une faible valeur de `mtry` conduit à des arbres moins performants mais plus diversifiés et donc moins corrélés entre eux. Inversement, une valeur plus élevée améliore la précision des arbres individuels mais accroît leur corrélation (les mêmes variables ayant tendance à être sélectionnées dans tous les arbres). La valeur optimale de `mtry` dépend du nombre de variables réellement pertinentes dans les données: elle est plus faible lorsque la plupart des variables sont pertinentes, et plus élevée lorsqu'il y a peu de variables pertinentes. Par ailleurs, une valeur élevée de `mtry` est préférable si les données comprennent un grand nombre de variables binaires issues du _one-hot-encoding_ des variables catégorielles (LIEN AVEC LA PARTIE PREPROCESSING). Par défaut, cette valeur est fréquemment fixée à $\sqrt{p}$ pour les problèmes de classification et à $p/3$ pour les problèmes de régression, où $p$ représente le nombre total de variables prédictives disponibles. - Le __taux d'échantillonnage__ et le __mode de tirage__ contrôlent le plan d'échantillonnage des données d'entraînement. Les valeurs par défaut varient d'une implémentation à l'autre; dans le cas de `ranger`, le taux d'échantillonnage est de 63,2% sans remise, et de 100% avec remise. L'implémentation `scikit-learn` ne propose pas le tirage sans remise. Ces hyperparamètres ont des effets sur la performance similaires à ceux du nombre de variables candidates, mais d'une moindre ampleur. Un taux d'échantillonnage plus faible aboutit à des arbres plus diversifiés et donc moins corrélés (car ils sont entraînés sur des échantillons très différents), mais ces arbres peuvent être peu performants car ils sont entraînés sur des échantillons de petite taille. Inversement, un taux d'échantillonnage élevé aboutit à des arbres plus performants mais plus corrélés. Les effets de l'échantillonnage avec ou sans remise sur la performance de la forêt aléatoire sont moins clairs et ne font pas consensus. Les travaux les plus récents semblent toutefois suggérer qu'il est préférable d'échantillonner sans remise (@probst2019hyperparameters). From 589a33d0d4c9f3fce6b38eb5c6d75364120ea3fc Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Wed, 27 Nov 2024 13:27:26 +0000 Subject: [PATCH 32/39] =?UTF-8?q?Am=C3=A9lioration=20du=20guide?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chapters/chapter3/2-guide_usage_RF.qmd | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/chapters/chapter3/2-guide_usage_RF.qmd b/chapters/chapter3/2-guide_usage_RF.qmd index 6a45eab..0677d6c 100644 --- a/chapters/chapter3/2-guide_usage_RF.qmd +++ b/chapters/chapter3/2-guide_usage_RF.qmd @@ -78,22 +78,22 @@ Cette section décrit en détail les principaux hyperparamètres des forêts al ## Comment entraîner une forêt aléatoire? {#sec-procedure-training-rf} -Les forêts aléatoires nécessitent généralement moins d’optimisation que d’autres modèles de _machine learning_, car leurs performances varient relativement peu en fonction des hyperparamètres. Les valeurs par défaut fournissent souvent des résultats satisfaisants, ce qui réduit le besoin d'optimisation intensive. Cependant, un ajustement précis des hyperparamètres peut apporter des gains de performance, notamment sur des jeux de données complexes. +Les forêts aléatoires nécessitent généralement moins d'optimisation que d’autres modèles de _machine learning_, car leurs performances varient relativement peu en fonction des hyperparamètres. Les valeurs par défaut fournissent souvent des résultats satisfaisants, ce qui réduit le besoin d'optimisation intensive. Cependant, un ajustement précis des hyperparamètres peut apporter des gains de performance, notamment sur des jeux de données complexes. -Comme indiqué dans la partie __REFERENCE A AJOUTER__, la performance prédictive d'une forêt aléatoire varie en fonction de deux critères essentiels: elle croît avec le pouvoir prédictif des arbres, et décroît avec la corrélation des arbres entre eux. L'entraînement d'une forêt aléatoire implique de trouver un équilibre optimal où les arbres sont suffisamment puissants pour être prédictifs, tout en étant suffisamment diversifiés pour que leurs erreurs ne soient pas trop corrélées. Cet arbitrage s'opère en ajustant certains hyperparamètres clés comme le nombre de variables candidates à chaque division, la taille de l'échantillon ou encore la taille minimale des feuilles. L'ajustement du nombre d'arbre relève plutôt d'un arbitrage entre performance et temps de calcul. Il est recommandé de fixer le nombre d'arbre à une valeur au-delà de laquelle les gains de performance peuvent être considérés comme marginaux. +Comme indiqué dans la partie @sec-facteur-perf-rf, la performance prédictive d'une forêt aléatoire varie en fonction de deux critères essentiels: elle croît avec le pouvoir prédictif des arbres, et décroît avec la corrélation des arbres entre eux. L'optimisation des hyperparamètres d'une forêt aléatoire vise donc à trouver un équilibre optimal où les arbres sont suffisamment puissants pour être prédictifs, tout en étant suffisamment diversifiés pour que leurs erreurs ne soient pas trop corrélées. -Il existe plusieurs méthodes permettant d'optimiser simultanément plusieurs hyperparamètres: la recherche par grille, la recherche aléatoire et l'optimisation basée sur modèle séquentiel (SMBO). +La littérature propose de multiples approches pour optimiser simultanément plusieurs hyperparamètres: la recherche par grille (_grid search_), la recherche aléatoire (_random search_) et l'optimisation basée sur modèle séquentiel (SMBO), et il peut être difficile de savoir quelle approche adopter. Ce guide propose donc une première approche délibérément simple, avant de présenter les approches plus avancées. -### Première approche exploratoire +### Approche simple -Voici une procédure simple pour entraîner une forêt aléatoire. Elle ne garantit pas l'obtention d'un modèle optimal, mais elle est lisible et permet d'obtenir rapidement un modèle raisonnablement performant. +Voici une procédure simple pour entraîner une forêt aléatoire. Elle ne garantit pas l'obtention d'un modèle optimal, mais elle est lisible et permet d'obtenir rapidement un modèle raisonnablement performant. - __Commencer par entraîner une forêt aléatoire avec les valeurs des hyperparamètres par défaut__. Ce premier modèle servira de point de comparaison pour la suite. -- __Ajuster le nombre d’arbres__: entraîner une forêt aléatoire avec les hyperparamètres par défaut en augmentant progressivement le nombre d'arbres, puis déterminer à partir de quel nombre d'arbres la performance se stabilise. Fixer le nombre d'arbres à cette valeur par la suite. -- __Ajuster le nombre minimal d'observations dans les noeuds terminaux__: optimiser cet hyperparamètre grâce à une méthode de _grid search_ évaluée par une approche de validation-croisée. Ce n'est pas l'hyperparamètre le plus important, mais il est utile de vérifier s'il est possible de le fixer à une valeur plus élevée que la valeur par défaut sans perte de performance, car cela permet d'accélérer le reste de la procédure. -- __Ajuster le nombre de variables candidates et le taux d'échantillonnage__: optimiser ces deux hyperparamètres grâce à une méthode de _grid search_ évaluée par une approche de validation-croisée. -- __Evaluation du modèle final__: mesurer la performance du modèle final soit avec l'approche Out-of-Bag (OOB), soit avec un ensemble de test. Il est souvent instructif de comparer les performances du modèle final et du modèle entraîné avec les valeurs des hyperparamètres par défaut. +- __Ajuster le nombre d’arbres__: entraîner une forêt aléatoire avec les hyperparamètres par défaut en augmentant progressivement le nombre d'arbres, puis déterminer à partir de quel nombre d'arbres la performance se stabilise (en mesurant la performance avec l'erreur OOB ou avec le score de Brier). Fixer le nombre d'arbres à cette valeur par la suite. +- __Ajuster le nombre minimal d'observations dans les noeuds terminaux__: optimiser cet hyperparamètre grâce à une méthode de _grid search_ évaluée par une approche de validation-croisée, ou par une approche reposant sur l'erreur OOB. Ce n'est pas l'hyperparamètre le plus important, mais il est utile de vérifier s'il est possible de le fixer à une valeur plus élevée que la valeur par défaut sans perte de performance, car cela permet d'accélérer le reste de la procédure. +- __Ajuster le nombre de variables candidates et le taux d'échantillonnage__: optimiser ces deux hyperparamètres grâce à une méthode de _grid search_ évaluée par une approche de validation-croisée, ou par une approche reposant sur l'erreur OOB. +- __Evaluation du modèle final__: mesurer la performance du modèle final soit avec l'approche Out-of-Bag (OOB), soit avec un ensemble de test. Il est souvent instructif de comparer les performances du modèle final et du modèle entraîné avec les valeurs des hyperparamètres par défaut (parfois pour se rendre compte que ce dernier était déjà suffisamment performant...). ### Approches plus avancées @@ -118,11 +118,11 @@ En pratique, il est recommandé d'utiliser des méthodes d'importance des variab On conseille l'utilisation de trois implémentations pour comparer l'importances des variables d'une forêt aléatoire: -- Pour la MDI: l'algorithme CIF proposé par @strobl2007bias et implémenté en R +- Pour la MDI: l'algorithme CIF proposé par @strobl2007bias et implémenté en `R` -- Pour la MDA: l'algorithme Sobol-MDA proposé par @benard2022mda et implémenté en R +- Pour la MDA: l'algorithme Sobol-MDA proposé par @benard2022mda et implémenté en `R` -- Pour les valeurs de shapley : l'alogrithme SHAFF proposé par @benard2022shaff et implémenté en R +- Pour les valeurs de Shapley : l'alogrithme SHAFF proposé par @benard2022shaff et implémenté en `R` Enfin, nous recommandons de combiner plusieurs méthodes pour une analyse plus robuste et de tenir compte des prétraitements des données afin de minimiser les biais potentiels. From 3232446d22a3a6d1320c8337178e11ae22688479 Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Wed, 27 Nov 2024 13:27:34 +0000 Subject: [PATCH 33/39] Crossref --- chapters/chapter2/3-random_forest.qmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chapters/chapter2/3-random_forest.qmd b/chapters/chapter2/3-random_forest.qmd index 2b02c7f..b28e7cd 100644 --- a/chapters/chapter2/3-random_forest.qmd +++ b/chapters/chapter2/3-random_forest.qmd @@ -129,7 +129,7 @@ Bien qu'elle s'avèrent très performantes en pratique, __il n'est pas prouvé Par ailleurs, une propriété importante des forêts aléatoires démontrée par @breiman2001random est que leur erreur de généralisation, c'est-à-dire l'écart entre les prédictions du modèle et les résultats attendus sur des données jamais vues (donc hors de l'échantillon d'entraînement), diminue à mesure que le nombre d'arbres augmente et converge vers une valeur constante. Autrement dit, __la forêt aléatoire ne souffre pas d'un surapprentissage croissant avec le nombre d'arbres__. La conséquence pratique de ce résultat est qu'inclure un (trop) grand nombre d'arbres dans le modèle n'en dégrade pas la qualité, ce qui contribue à la rendre particulièrement robuste. En revanche, une forêt aléatoire peut souffrir de surapprentissage si ses autres hyperparamètres sont mal choisis (des arbres trop profonds par exemple). -### Facteurs influençant l'erreur de généralisation +### Facteurs influençant l'erreur de généralisation {#sec-facteur-perf-rf} L'erreur de généralisation des forêts aléatoires est influencée par deux facteurs principaux : From 2f82d96ea2a1cb941e7c69d5c76e8d1e7aea4c6c Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Wed, 27 Nov 2024 14:03:17 +0000 Subject: [PATCH 34/39] Ajout guide RF --- chapters/chapter3/2-guide_usage_RF.qmd | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/chapters/chapter3/2-guide_usage_RF.qmd b/chapters/chapter3/2-guide_usage_RF.qmd index 4931018..a713e07 100644 --- a/chapters/chapter3/2-guide_usage_RF.qmd +++ b/chapters/chapter3/2-guide_usage_RF.qmd @@ -35,6 +35,7 @@ Cette section décrit en détail les principaux hyperparamètres des forêts al [ `min.bucket` ], [ `min_samples_split` ], [Nombre minimal d'observations dans les noeuds terminaux ], [ `max.depth` ], [ `max_depth` ], [Profondeur maximale des arbres ], [ `splitrule` ], [ `criterion` ], [Le critère de choix de la règle de division des noeuds intermédiaires ], + [ `oob.error` ], [ `oob_score` ], [Calculer la performance de la forêt par l'erreur OOB (et choix de la métrique pour `scikit`) ], ), caption: [ Les principaux hyperparamètres des forêts aléatoires], ) @@ -88,7 +89,7 @@ La littérature propose de multiples approches pour optimiser simultanément plu Voici une procédure simple pour entraîner une forêt aléatoire. Elle ne garantit pas l'obtention d'un modèle optimal, mais elle est lisible et permet d'obtenir rapidement un modèle raisonnablement performant. - __Commencer par entraîner une forêt aléatoire avec les valeurs des hyperparamètres par défaut__. Ce premier modèle servira de point de comparaison pour la suite. -- __Ajuster le nombre d’arbres__: entraîner une forêt aléatoire avec les hyperparamètres par défaut en augmentant progressivement le nombre d'arbres, puis déterminer à partir de quel nombre d'arbres la performance se stabilise (en mesurant la performance avec l'erreur OOB ou avec le score de Brier). Fixer le nombre d'arbres à cette valeur par la suite. +- __Ajuster le nombre d’arbres__: entraîner une forêt aléatoire avec les hyperparamètres par défaut en augmentant progressivement le nombre d'arbres, puis déterminer à partir de quel nombre d'arbres la performance se stabilise (en mesurant la performance avec l'erreur OOB avec pour métrique le [score de Brier](https://scikit-learn.org/dev/modules/model_evaluation.html#brier-score-loss)). Fixer le nombre d'arbres à cette valeur par la suite. - __Ajuster le nombre minimal d'observations dans les noeuds terminaux__: optimiser cet hyperparamètre grâce à une méthode de _grid search_ évaluée par une approche de validation-croisée, ou par une approche reposant sur l'erreur OOB. Ce n'est pas l'hyperparamètre le plus important, mais il est utile de vérifier s'il est possible de le fixer à une valeur plus élevée que la valeur par défaut sans perte de performance, car cela permet d'accélérer le reste de la procédure. - __Ajuster le nombre de variables candidates et le taux d'échantillonnage__: optimiser ces deux hyperparamètres grâce à une méthode de _grid search_ évaluée par une approche de validation-croisée, ou par une approche reposant sur l'erreur OOB. - __Evaluation du modèle final__: mesurer la performance du modèle final soit avec l'approche Out-of-Bag (OOB), soit avec un ensemble de test. Il est souvent instructif de comparer les performances du modèle final et du modèle entraîné avec les valeurs des hyperparamètres par défaut (parfois pour se rendre compte que ce dernier était déjà suffisamment performant...). From 64d094b70b96e676ca433d00cca6c63a66a02d4d Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Wed, 27 Nov 2024 14:05:17 +0000 Subject: [PATCH 35/39] Bricole --- chapters/chapter2/3-random_forest.qmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chapters/chapter2/3-random_forest.qmd b/chapters/chapter2/3-random_forest.qmd index b28e7cd..0ebd635 100644 --- a/chapters/chapter2/3-random_forest.qmd +++ b/chapters/chapter2/3-random_forest.qmd @@ -172,14 +172,14 @@ L'objectif de l'entraînement des forêts aléatoires est donc de minimiser la c ## Evaluation des performances par l'erreur _Out-of-Bag_ (OOB) {#sec-rf-oob} -La forêt aléatoire présente une particularité intéressante et très utile en pratique: __il est possible d'évaluer les performances d'une forêt aléatoire directement à partir des données d'entraînement__, grâce à l'estimation de l'erreur _Out-of-Bag_ (OOB). Cette technique repose sur le fait que chaque arbre est construit à partir d'un échantillon _bootstrap_, c'est-à-dire un échantillon tiré avec remise. Cela implique qu'une part conséquente des observations ne sont pas utilisées pour entraîner un arbre donné. Ces observations laissées de côté forment un **échantillon dit _out-of-bag_**, que l'on peut utiliser pour évaluer la performance de chaque arbre. On peut donc construire pour chaque observation du jeu d'entraînement une prédiction qui agrège uniquement les prédictions des arbres pour lesquels cette observation est _out-of-bag_; cette prédiction n'est pas affectée par le surapprentissage (puisque cette observation n'a jamais été utilisée pour entraîner ces arbres). De cette façon, il est possible d'évaluer correctement la performance de la forêt aléatoire. +La forêt aléatoire présente une particularité intéressante et très utile en pratique: __il est possible d'évaluer les performances d'une forêt aléatoire directement à partir des données d'entraînement__, grâce à l'estimation de l'erreur _Out-of-Bag_ (OOB). Cette technique repose sur le fait que chaque arbre est construit à partir d'un échantillon _bootstrap_, c'est-à-dire un échantillon tiré avec remise. Cela implique qu'une part conséquente des observations ne sont pas utilisées pour entraîner un arbre donné. Ces observations laissées de côté forment un **échantillon dit _out-of-bag_**, que l'on peut utiliser pour évaluer la performance de chaque arbre. On peut donc construire pour chaque observation du jeu d'entraînement une prédiction qui agrège uniquement les prédictions des arbres pour lesquels cette observation est _out-of-bag_; cette prédiction n'est pas affectée par le surapprentissage (puisque cette observation n'a jamais été utilisée pour entraîner ces arbres). De cette façon, il est possible d'évaluer correctement la performance de la forêt aléatoire en comparant ces prédictions avec la variable-cible à l'aide d'une métrique bien choisie. La procédure d'estimation de l'erreur OOB se déroule comme ceci: 1. **Entraînement de la forêt aléatoire**: la forêt aléatoire est entraînée sur les données d'entraînement selon la procédure détaillée ci-dessus. 2. **Prédiction _out-of-bag_** : Pour chaque observation $(x_i, y_i)$ des données d'entraînement, on calcule la prédiction de tous les arbres pour lesquels elle fait partie de l'échantillon _out-of-bag_. 3. **Agrégation des prédictions** : La prédiction finale est obtenue en agrégeant les prédictions selon la procédure standard détaillée ci-dessus (moyenne pour la régression, vote majoritaire pour la classification). -4. **Calcul de l'erreur OOB** : L'erreur OOB est ensuite calculée en calculant une métrique (précision, rappel, AUC, erreur quadratique moyenne...) qui compare les prédictions avec la variable-cible $y$ sur toutes les observations. +4. **Calcul de l'erreur OOB** : L'erreur OOB est ensuite calculée en comparant les prédictions avec la variable-cible $y$ sur toutes les observations, à l'aide d'une métrique (précision, rappel, AUC, erreur quadratique moyenne, score de Brier...). L'utilisation de l'erreur OOB présente de multiples avantages: From 15b4570a177bc5a970a7a443f06f7df659bfeb57 Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Wed, 27 Nov 2024 14:29:38 +0000 Subject: [PATCH 36/39] Bricole --- chapters/chapter3/2-guide_usage_RF.qmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chapters/chapter3/2-guide_usage_RF.qmd b/chapters/chapter3/2-guide_usage_RF.qmd index a713e07..4067085 100644 --- a/chapters/chapter3/2-guide_usage_RF.qmd +++ b/chapters/chapter3/2-guide_usage_RF.qmd @@ -1,5 +1,5 @@ -# Guide d'entraînement des forêts aléatoires {#sec-guide-rf} +# Guide d'usage des forêts aléatoires {#sec-guide-rf} Ce guide d'entraînement des forêts aléatoires rassemble et synthétise des recommandations sur l'entraînement des forêts aléatoires disponibles dans la littérature, en particulier dans @probst2019hyperparameters. Ce guide comporte un certain nombre de choix méthodologiques forts, comme les implémentations recommandées ou la procédure d'entraînement proposée, et d'autres choix pertinents sont évidemment possibles. C'est pourquoi les recommandations de ce guide doivent être considérées comme un point de départ raisonnable, pas comme un ensemble de règles devant être respectées à tout prix. @@ -61,7 +61,7 @@ Cette section décrit en détail les principaux hyperparamètres des forêts al ::: -- Le __nombre d'arbres__ par défaut varie selon les implémentations (500 dans `ranger`, 100 dans `scikit-learn`). Il s'agit d'un hyperparamètre particulier car il n'est associé à aucun arbitrage en matière de performance: la performance de la forêt aléatoire croît avec le nombre d'arbres, puis se stabilise. Le nombre optimal d'arbres est celui à partir duquel la performance de la forêt ne croît plus (ce point est détaillé plus bas) où à partir duquel l'ajout d'arbres supplémentaires génère des gains marginaux. Il est important de noter que ce nombre optimal dépend des autres hyperparamètres. Par exemple, un taux d'échantillonnage faible et un nombre faible de variables candidates à chaque noeud aboutissent à des arbres peu corrélés, mais peu performants, ce qui requiert probablement un plus grand nombre d'arbres. L'utilisation de mesures comme le score de Brier est recommandée pour évaluer la convergence plutôt que le taux d'erreur. +- Le __nombre d'arbres__ par défaut varie selon les implémentations (500 dans `ranger`, 100 dans `scikit-learn`). Il s'agit d'un hyperparamètre particulier car il n'est associé à aucun arbitrage en matière de performance: la performance de la forêt aléatoire croît avec le nombre d'arbres, puis se stabilise. Le nombre optimal d'arbres est celui à partir duquel la performance de la forêt ne croît plus (ce point est détaillé plus bas) où à partir duquel l'ajout d'arbres supplémentaires génère des gains marginaux. Il est important de noter que ce nombre optimal dépend des autres hyperparamètres. Par exemple, un taux d'échantillonnage faible et un nombre faible de variables candidates à chaque noeud aboutissent à des arbres peu corrélés, mais peu performants, ce qui requiert probablement un plus grand nombre d'arbres. Dans le cas d'une classification, l'utilisation de mesures comme le score de Brier ou la fonction de perte logarithmique est recommandée pour évaluer la convergence plutôt que la précision (métrique par défaut de `ranger` et `scikit-learn`). - Le __nombre (ou la part) de variables candidates à chaque noeud__ (souvent appelé `mtry`) est un hyperparamètre essentiel qui détermine le nombre de variables prédictives sélectionnées aléatoirement à chaque nœud lors de la construction des arbres. Ce paramètre exerce la plus forte influence sur les performances du modèle, et un compromis doit être trouvé entre puissance prédictive des arbres et corrélation entre arbres. Une faible valeur de `mtry` conduit à des arbres moins performants mais plus diversifiés et donc moins corrélés entre eux. Inversement, une valeur plus élevée améliore la précision des arbres individuels mais accroît leur corrélation (les mêmes variables ayant tendance à être sélectionnées dans tous les arbres). La valeur optimale de `mtry` dépend du nombre de variables réellement pertinentes dans les données: elle est plus faible lorsque la plupart des variables sont pertinentes, et plus élevée lorsqu'il y a peu de variables pertinentes. Par ailleurs, une valeur élevée de `mtry` est préférable si les données comprennent un grand nombre de variables binaires issues du _one-hot-encoding_ des variables catégorielles (LIEN AVEC LA PARTIE PREPROCESSING). Par défaut, cette valeur est fréquemment fixée à $\sqrt{p}$ pour les problèmes de classification et à $p/3$ pour les problèmes de régression, où $p$ représente le nombre total de variables prédictives disponibles. From 2ca54a97dcd51f77b9c6513b62ab317701b270a0 Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Wed, 27 Nov 2024 16:12:35 +0000 Subject: [PATCH 37/39] =?UTF-8?q?Am=C3=A9lioration=20proc=C3=A9dure?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chapters/chapter3/2-guide_usage_RF.qmd | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/chapters/chapter3/2-guide_usage_RF.qmd b/chapters/chapter3/2-guide_usage_RF.qmd index 4067085..0fb7da9 100644 --- a/chapters/chapter3/2-guide_usage_RF.qmd +++ b/chapters/chapter3/2-guide_usage_RF.qmd @@ -88,11 +88,12 @@ La littérature propose de multiples approches pour optimiser simultanément plu Voici une procédure simple pour entraîner une forêt aléatoire. Elle ne garantit pas l'obtention d'un modèle optimal, mais elle est lisible et permet d'obtenir rapidement un modèle raisonnablement performant. -- __Commencer par entraîner une forêt aléatoire avec les valeurs des hyperparamètres par défaut__. Ce premier modèle servira de point de comparaison pour la suite. +- __Entraîner une forêt aléatoire avec les valeurs des hyperparamètres par défaut__. Ce premier modèle servira de point de comparaison pour la suite. - __Ajuster le nombre d’arbres__: entraîner une forêt aléatoire avec les hyperparamètres par défaut en augmentant progressivement le nombre d'arbres, puis déterminer à partir de quel nombre d'arbres la performance se stabilise (en mesurant la performance avec l'erreur OOB avec pour métrique le [score de Brier](https://scikit-learn.org/dev/modules/model_evaluation.html#brier-score-loss)). Fixer le nombre d'arbres à cette valeur par la suite. -- __Ajuster le nombre minimal d'observations dans les noeuds terminaux__: optimiser cet hyperparamètre grâce à une méthode de _grid search_ évaluée par une approche de validation-croisée, ou par une approche reposant sur l'erreur OOB. Ce n'est pas l'hyperparamètre le plus important, mais il est utile de vérifier s'il est possible de le fixer à une valeur plus élevée que la valeur par défaut sans perte de performance, car cela permet d'accélérer le reste de la procédure. - __Ajuster le nombre de variables candidates et le taux d'échantillonnage__: optimiser ces deux hyperparamètres grâce à une méthode de _grid search_ évaluée par une approche de validation-croisée, ou par une approche reposant sur l'erreur OOB. -- __Evaluation du modèle final__: mesurer la performance du modèle final soit avec l'approche Out-of-Bag (OOB), soit avec un ensemble de test. Il est souvent instructif de comparer les performances du modèle final et du modèle entraîné avec les valeurs des hyperparamètres par défaut (parfois pour se rendre compte que ce dernier était déjà suffisamment performant...). +- __Ajuster le nombre minimal d'observations dans les noeuds terminaux__: optimiser cet hyperparamètre grâce à une méthode de _grid search_ évaluée par une approche de validation-croisée, ou par une approche reposant sur l'erreur OOB. Ce n'est pas l'hyperparamètre le plus important, mais s'il est possible de le fixer à une valeur plus élevée que la valeur par défaut sans perte de performance, cela permet d'accélérer le reste de la procédure. +- __Entraîner du modèle final__: entraîner une forêt aléatoire avec les hyperparamètres optimisés déduits des étapes précédentes. +- __Évaluer du modèle final__: mesurer la performance du modèle final soit avec l'approche _out-of-bag_ (OOB), soit avec un ensemble de test. Il est souvent instructif de comparer les performances du modèle final et du modèle entraîné avec les valeurs des hyperparamètres par défaut (parfois pour se rendre compte que ce dernier était déjà suffisamment performant...). ### Approches plus avancées From 7c92f09e4f83f4b8e4371aa8e8a050a70bd681c7 Mon Sep 17 00:00:00 2001 From: oliviermeslin Date: Wed, 27 Nov 2024 16:33:46 +0000 Subject: [PATCH 38/39] Bricole --- chapters/chapter3/1-preparation_donnees.qmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chapters/chapter3/1-preparation_donnees.qmd b/chapters/chapter3/1-preparation_donnees.qmd index cda0f5d..421ba44 100644 --- a/chapters/chapter3/1-preparation_donnees.qmd +++ b/chapters/chapter3/1-preparation_donnees.qmd @@ -9,12 +9,12 @@ - **Échelle des Variables** : Pas nécessaire de normaliser, les arbres sont invariants aux transformations monotones. -### Process: utiliser les pipelines +### Process: utiliser les pipelines scikit, pour expliciter la structure du modèle complet et réduire les risques d'erreur ### Train-test -Pas indispensable pour RF, mais faisable. Indispensable pour GB. +Pas indispensable pour RF, mais souhaitable. Indispensable pour GB. ## Evaluation des performances du modèle et optimisation des hyper-paramètres From 157b85cfb39fed785d299cefde765f8c9cb4b4c8 Mon Sep 17 00:00:00 2001 From: Olivier Meslin <44379737+oliviermeslin@users.noreply.github.com> Date: Thu, 28 Nov 2024 17:06:39 +0100 Subject: [PATCH 39/39] Relecture survol (#12) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Modification de l'introduction du survol * Propositions pour que sont les méthodes ensemblistes * Modification de la partie sur les arbres CART * Modification de la partie bagging * fin de la relecture des forêts aléatoires * Fin de relecture gradient boosting * Correction de coquilles * Update chapters/chapter1/1-survol.qmd Co-authored-by: Olivier Meslin <44379737+oliviermeslin@users.noreply.github.com> * Update chapters/chapter1/1-survol.qmd Co-authored-by: Olivier Meslin <44379737+oliviermeslin@users.noreply.github.com> * Update chapters/chapter1/1-survol.qmd Co-authored-by: Olivier Meslin <44379737+oliviermeslin@users.noreply.github.com> * Update chapters/chapter1/1-survol.qmd Co-authored-by: Olivier Meslin <44379737+oliviermeslin@users.noreply.github.com> * Update chapters/chapter1/1-survol.qmd Co-authored-by: Olivier Meslin <44379737+oliviermeslin@users.noreply.github.com> * Update chapters/chapter1/1-survol.qmd Co-authored-by: Olivier Meslin <44379737+oliviermeslin@users.noreply.github.com> * Update chapters/chapter1/1-survol.qmd Co-authored-by: Olivier Meslin <44379737+oliviermeslin@users.noreply.github.com> * Update chapters/chapter1/1-survol.qmd Co-authored-by: Olivier Meslin <44379737+oliviermeslin@users.noreply.github.com> * Update chapters/chapter1/1-survol.qmd Co-authored-by: Olivier Meslin <44379737+oliviermeslin@users.noreply.github.com> * Update chapters/chapter1/1-survol.qmd Co-authored-by: Olivier Meslin <44379737+oliviermeslin@users.noreply.github.com> * Update chapters/chapter1/1-survol.qmd Co-authored-by: Olivier Meslin <44379737+oliviermeslin@users.noreply.github.com> * Update chapters/chapter1/1-survol.qmd Co-authored-by: Olivier Meslin <44379737+oliviermeslin@users.noreply.github.com> * Update chapters/chapter1/1-survol.qmd Co-authored-by: Olivier Meslin <44379737+oliviermeslin@users.noreply.github.com> * Update chapters/chapter1/1-survol.qmd Co-authored-by: Olivier Meslin <44379737+oliviermeslin@users.noreply.github.com> * Update chapters/chapter1/1-survol.qmd Co-authored-by: Olivier Meslin <44379737+oliviermeslin@users.noreply.github.com> * Update chapters/chapter1/1-survol.qmd Co-authored-by: Olivier Meslin <44379737+oliviermeslin@users.noreply.github.com> * Update chapters/chapter1/1-survol.qmd Co-authored-by: Olivier Meslin <44379737+oliviermeslin@users.noreply.github.com> * Update chapters/chapter1/1-survol.qmd Co-authored-by: Olivier Meslin <44379737+oliviermeslin@users.noreply.github.com> * Update chapters/chapter1/1-survol.qmd Co-authored-by: Olivier Meslin <44379737+oliviermeslin@users.noreply.github.com> --------- Co-authored-by: mhillion Co-authored-by: Mélina Hillion <114908960+melinahillion@users.noreply.github.com> --- Question_reunion_cadrage.md | 2 +- chapters/chapter1/1-survol.qmd | 91 ++++++++++++++++++++++++---------- 2 files changed, 65 insertions(+), 28 deletions(-) diff --git a/Question_reunion_cadrage.md b/Question_reunion_cadrage.md index 2f416cf..192c3ab 100644 --- a/Question_reunion_cadrage.md +++ b/Question_reunion_cadrage.md @@ -4,7 +4,7 @@ ### Démarche -- Que pensez-vous l'approche à deux niveaux de lecture (aperçu intuitif, puis présentation plus formalisée)? +- Que pensez-vous l'approche à trois niveaux de lecture (aperçu intuitif, puis présentation plus formalisée, puis guide d'entraînement pratique)? - Que pensez-vous de séparer la présentation des méthodes elles-mêmes, et leur usage? ### Présentation des algorithmes diff --git a/chapters/chapter1/1-survol.qmd b/chapters/chapter1/1-survol.qmd index d5c2138..b1b0fe3 100644 --- a/chapters/chapter1/1-survol.qmd +++ b/chapters/chapter1/1-survol.qmd @@ -1,16 +1,21 @@ # Aperçu des méthodes ensemblistes -__Principe__: cette partie propose une présentation intuitive des méthodes ensemblistes à destination des lecteurs souhaitant un aperçu du fonctionnement et des cas d'utilisation de ces méthodes. Elle ne contient aucun formalisme mathématique. +__Principe__: Cette section propose une introduction intuitive aux méthodes ensemblistes. Elle s'adresse aux lecteurs qui souhaitent acquérir une compréhension générale du fonctionnement de ces techniques et identifier rapidement les situations concrètes dans lesquelles elles peuvent être utiles. L'objectif est d'en expliciter les principes-clés sans recourir au formalisme mathématique, afin de rendre le contenu accessible sans prérequis. + ## Que sont les méthodes ensemblistes? -Les approches ensemblistes désignent un ensemble d'algorithmes de _machine learning_ supervisé développés depuis le début des années 1990, c'est-à-dire des méthodes statistiques permettant de prédire une variable-cible $y$ (appelée _target_) à partir d'un ensemble de variables $\mathbf{X}$ (appelées _features_). Elles peuvent par exemple être utilisées pour prédire le salaire d'un salarié, la probabilité de réponse dans une enquête, le niveau de diplôme... Au-delà de leur diversité, ces approches se définissent par un point commun: plutôt que de tenter de construire d'emblée un unique modèle très complexe et très performant, elles visent à obtenir un modèle très performant en combinant intelligemment un ensemble de modèles peu performants, appelés "apprenants faibles" (_weak learner_ ou _base learner_). Le choix de ces modèles de base (des arbres de décision dans la plupart des cas) et la manière dont leurs prédictions sont combinées sont des facteurs déterminants pour la performance de ces approches. Le présent document se concentre sur les méthodes ensemblistes à base d'arbres de décisions qui sont parmi les plus utilisées en pratique. +Les méthodes ensemblistes sont des techniques d'apprentissage supervisé en _machine learning_ développées depuis le début des années 1990. Leur objectif est de prédire une variable-cible $y$ (appelée _target_) à partir d'un ensemble de variables prédictives $\mathbf{X}$ (appelées _features_), que ce soit pour des tâches de classification (prédire une catégorie) ou de régression (prédire une valeur numérique). Elles peuvent par exemple être utilisées pour prédire le salaire d'un salarié, la probabilité de réponse dans une enquête, le niveau de diplôme... + +Plutôt que de s'appuyer sur un seul modèle complexe, les méthodes ensemblistes se caractérisent par la combinaison des prédictions de plusieurs modèles plus simples, appelés "apprenants faibles" (_weak learner_ ou _base learner_), pour créer un modèle performant, dit "apprenant fort" (_strong learner_). + +Le choix de ces modèles de base, ainsi que la manière dont leurs prédictions sont combinées, sont des facteurs déterminants de la performance finale. Le présent document se concentre sur les méthodes à base d'**arbres de décisions**, qui sont parmi les plus utilisées en pratique. Nous allons examiner les fondements de ces méthodes, leurs avantages et inconvénients, ainsi que les algorithmes les plus populaires. + -On distingue **deux grandes familles de méthodes ensemblistes** à base d'arbres de décisions, selon qu'elles s'appuient sur des modèles de base entraînés en parallèle indépendamment les uns des autres, ou au contraire entraînés de façon séquentielle. Lorsque les modèles sont _entrainés en parallèle, indépendamment les uns des autres_, on parle de _bagging_ ou de forêt aléatoire (_random forest_). Les implémentations les plus courantes des forêts aléatoires sont les _packages_ `ranger` en `R` et `scikit-learn` en Python. Lorsque les modèles de base sont _entraînés de manière séquentielle_, chaque modèle de base visant à améliorer la prédiction proposée par l'ensemble des modèles de base précédents, on parle de _boosting_. Ce document aborde essentiellement le _gradient boosting_, qui est l'approche de _boosting_ la plus utilisée actuellement. Les implémentations les plus courantes du _gradient boosting_ sont actuellement `XGBoost`, `CatBoost` et `LightGBM`. ## Pourquoi utiliser des méthodes ensemblistes? -Les méthodes ensemblistes sont particulièrement bien adaptées à de nombreux cas d'usage de la statistique publique, pour deux raisons. D'une, elles sont conçues pour s'appliquer à des _données tabulaires_ (enregistrements en lignes, variables en colonnes), structure de données omniprésente dans la statistique publique. D'autre part, elles peuvent être mobilisées dans toutes les situations où le statisticien mobilise une régression linéaire ou une régression logistisque (imputation, repondération...). +Les méthodes ensemblistes sont particulièrement bien adaptées à de nombreux cas d'usage de la statistique publique, pour deux raisons. D'une part, elles sont conçues pour s'appliquer à des _données tabulaires_ (enregistrements en lignes, variables en colonnes), structure de données omniprésente dans la statistique publique. D'autre part, elles peuvent être mobilisées dans toutes les situations où le statisticien mobilise une régression linéaire ou une régression logistisque (imputation, repondération...). Les méthodes ensemblistes présentent trois avantages par rapport aux méthodes économétriques traditionnelles (régression linéaire et régression logistique): @@ -26,24 +31,33 @@ Elles présentent par ailleurs deux inconvénients rapport aux méthodes économ Si les approches de _deep learning_ sont sans conteste très performantes pour le traitement du langage naturel, des images et du son, leur supériorité n'est pas établie pour les applications reposant sur des données tabulaires. Les comparaisons disponibles dans la littérature concluent en effet que les méthodes ensemblistes à base d'arbres sont soit plus performantes que les approches de _deep learning_ (@grinsztajn2022tree, @shwartz2022tabular), soit font jeu égal avec elles (@mcelfresh2024neural). Ces études ont identifié trois avantages des méthodes ensemblistes: elles sont peu sensibles aux variables explicatives non pertinentes, robustes aux valeurs extrêmes des variables explicatives, et capables d'approximer des fonctions très irrégulières. De plus, dans la pratique les méthodes ensemblistes sont souvent plus rapides à entraîner et moins gourmandes en ressources informatiques, et l'optimisation des hyperparamètres s'avère souvent moins complexe (@shwartz2022tabular). ::: + + ## Comment fonctionnent les méthodes ensemblistes? -Ce paragraphe présente d'abord le modèle de base sur lesquelles sont construites les méthodes ensemblistes à base d'arbres: l'arbre de classification et de régression (@sec-cart-intuition). Elle introduit ensuite les deux grandes familles de méthodes ensemblistes couvertes dans ce document: le _bagging_ et les forêts aléatoires (@sec-rf-intuition), puis le _gradient boosting_ (@sec-gb-intuition). +Ce paragraphe présente d'abord le modèle de base sur lesquelles sont construites les méthodes ensemblistes à base d'arbres: l'arbre de classification et de régression (CART) (@sec-cart-intuition). Bien que simples et intuitifs, les arbres CART sont souvent insuffisants en termes de performance lorsqu'ils sont utilisés isolément. + +Elle introduit ensuite les **deux grandes familles de méthodes ensemblistes** décrites dans ce document: le _bagging_ et les forêts aléatoires (@sec-rf-intuition), et le _gradient boosting_ (@sec-gb-intuition). + ### Le modèle de base: l'arbre de classification et de régression {#sec-cart-intuition} #### Qu'est-ce qu'un arbre CART? -Le modèle de base des méthodes ensemblistes est le plus souvent un arbre de classification et de régression (CART, @breiman1984cart). Un arbre CART est un algorithme prédictif assez simple avec trois caractéristiques essentielles: +Le modèle de base des méthodes ensemblistes est souvent un arbre de classification et de régression (CART, @breiman1984cart). Un arbre CART est un algorithme prédictif qui traite un problème de prédiction complexe en le décomposant en une série de décisions simples, organisées de manière hiérarchique. Ces décisions permettent de segmenter progressivement les données en régions homogènes au sein desquelles il est plus simple de faire des prédictions. Il s'agit d'un outil puissant pour explorer les relations entre les variables explicatives et la variable cible, sans recourir à des hypothèses _a priori_ sur la forme de cette relation. -- L'arbre partitionne l'espace des variables explicatives $X$ en régions (appelées feuilles ou _leaves_) les plus homogènes possible, au sens d'une certaine mesure de l'hétérogénéité; -- Chaque région est définie par un ensemble de conditions, appelées régles de décision (_splitting rules_), qui portent sur les valeurs des variables explicatives (par exemple, une région peut être définie par la condition: $age > 40 \text{ et } statut = 'Cadre'$); -- Une fois l'arbre construit, les prédictions de l'arbre pour chaque région se déduisent des données d'entraînement de façon intuitive: il s'agira de la classe la plus fréquente parmi les observations situées dans cette région dans le cas d'une classification, et de la moyenne des observations situées dans cette région dans le cas d'une régression. -La structure de cet algorithme a deux conséquences importantes: +Trois caractéristiques essentielles définissent un arbre CART : + +- L'arbre partitionne l'espace des variables explicatives $X$ en régions (appelées feuilles ou _leaves_) les plus homogènes possible, au sens d'une mesure de l'hétérogénéité (par exemple, l'entropie ou l'erreur quadratique moyenne). Ces divisions vont permettre de regrouper des observations similaires pour faciliter la prédiction; +- Chaque région est définie par un ensemble de conditions, appelées régles de décision (_splitting rules_), appliquées successivement sur les variables explicatives. Par exemple, une première règle pourrait poser la question : "L'individu est-il en emploi ?", et subdiviser les données en deux groupes (oui/non). Une deuxième règle pourrait alors affiner la segmentation en posant la question : "L'individu est-il diplômé du supérieur ?". Une région spécifique serait ainsi définie par la condition combinée : "l'individu est en emploi et est diplômé du supérieur". +- Une fois l’arbre construit, chaque feuille produit une prédiction en se basant sur les données de la région correspondante. En classification, la prédiction est généralement la classe la plus fréquente parmi les observations de la région. En régression, la prédiction est souvent la moyenne des valeurs observées dans la région. + + +Deux conséquences importantes découlent de cette construction : +- L'algorithme CART ne fait **aucune hypothèse _a priori_** sur la relation entre les variables explicatives $\mathbf{X}$ et la variable cible $y$. C'est une différence majeure avec les modèles économétriques standard, tels que la régression linéaire qui suppose une relation linéaire de la forme $E(y) = \mathbf{X \beta}$. +- **L'arbre final est une fonction constante par morceaux**: la prédiction est **la même** pour toutes les observations situées dans la même région ; elle ne peut varier qu'entre régions. -- L'algorithme CART ne fait **aucune hypothèse _a priori_ sur la relation entre $X$ et $y$** et se laisse au contraire guider par les données. Par exemple, on ne suppose pas qu'il existe une relation linéaire de type $y = \mathbf{X \beta}$. -- **L'arbre final est une fonction constante par morceaux**: la prédiction est identique pour toutes les observations situées dans la même région, et ne varie que d'une région à l'autre. Illustration, et représentation graphique (sous forme d'arbre et de graphique). @@ -62,17 +76,23 @@ Troisième difficulté: à quel moment faut-il s'arrêter? => critère d'arrêt, Les arbres CART présentent plusieurs avantages: leur principe est simple, ils sont aisément interprétables et peuvent faire l'objet de représentations graphiques intuitives. Par ailleurs, la flexibilité offerte par le partitionnement récursif assure que les arbres obtenus reflètent les corrélations observées dans les données d'entraînement. -Ils souffrent néanmoins de deux limites. D'une part, les arbres CART ont souvent un __pouvoir prédictif faible__ qui en limite l'usage. D'autre part, ils sont __peu robustes et instables__: on dit qu'ils présentent une __variance élevée__. Ainsi, un léger changement dans les données (par exemple l'ajout ou la suppression de quelques observations) peut entraîner des modifications significatives dans la structure de l'arbre et dans la définition des feuilles. Les arbres CART sont notamment sensibles aux valeurs extrêmes, aux points aberrants et au bruit statistique. De plus, les prédictions des arbres CART sont sensibles à de petites fluctuations des données: celles-ci peuvent aboutir à ce qu'une partie des observations change brutalement de feuille et donc de valeur prédite. +Ils souffrent néanmoins de deux limites. D'une part, les arbres CART ont souvent un __pouvoir prédictif faible__ qui en limite l'usage. D'autre part, ils sont __peu robustes et instables__: on dit qu'ils présentent une __variance élevée__. Ainsi, un léger changement dans les données (par exemple l'ajout ou la suppression de quelques observations) peut entraîner des modifications significatives dans la structure de l'arbre et dans la définition des régions utilisées pour la prédiction (feuilles). Les arbres CART sont notamment sensibles aux valeurs extrêmes, aux points aberrants et au bruit statistique. De plus, les prédictions des arbres CART sont sensibles à de petites fluctuations des données d'échantillonnage: celles-ci peuvent aboutir à ce qu'une partie des observations change brutalement de feuille et donc de valeur prédite. -Les deux familles de méthodes ensemblistes présentées ci-dessous (_bagging_, _random forests_ et _gradient boosting_) combinent un grand nombre d'arbres de décision pour en surmonter les deux limites: il s'agit d'obtenir un modèle dont le pouvoir prédictif est élevé et dont les prédictions sont stables. La différence essentielle entre ces deux familles portent sur la façon dont les arbres sont entraînés. +Ces limites motivent l'utilisation des deux familles de méthodes ensemblistes présentées dans la suite (le _bagging_, dont la _random forests_, et le _gradient boosting_), qui s’appuient sur un grand nombre d’arbres pour accroître à la fois la précision et la stabilité des prédictions. La différence essentielle entre ces deux familles portent sur la façon dont les arbres sont entraînés. -### Le _bagging_ (Bootstrap Aggregating) et les forêts aléatoires {#sec-rf-intuition} -Le _bagging_ (Bootstrap Aggregating) et les forêts aléatoires constituent une famille de méthodes ensemblistes dont le point commun est de combiner des modèles de bases qui ont été entraînés indépendamment les uns des autres. +::: {.callout-note title="Les familles de méthodes ensemblistes"} +Les méthodes ensemblistes basées sur des arbres de décision se répartissent en **deux grandes familles**, qui se distinguent selon la manière dont les modèles de base sont construits. Lorsque les modèles de base sont entraînés en parallèle et indépendamment les uns des autres, on parle de _bagging_ (_Bootstrap Aggregating_). La _forêt aléatoire_ (_random forest_) est une variante particulièrement performante du _bagging_. Lorsque les modèles de base sont _entraînés de manière séquentielle_, chaque modèle visant à corriger les erreurs des modèles précédents, on parle de _boosting_. Ce document aborde essentiellement le _gradient boosting_, qui est l'approche de _boosting_ la plus utilisée actuellement. +::: + + +### Le _bagging_ (Bootstrap Aggregating) et les forêts aléatoires {#sec-rf-intuition} #### Le _bagging_ -Le _bagging_, ou _Bootstrap Aggregating_ (@breiman1996bagging), est une méthode ensembliste qui comporte trois étapes principales: +Le _bagging_ (Bootstrap Aggregating) est une méthode ensembliste qui repose sur l’agrégation des prédictions de plusieurs modèles individuels, entraînés indépendamment les uns des autres, pour construire un modèle global plus performant (@breiman1996bagging). Cette approche constitue également le socle des forêts aléatoires, qui en sont une version améliorée. + +Le bagging offre deux avantages majeurs par rapport aux arbres de décision CART : une meilleure capacité prédictive et une plus grande stabilité des prédictions. Cette amélioration découle de la stratégie d'entraînement. Au lieu d'entraîner un seul modèle sur l'ensemble des données, le bagging procède en trois étapes principales: - __Tirage de sous-échantillons aléatoires__: À partir du jeu de données initial, plusieurs sous-échantillons sont générés par échantillonnage aléatoire avec remise (_bootstrapping_). Chaque sous-échantillon a la même taille que le jeu de données original, mais peut contenir des observations répétées, tandis que d'autres peuvent être omises. - __Entraînement parallèle__: Un arbre est entraîné sur chaque sous-échantillon de manière indépendante. Ces arbres sont habituellement assez complexes et profonds. @@ -80,25 +100,40 @@ Le _bagging_, ou _Bootstrap Aggregating_ (@breiman1996bagging), est une méthode ![Représentation schématique d'un algorithme de _bagging_](/figures/bagging.svg){#fig-bagging} -La figure @fig-bagging propose une représentation schématique du _bagging_: tout d'abord, on tire des sous-échantillons aléatoires des données d'entraînement. Ensuite, un arbre est entraîné sur chaque sous-échantillon. Enfin, les arbres sont combinés de façon à obtenir la prédiction finale. +La @fig-bagging propose une représentation schématique du _bagging_: d'abord, des sous-échantillons sont générés aléatoires avec remise à partir du jeu de données d'entraînement. Ensuite, des arbres de décision sont entraînés indépendamment sur ces sous-échantillons. Enfin, leurs prédictions sont agrégées pour obtenir les prédictions finales. On procède généralement au vote majoritaire (la classe prédite majoritairement par les arbres) dans un problème de classification, et à la moyenne dans un problème de régression. + +L'efficacité du _bagging_ provient de la réduction de la variance qui est permise par l'agrégation des prédictions. Chaque arbre est entraîné sur un sous-échantillon légèrement différent, sujet à des fluctuations aléatoires. L'agrégation des prédictions (par moyenne ou vote majoritaire) de tous les arbres réduit la sensibilité du modèle final aux fluctuations des données d’entraînement. Le modèle final est ainsi plus robuste et plus précis que chacun des arbres pris individuellement. + - Illustration avec un cas d'usage de classification en deux dimensions. -L'intuition qui explique l'efficacité du _bagging_ est la suivante: en diversifiant les données d'entraînement par le tirage d'échantillons aléatoires, on obtient un grand nombre d'arbres différents les uns des autres et qui, pris dans leur ensemble, constituent un modèle plus prédictif et plus stable que chaque arbre pris isolément. Une image fréquemment employée pour décrire le _bagging_ est celle d'un collège de juges. Chaque juge a sa propre façon de juger, qui est imparfaite et qui dépend des cas qu'il a déjà rencontrés. Il peut donc rendre une décision complètement erronée dans telle ou telle situation, rendant son verdict instable et peu fiable. Mais si le verdict repose sur l'opinion majoritaire d'un ensemble de juges différents les uns des autres, il est probable que le jugement sera plus robuste et plus fiable. +Malgré ses avantages, le _bagging_ souffre d'une limite importante qui provient de la **corrélation entre les arbres**. En effet, malgré le tirage aléatoire des sous-échantillons, les arbres présentent souvent des structures similaires, car les règles de décision sous-jacentes restent généralement assez proches. Cette corrélation réduit l’efficacité de l’agrégation et limite les gains en performance. + +Pour réduire cette corrélation entre arbres, les forêts aléatoires introduisent une étape supplémentaire de randomisation. Leur supériorité prédictive explique pourquoi le _bagging_ seul est rarement utilisé en pratique. Néanmoins, les forêts aléatoires tirent leur efficacité des principes fondamentaux du _bagging_. + + -Le _bagging_ présente donc deux avantages par rapport aux arbres CART: un pouvoir prédictif plus élevé et des prédictions plus stables. L'inconvénient du _bagging_ réside dans la corrélation des arbres entre eux: malgré l'échantillonnage des données, les arbres ont souvent une structure similaire car les relations entre variables restent à peu près les mêmes dans les différents sous-échantillons. Ce phénomène de corrélation entre arbres est le principal frein à la puissance prédictive du _bagging_, et c'est pour surmonter (ou au moins minimiser) ce problème que les forêts aléatoires ont été mises au point. Le pouvoir prédictif plus élevé des forêts aléatoires explique pourquoi le _bagging_ est très peu utilisé en pratique aujourd'hui. -#### Les _random forests_ +#### Les forêts aléatoires (_random forests_) + +Les forêts aléatoires (_random forests_, @breiman2001random) sont une variante du _bagging_ qui vise à produire des modèles très performants en conciliant deux objectifs: maximiser le pouvoir prédictif des arbres pris isolément, et minimiser la corrélation entre ces arbres (le problème inhérent au _bagging_). + +Pour atteindre ce second objectif, la forêt aléatoire introduit une nouvelle source de randomisation: la **sélection aléatoire de variables**. Lors de la construction de chaque arbre, au lieu d'utiliser toutes les variables disponibles pour déterminer la meilleure séparation à chaque nœud, un sous-ensemble aléatoire de variables est sélectionné. En limitant la quantité d’information à laquelle chaque arbre a accès au moment de chaque nouvelle division, cette étape supplémentaire contraint mécaniquement les arbres à être plus diversifiés (car deux arbres ne pourront plus nécessairement choisir les mêmes variables pour les mêmes séparations). Cela réduit significativement la corrélation entre les arbres, améliorant ainsi l'efficacité de l'agrégation. L'ensemble des prédictions devient ainsi plus précis et moins sujet aux fluctuations aléatoires. -Les forêts aléatoires (_random forests_, @breiman2001random) sont une variante du _bagging_ qui vise à produire des modèles très performants en conciliant deux objectifs: maximiser le pouvoir prédictif des arbres pris isolément, et minimiser la corrélation entre ces arbres (le problème inhérent au _bagging_). Pour atteindre ce second objectif, la forêt aléatoire introduit une nouvelle source de variation aléatoire dans la construction des arbres: au moment de choisir une règle de décision pour diviser une région en deux sous-régions, la procédure d'entraînement ne considère qu'**un sous-ensemble de variables sélectionnées aléatoirement**, et non toutes les variables. Cette randomisation supplémentaire a pour effet mécanique d'aboutir à des arbres plus diversifiés (parce que des arbres différents ne peuvent pas mobiliser les mêmes variables au même moment) et donc de **réduire la corrélation entre arbres**, ce qui permet d'améliorer la performance et la stabilité du modèle agrégé. Un enjeu important de l'entraînement d'une forêt aléatoire est l'arbitrage entre puissance prédictive des arbres et corrélation entre arbres. ![Représentation schématique d'un algorithme de forêt aléatoire](/figures/rf.svg){#fig-rf} -La figure @fig-rf propose une représentation schématique d'une forêt aléatoire. La logique d'ensemble est identique à celle du _bagging_: combinés de façon à obtenir la prédiction finale. La seule différence est que la liste des variables utilisables pour construire des règles de décision varie à chaque étape de l'entraînement. Cette restriction de la liste des variables considérées permet de réduire l'utilisation des variables les plus prédictives et de mieux mobiliser l'information disponible dans les variables peu corrélées avec $y$. +La figure @fig-rf propose une représentation schématique d'une forêt aléatoire. La logique d'ensemble reste la même que celle du _bagging_. L'échantillonnage _bootstrap_ est inchangé, mais l'étape de construction de chaque arbre est modifiée pour n'utiliser, à chaque nouvelle division, qu'un sous-ensemble aléatoire de variables. L'agrégation des prédictions se fait ensuite de la même manière que pour le _bagging_. + + + +Le principal enjeu de l'entraînement d'une forêt aléatoire est de trouver le bon arbitrage entre puissance prédictive des arbres individuels (que l'on souhaite maximiser) et corrélation entre les arbres (que l'on souhaite minimiser). L'optimisation des hyper-paramètres des forêts aléatoires (dont le plus important est le nombre de variables sélectionnées à chaque noeud) vise précisément à choisir le meilleur compromis possible entre pouvoir prédictif invividuel et diversité des arbres. -Contrairement au _bagging_, les forêts aléatoires sont un algorithme qui est très largement employé pour plusieurs raisons: les forêts aléatoires ont un faible nombre d'hyperparamètres, sont généralement peu sensibles aux valeurs de ces hyperparamètres et proposent de bonnes performances avec les valeurs par défaut. Les forêts aléatoires sont toutefois sujettes au problème de surapprentissage (voir encadré), bien que dans une mesure moindre que le _gradient boosting_. +Les forêts aléatoires sont très populaires car elles sont faciles à implémenter, peu sensibles aux hyperparamètres (elles fonctionnent bien avec les valeurs par défaut de la plupart des implémentations proposées en `R` ou en Python), et offrent de très bonnes performances dans de nombreux cas. Cependant, comme toute méthode d'apprentissage automatique, elles restent sujettes au surapprentissage (voir encadré), bien que dans une moindre mesure par rapport à d'autres techniques comme le _gradient boosting_. -Les forêts aléatoires présentent également un avantage de taille: __il est possible d'évaluer la qualité d'une forêt aléatoire en utilisant les données sur lesquelles elle a été entraînée__, sans avoir besoin d'un jeu de test séparé. En effet, lors de la construction de chaque arbre, l'échantillonnage aléatoire implique que certaines observations ne sont pas utilisées pour entraîner cet arbre; ces observations sont dites _out-of-bag_. On peut donc construire pour chaque observation une prédiction qui agrège uniquement les arbres pour lesquels cette observation est _out-of-bag_; cette prédiction n'est pas affectée par le surapprentissage. De cette façon, il est possible d'évaluer correctement la performance de la forêt aléatoire. + + + ::: {.callout-note title="Qu'est-ce que le surapprentissage?"} Le surapprentissage (_overfitting_) est un phénomène fréquent en _machine learning_ où un modèle apprend non seulement les relations sous-jacentes entre la variable cible et les variables explicatives, mais également le bruit présent dans les données d'entraînement. En capturant ces fluctuations aléatoires plutôt que les tendances générales, le modèle affiche une performance excellente mais trompeuse sur les données d'entraînement, et s'avère médiocre sur des données nouvelles ou de test, car il ne parvient pas à généraliser efficacement. @@ -110,7 +145,9 @@ Le surapprentissage (_overfitting_) est un phénomène fréquent en _machine lea ### Le _gradient boosting_ {#sec-gb-intuition} -Alors que les forêts aléatoires construisent un ensemble d'arbres complexes et indépendants les uns des autres, le _gradient boosting_ adopte une autre approche, dans laquelle les arbres sont peu complexes et entraînés de façon séquentielle, chaque arbre essayant d'améliorer la prédiction proposée par l'ensemble des arbres précédents. Bien qu'elles ressemblent fortement aux forêts aléatoires en apparence, il est important de noter que les approches de _boosting_ reposent sur des fondements théoriques très différents. La logique du *gradient boosting* est illustrée par la figure @fig-gb: +Contrairement aux forêts aléatoires qui combinent des arbres de décision complexes et indépendants, le _gradient boosting_ construit un ensemble d'arbres plus simples et entraînés de manière séquentielle. Chaque arbre vise à corriger les erreurs commises par les arbres précédents, améliorant progressivement la précision du modèle global. Cette approche repose sur des fondements théoriques très différents de ceux du _bagging_. + +La logique du *gradient boosting* est illustrée par la figure @fig-gb: ![Représentation schématique d'un algorithme de _gradient boosting_](/figures/gb.svg){#fig-gb} @@ -119,8 +156,8 @@ Alors que les forêts aléatoires construisent un ensemble d'arbres complexes et - Ce processus est répété en ajoutant des modèles simples, chaque modèle corrigeant les erreurs commises par l'ensemble des modèles précédents; - Tous ces modèles sont finalement combinés (souvent par une somme pondérée) pour obtenir un modèle complexe et performant. -Il s'avère que le _gradient boosting_ offre des performances prédictives particulièrement élevées. Toutefois, cet avantage incontestable ne doit pas masquer les sérieux inconvénients de cette approche: les algorithmes de _gradient boosting_ comprennent un nombre élevé d'hyperparamètres et sont plus sensibles que les forêts aléatoires aux valeurs de ces hyperparamètres. Par ailleurs, ces algorithmes se caractérisent par un risque élevé de surapprentissage, et sont assez sensibles au bruit statistique et aux éventuelles erreurs sur la variable-cible. Par conséquent, l'usage de ces algorithmes est plus délicat, et l'optimisation de leurs hyperparamètres est une étape importante qui peut prendre un certain temps et demande une bonne connaissance des algorithmes. Enfin, il est indispensable de disposer d'un jeu de données de test (non utilisées pendant l'entraînement) pour évaluer la qualité d'un modèle de _boosting_. +Le _gradient boosting_ offre des performances élevées mais exige une attention particulière portée sur la configuration des hyperparamètres et sur la prévention du surapprentissage. En particulier, les hyperparamètres sont nombreux et, contrairement aux forêts aléatoires, nécessitent un ajustement minutieux pour obtenir des résultats optimaux. Une mauvaise configuration peut conduire à des performances médiocres ou à un surapprentissage. L'utilisation du _gradient boosting_ nécessite donc une bonne connaissance du fonctionnement des algorithmes. En outre, les algorithmes de _gradient boosting_ peuvent être sensibles au bruit dans les données et aux erreurs dans la variable cible. Un prétraitement rigoureux des données est donc essentiel. Enfin, une validation rigoureuse sur un jeu de données de test indépendant (non utilisé pendant l'entraînement) est indispensable pour évaluer la qualité du modèle obtenu par _gradient boosting_.