Aller au contenu
Kudos AI

Fonctions de base et polynômes par morceaux

Une seule idée couvre la régression polynomiale et la régression en escalier, et s’étend à tout ce que vous savez écrire : transformez le prédicteur, puis ajustez un modèle linéaire sur les colonnes transformées.

IntermédiaireModule 125 min · 100 XP
Une droite qui échoue sur des données courbes, puis le même ajustement par moindres carrés appliqué à des colonnes transformées, et enfin deux cubiques se rejoignant en un nœud avec un saut visible que les contraintes referment.

La régression linéaire suppose que l’effet d’un prédicteur suit une droite. Quand ce n’est pas le cas, l’instinct habituel est d’aller chercher un autre algorithme. Il existe un geste moins coûteux : garder les moindres carrés et changer ce sur quoi vous régressez.

L’idée des fonctions de base

Choisissez une famille de transformations de XX, fixées et connues à l’avance :

b1(X), b2(X), …, bK(X),b_1(X),\ b_2(X),\ \dots,\ b_K(X),

puis ajustez

yi=β0+β1b1(xi)+β2b2(xi)+⋯+βKbK(xi)+εi.y_i = \beta_0 + \beta_1 b_1(x_i) + \beta_2 b_2(x_i) + \cdots + \beta_K b_K(x_i) + \varepsilon_i .

Deux méthodes familières en sont des cas particuliers.

  • La régression polynomiale prend bj(x)=xjb_j(x) = x^j.
  • Les fonctions en escalier découpent l’intervalle en c1,…,cKc_1, \dots, c_K et prennent bj(x)=I(cj≤x<cj+1)b_j(x) = I(c_j \le x < c_{j+1}), un indicateur qui vaut 1 à l’intérieur de la classe et 0 en dehors. C’est un ajustement constant par morceaux, prisé là où existent des points de rupture naturels - des tranches d’âge de cinq ans, par exemple - et médiocre là où il n’y en a pas, puisqu’une classe ne peut montrer aucune tendance en son sein.

Le mot décisif est fixées. Les bjb_j sont choisies avant l’ajustement, elles ne sont pas estimées : le modèle est donc un modèle linéaire dans les colonnes transformées. Les moindres carrés s’appliquent sans changement, et tout ce qui est bâti dessus aussi : erreurs types, statistiques FF, intervalles de confiance. Vous avez acheté de la courbure sans quitter le modèle linéaire.

Polynômes par morceaux

Au lieu d’un unique polynôme global, ajustez un polynôme de bas degré distinct dans chaque région. Placez des nœuds ξ1,…,ξK\xi_1, \dots, \xi_K le long de l’intervalle et ajustez K+1K + 1 cubiques, une par région. Avec un nœud unique en x=50x = 50 :

f(x)={β01+β11x+β21x2+β31x3x<50β02+β12x+β22x2+β32x3x≥50f(x) = \begin{cases} \beta_{01} + \beta_{11}x + \beta_{21}x^2 + \beta_{31}x^3 & x < 50 \\ \beta_{02} + \beta_{12}x + \beta_{22}x^2 + \beta_{32}x^3 & x \ge 50 \end{cases}

Chaque morceau est un ajustement cubique ordinaire sur son propre sous-échantillon. Deux cubiques, quatre paramètres chacune : huit degrés de liberté.

Ce qui ne va pas

Rien n’oblige les deux morceaux à s’accorder au nœud, et ils ne s’accordent pas. En ajustant cela sur 200 points simulés avec des nœuds en 40, 50 et 60 - quatre cubiques, seize paramètres - la valeur ajustée saute à chaque nœud, chaque saut étant calculé avant arrondi :

knot 40106.76→100.43jump 6.34knot 5094.74→100.29jump 5.55knot 6090.52→96.78jump 6.26\begin{array}{lll} \text{knot } 40 & 106.76 \to 100.43 & \text{jump } 6.34 \\ \text{knot } 50 & 94.74 \to 100.29 & \text{jump } 5.55 \\ \text{knot } 60 & 90.52 \to 96.78 & \text{jump } 6.26 \end{array}

Ce ne sont pas des artefacts d’arrondi. La courbe est réellement discontinue et, comme description d’une relation lisse, elle n’a aucun sens.

Python

S'exécute dans votre navigateur. La première exécution télécharge l'environnement Python (~10 Mo), puis il est mis en cache.

Les contraintes, et ce qu’elles coûtent

Le remède n’est pas moins de nœuds mais des contraintes. Exigez que les morceaux se rejoignent :

  1. La continuité au nœud. Le raccord en V que cela produit a encore mauvaise allure.
  2. La continuité de la dérivée première - pas d’angle.
  3. La continuité de la dérivée seconde - aucun changement visible de courbure.

Chaque contrainte supprime un paramètre libre. En partant de huit avec un nœud :

8−3=5.8 - 3 = 5 .

Le résultat est une spline cubique. En général, une spline cubique à KK nœuds utilise

K+4K + 4

degrés de liberté, car chaque nœud supplémentaire ajoute une cubique (quatre paramètres) et trois contraintes, soit un coût net de un.

La définition générale. Une spline de degré dd est un polynôme de degré dd par morceaux dont les dérivées jusqu’à l’ordre d−1d - 1 sont continues à chaque nœud. Une spline linéaire est continue avec des angles autorisés ; les fonctions constantes par morceaux ci-dessus sont des splines de degré 0, où même la continuité est abandonnée.

Le degré trois est le choix usuel pour une raison simple : une discontinuité de la dérivée troisième n’est pas quelque chose que l’œil sache détecter.

Voici cette comptabilité sous forme de cadran, appliquée aux deux cents points ci-dessus. À zéro contrainte, les quatre cubiques sautent des trois valeurs du tableau ; chaque contrainte retire ensuite un paramètre par nœud, et le compte parcourt 16, 13, 10, 7 pour s’arrêter au K + 4 d’une spline cubique.

Deux choses que la figure montre et que l’argument ci-dessus omet. Ces neuf paramètres n’achètent presque rien : la somme des carrés résiduels ne monte que de moins de trois pour cent sur tout le trajet, si bien que les contraintes sont quasi gratuites. Et l’angle empire avant de s’améliorer. Imposer la seule continuité fait plus que doubler le plus fort changement de pente, de 2,42 à 5,95 : c’est le raccord en V évoqué plus haut, mesuré. Faire se toucher les morceaux n’est pas les faire convenir de la direction.

Interactif : le raccord, et ce qu’il coûte de le fermer

Chaque contrainte retire exactement un paramètre.

Degrés de liberté
16
Plus grand saut
6.34
Angle le plus vif
2.42
Somme des carrés résiduels
11232.55

Sans rien imposer, les quatre cubiques sautent de 6,34, 5,55 et 6,26 aux trois nœuds, ce qui est le tableau de la leçon. Chaque contrainte retire ensuite exactement un paramètre par nœud, si bien que le compte parcourt 16, 13, 10, 7 et s’arrête au K + 4 d’une spline cubique. Pour l’instant l’ajustement a 16 degrés de liberté, un plus grand saut de 6.34 et un angle le plus vif de 2.42. Deux choses que les nombres disent et que le texte tait. Ces neuf paramètres sont presque gratuits : la somme des carrés résiduels ne monte que de 11232.55 à 11534.94, moins de trois pour cent. Et l’angle empire avant de disparaître, 2,42 devenant 5,95 avec une seule contrainte, car faire se toucher les morceaux n’est pas les faire convenir de la direction.

Où cela nous mène

Nous disposons maintenant d’un problème d’ajustement sous contraintes, moins commode que de simples moindres carrés. La leçon suivante supprime entièrement cet inconvénient : une colonne supplémentaire bien choisie par nœud impose les trois contraintes automatiquement, ramenant l’ensemble à une régression ordinaire.

Avant le quiz

Sachez écrire la régression polynomiale et la régression en escalier comme des modèles à fonctions de base, dire pourquoi un modèle à fonctions de base reste des moindres carrés, décrire comment un polynôme par morceaux échoue et de combien environ, et compter les degrés de liberté avant et après les contraintes.

Références et lectures complémentaires

  • Gareth James, Daniela Witten, Trevor Hastie, Robert Tibshirani, An Introduction to Statistical Learning, with Applications in R, Springer (Springer Texts in Statistics 103), 2013source ↗

Les œuvres protégées par le droit d’auteur sont citées à titre de référence uniquement et ne sont pas hébergées ici ; veuillez consulter l’éditeur pour y accéder.

Débloquez tout le parcours

Cette première leçon est gratuite. Inscrivez-vous pour passer le quiz de maîtrise, gagner de l’XP et débloquer tous les modules, avec d’autres exemples interactifs et exécutables.