GAM : une courbe par variable, additionnées en un seul modèle

Tu veux expliquer un salaire par l’année, l’âge et le niveau d’études. Une droite par variable est trop raide ; un modèle libre de tout croiser avec tout perd sa lisibilité. Entre les deux, il existe un compromis : laisser chaque variable dessiner sa propre courbe, puis tout additionner. À la fin, tu sauras ce qu’est un modèle additif généralisé (GAM), ce que le mot « généralisé » y ajoute, et ce que ce compromis t’interdit.

Sommaire

L’essentiel en 30 secondes

  • Un GAM remplace chaque terme linéaire d’une régression multiple par une fonction lisse propre à la variable.
  • Les effets s’additionnent, donc le modèle reste lisible variable par variable.
  • Comme la régression logistique, un GAM peut modéliser le logit d’une probabilité : il sert alors à classer.
  • Chaque courbe peut se construire à partir d’une spline, d’un terme linéaire ou, pour une variable qualitative, d’un terme facteur.
  • Contrepartie : les interactions entre variables passent inaperçues, sauf à les ajouter à la main.

Les deux hypothèses cachées dans une droite

Un modèle linéaire standard repose sur deux hypothèses discrètes. La première est l’additivité : l’effet d’une variable ne dépend pas des valeurs des autres. La seconde est la linéarité : une unité de plus produit toujours le même effet sur la réponse, quel que soit le point de départ.

On peut assouplir la première en ajoutant un terme d’interaction, le produit de deux variables. On peut contourner la seconde avec des puissances, comme dans la régression polynomiale, qui reste un modèle linéaire en ses coefficients et s’ajuste donc par les mêmes moindres carrés.

Un GAM prend un autre chemin : il lâche la linéarité mais garde l’additivité. Chaque variable peut agir de façon très courbe, à condition que son effet s’ajoute à celui des autres plutôt que de s’y mêler. Tout ce qui suit découle de ce choix.

Une courbe par variable, puis on additionne

Voici le modèle, écrit pour p variables explicatives :

    \[ Y = \beta_0 + f_1(X_1) + f_2(X_2) + \dots + f_p(X_p) + \epsilon.\]

Lis-le terme à terme. Y est la réponse à prédire, \beta_0 une constante, \epsilon l’erreur. Chaque f_j est une fonction non linéaire, une spline par exemple, appliquée à la seule variable X_j : c’est elle qui remplace le terme \beta_j X_j de la régression multiple.

Pense à une note de restaurant. Chaque ligne est calculée à part, selon le plat commandé, et le total est la somme des lignes. Cela marche tant que le prix d’un plat ne dépend pas de ce que tu as pris à côté ; si une formule changeait le prix du dessert selon l’entrée, il faudrait un modèle qui sait croiser les variables. C’est exactement la frontière du GAM.

Ce que tu y gagnes tient en une phrase : la structure additive préserve la lecture de chaque variable isolément. Tu isoles l’effet d’une variable en traçant sa courbe f_j, les autres étant maintenues constantes. Un modèle non linéaire pleinement libre te ferait perdre cette lecture.

Pourquoi on dit « généralisé »

Le mot vient d’une famille plus large, les modèles linéaires généralisés. Un tel modèle se définit par trois éléments : une distribution pour la réponse (gaussienne pour la régression linéaire classique, de Bernoulli pour la régression logistique), une combinaison linéaire des variables, et une fonction de lien qui relie l’espérance de la réponse à cette combinaison.

Le lien s’adapte à la nature de la réponse. En régression linéaire, c’est l’identité. En régression logistique, c’est le logit, qui garde les probabilités entre 0 et 1. Pour un comptage, comme le nombre de clients servis en une heure, la régression de Poisson utilise le logarithme : les prédictions restent positives, alors qu’une droite pourrait en produire de négatives.

Le GAM reprend le même geste. Pour classer plutôt que mesurer, on remplace la réponse numérique par le logit d’une probabilité p(X) :

    \[ \log\frac{p(X)}{1-p(X)} = \beta_0 + f_1(X_1) + \dots + f_p(X_p).\]

Le membre de droite est inchangé : toujours une somme de courbes. Seul le membre de gauche change, et c’est lui qui garantit une probabilité valide. On retrouve ainsi, côté classification, la même extension que celle qui mène de la régression linéaire à la régression logistique.

💡 Intuition « Additif » dit comment les variables se combinent ; « généralisé » dit comment la somme se relie à la réponse. Deux réglages indépendants, que tu peux lire séparément.

Trois briques pour fabriquer une courbe

Le GAM n’impose pas de recette pour chaque f_j : c’est une fonction non linéaire « arbitraire », et la spline n’en est qu’un exemple. Tu choisis la brique selon la variable, et tu peux mélanger les trois dans un même modèle.

  • La spline pour une variable numérique dont tu ne veux pas fixer la forme d’avance.
  • Le terme linéaire pour une variable dont la relation est bien droite, comme dans la boîte du milieu du schéma.
  • Le terme facteur, adapté à une variable qualitative comme un niveau d’études.

Chaque brique est traitée pour elle-même, puis la somme les réunit : c’est la structure additive qui rend ce mélange possible.

Le GAM sur un cas : salaire, année, âge, études

Reprenons la question de départ : comment un salaire (wage) varie-t-il avec l’année, l’âge et le niveau d’études ? Tu laisses l’année et l’âge dessiner chacune leur courbe, et tu traites le niveau d’études comme une variable à catégories. Dans l’extrait ci-dessous, le préfixe In [24]: marque la 24ᵉ cellule exécutée d’une session interactive.

La bibliothèque pyGAM écrit chaque terme du modèle noir sur blanc.

In [24]: gam_full = LinearGAM(s_year + s_age + f_education)
         gam_full = gam_full.fit(X, Wage['wage'])

s_year et s_age sont des termes lisses, des splines, appliqués à l’année et à l’âge ; f_education est un terme facteur, adapté à la variable qualitative. Leur somme, passée telle quelle à LinearGAM, reproduit exactement la structure \beta_0 + f_1(X_1) + f_2(X_2) + f_3(X_3) vue plus haut. X regroupe les prédicteurs, et la seconde ligne ajuste le modèle pour prédire wage.

📌 À retenir Une ligne de code, trois termes séparés par des + : le code a la même forme que la formule. C’est la meilleure preuve que « additif » n’est pas une image, mais la structure même du modèle.

Ce que le GAM ne voit pas

La contrepartie de l’additivité est nette : le modèle suppose que l’effet d’une variable ne bouge jamais avec la valeur d’une autre. Si cette hypothèse est fausse, aucune courbe f_j ne peut le dire. Tu peux réparer à la main, avec une fonction non linéaire de deux variables f_{ij}(X_i, X_j), mais tu sacrifies alors la simplicité de lecture qui faisait l’intérêt du GAM.

Pour mesurer ce que cela peut coûter, regarde une régression linéaire sur des données de publicité. Quand on ajoute un terme d’interaction entre télévision et radio, le R^2 passe de 89,7 % à 96,8 % : les deux médias se renforcent, et répartir un budget entre les deux rapporte plus que le concentrer sur un seul. Un modèle purement additif passerait à côté de cette synergie.

Les arbres de décision partent d’une tout autre logique : ils découpent l’espace des variables en régions rectangulaires et prédisent une valeur constante dans chacune. Ils captent donc nativement des interactions complexes, au prix d’une interprétabilité moindre.

Régression linéaire GAM Arbre de décision
Effet d’une variable proportionnel courbe lisse libre paliers constants
Variables combinées par somme par somme par régions croisées
Interactions seulement si ajoutées seulement si ajoutées captées nativement
Lecture coefficient courbe de chaque variable règles successives

⚠️ Piège Un GAM se lit variable par variable, mais cette lecture suppose l’additivité. Si l’effet réel d’une variable dépend de la valeur d’une autre, le modèle n’a aucun moyen de le représenter, et ses courbes ne te préviendront pas.