Formation ML / Supervised Regression

Gradient Boosting

Intermediaire 45 min 12 sections

Decouvrez le Gradient Boosting, une technique d'ensemble qui construit des modeles sequentiellement pour corriger les erreurs des precedents.

Objectifs d'apprentissage

  • Comprendre la difference entre Bagging et Boosting
  • Implementer Gradient Boosting avec scikit-learn
  • Comparer avec XGBoost et LightGBM
  • Tuner les hyperparametres cles

Prerequis

Module Random Forest recommande

Theorie

Bagging vs Boosting

Il existe deux approches principales pour combiner plusieurs modeles:

Bagging (Random Forest):

  • Arbres entraines en parallele
  • Chaque arbre est independant
  • Prediction = moyenne des predictions
  • Reduit la variance (overfitting)

Boosting (Gradient Boosting):

  • Arbres entraines sequentiellement
  • Chaque arbre corrige les erreurs du precedent
  • Prediction = somme ponderee des predictions
  • Reduit le biais (underfitting)

Intuition du Gradient Boosting:

  1. Arbre 1 fait des predictions
  2. On calcule les erreurs (residus)
  3. Arbre 2 apprend a predire ces erreurs
  4. On repete jusqu'a convergence

La prediction finale: $\hat{y} = \sum_{i=1}^{n} \alpha_i \cdot h_i(x)$

Ou $h_i$ est le i-eme arbre et $\alpha_i$ son poids (learning rate).

Theorie

Schema: Fonctionnement du Gradient Boosting

Entrainement sequentiel - Etape par etape:

flowchart LR subgraph Etape1 ["Etape 1"] D1["y reel"] T1["Arbre 1"] P1["Prediction 1"] D1 --> T1 --> P1 end subgraph Etape2 ["Etape 2"] E1["Erreur 1
y - pred1"] T2["Arbre 2"] P2["Corrige
erreur 1"] E1 --> T2 --> P2 end subgraph Etape3 ["Etape 3"] E2["Erreur 2
restante"] T3["Arbre 3"] P3["Corrige
erreur 2"] E2 --> T3 --> P3 end P1 --> E1 P2 --> E2 style D1 fill:#E5D7F5,color:#1A1A1A style T1 fill:#d4edda,color:#1A1A1A style T2 fill:#d4edda,color:#1A1A1A style T3 fill:#d4edda,color:#1A1A1A style E1 fill:#f8d7da,color:#1A1A1A style E2 fill:#f8d7da,color:#1A1A1A style P1 fill:#fff3cd,color:#1A1A1A style P2 fill:#fff3cd,color:#1A1A1A style P3 fill:#fff3cd,color:#1A1A1A

Prediction finale = Somme des contributions:

flowchart LR P1["Arbre 1
300k EUR"] PLUS1["+"] P2["Arbre 2
+15k
x learning_rate"] PLUS2["+"] P3["Arbre 3
+8k
x learning_rate"] EQ["="] F["323k EUR"] P1 --> PLUS1 --> P2 --> PLUS2 --> P3 --> EQ --> F style P1 fill:#d4edda,color:#1A1A1A style P2 fill:#fff3cd,color:#1A1A1A style P3 fill:#fff3cd,color:#1A1A1A style F fill:#F7E64D,color:#1A1A1A style PLUS1 fill:#fff,color:#1A1A1A style PLUS2 fill:#fff,color:#1A1A1A style EQ fill:#fff,color:#1A1A1A

Exemple concret:

  • Maison reelle: 350k EUR
  • Arbre 1 predit: 300k (erreur = +50k)
  • Arbre 2 corrige: +15k (erreur restante = +35k)
  • Arbre 3 corrige: +8k (erreur restante = +27k)
  • ... et ainsi de suite jusqu'a convergence

Comparaison Bagging vs Boosting:

flowchart TB subgraph BAG ["BAGGING - Parallele"] DB["Donnees"] BA1["Arbre 1"] BA2["Arbre 2"] BA3["Arbre 3"] BM["Moyenne"] DB --> BA1 DB --> BA2 DB --> BA3 BA1 --> BM BA2 --> BM BA3 --> BM end subgraph BOOST ["BOOSTING - Sequentiel"] DBo["Donnees"] Bo1["Arbre 1"] Bo2["Arbre 2"] Bo3["Arbre 3"] BS["Somme"] DBo --> Bo1 Bo1 --> Bo2 Bo2 --> Bo3 Bo3 --> BS end style BM fill:#C09CF0,color:#1A1A1A style BS fill:#F7E64D,color:#1A1A1A style DB fill:#E5D7F5,color:#1A1A1A style DBo fill:#E5D7F5,color:#1A1A1A
Avance Exercice manuel: A vous de calculer!

Objectif: Comprendre le boosting a la main (residus, apprentissage sequentiel).

CONTEXTE

Vous predisez le prix d'une maison (valeur reelle : 300 000 EUR).

Le premier modele (arbre faible) predit : $\hat{y}_1 = 250\,000$ EUR

Learning rate : $\eta = 0.5$

PARTIE 1 : Calcul du residu

1.1) Calculez le residu $r_1 = y_{vrai} - \hat{y}_1$

1.2) Que represente ce residu ?

PARTIE 2 : Deuxieme modele

Le 2eme modele apprend a predire le residu et predit : $\hat{r}_2 = 40\,000$ EUR

2.1) Calculez la prediction combinee : $\hat{y}_2 = \hat{y}_1 + \eta \cdot \hat{r}_2$

2.2) Quel est le nouveau residu ?

PARTIE 3 : Troisieme iteration

Le 3eme modele predit un residu de : $\hat{r}_3 = 25\,000$ EUR

3.1) Calculez $\hat{y}_3$

3.2) Quelle est l'erreur finale ?

PARTIE 4 : Interpretation

4.1) Pourquoi utilise-t-on un learning rate < 1 ?

4.2) Quel est le risque d'un learning rate trop eleve ?

Avance Solution de l'exercice manuel

SOLUTION DETAILLEE

PARTIE 1 : Calcul du residu

1.1) Residu :

$$r_1 = 300\,000 - 250\,000 = \textcolor{#e74c3c}{\mathbf{50\,000}}$$ EUR

1.2) Le residu represente l'erreur du modele precedent. Le prochain modele essaiera de corriger cette erreur.

PARTIE 2 : Deuxieme modele

2.1) Prediction combinee :

$$\hat{y}_2 = 250\,000 + 0.5 \times 40\,000$$

$$= 250\,000 + 20\,000 = \textcolor{#F7E64D}{\mathbf{270\,000}}$$ EUR

2.2) Nouveau residu :

$$r_2 = 300\,000 - 270\,000 = \textcolor{#e67e22}{30\,000}$$ EUR

PARTIE 3 : Troisieme iteration

3.1) Prediction finale :

$$\hat{y}_3 = 270\,000 + 0.5 \times 25\,000$$

$$= 270\,000 + 12\,500 = \textcolor{#27ae60}{\mathbf{282\,500}}$$ EUR

3.2) Erreur finale :

$$\text{Erreur} = |300\,000 - 282\,500| = \textcolor{#e74c3c}{17\,500}$$ EUR (5.8%)

IterationPredictionResidu
1250 00050 000
2270 00030 000
3282 50017 500

PARTIE 4 : Interpretation

4.1) Learning rate < 1 :

  • Evite le sur-apprentissage
  • Chaque modele contribue partiellement
  • Plus stable mais necessite plus d'iterations

4.2) Learning rate trop eleve :

  • Risque d'overfitting
  • Oscillations autour de la solution
  • Moins de generalisation

Legende : $\textcolor{#e74c3c}{Rouge}$: residus/erreurs, $\textcolor{#F7E64D}{Jaune}$: predictions intermediaires, $\textcolor{#27ae60}{Vert}$: resultat final

Code

Explorer les donnees

Cliquez sur "Executer" pour voir le resultat
Contenu verrouille section restante
5 / 12

Continuez votre apprentissage

Vous avez explore 5 sections de ce module. Connectez-vous pour debloquer le reste du cours, incluant les exercices pratiques et les solutions.

Console Python

Raccourcis clavier
Ctrl/Cmd+Enter Executer
Ctrl/Cmd+Shift+/ Commenter
Tab Indenter
Shift+Tab Desindenter
Ctrl/Cmd+Z Annuler
Ctrl/Cmd+Y Retablir
Ctrl+Enter pour executer
Cliquez sur "Executer" pour voir le resultat