{"id":423,"date":"2026-10-07T10:13:07","date_gmt":"2026-10-07T08:13:07","guid":{"rendered":"https:\/\/www.ranksignal.fr\/blog\/?p=423"},"modified":"2026-10-14T17:40:22","modified_gmt":"2026-10-14T15:40:22","slug":"qu-est-ce-qu-une-spline","status":"publish","type":"post","link":"https:\/\/www.ranksignal.fr\/blog\/maths\/qu-est-ce-qu-une-spline\/","title":{"rendered":"Qu&rsquo;est-ce qu&rsquo;une spline ? Des morceaux de courbe recoll\u00e9s"},"content":{"rendered":"<p><\/p>\n<p>Imagine un nuage de points bruit\u00e9s entre 0 et 10 : \u00e7a monte, \u00e7a se tasse, puis \u00e7a redescend. Une droite n&rsquo;y arrive pas, et une seule grande formule qui s&rsquo;enroulerait sur tout le nuage fait vite n&rsquo;importe quoi. Il reste une id\u00e9e simple : couper l&rsquo;axe en tranches et laisser chaque tranche avoir sa propre courbe, \u00e0 condition que les morceaux se recollent sans accroc. C&rsquo;est ce qu&rsquo;on appelle une spline, et tu sauras \u00e0 la fin la construire, la r\u00e9gler et savoir ce qu&rsquo;elle ne fait pas.<\/p>\n<p><strong>Sommaire<\/strong><\/p>\n<ul>\n<li><a href=\"#l-essentiel-en-30-secondes\">L&rsquo;essentiel en 30 secondes<\/a><\/li>\n<li><a href=\"#pourquoi-une-seule-formule-ne-suit-pas-tout-le-nuage\">Pourquoi une seule formule ne suit pas tout le nuage<\/a><\/li>\n<li><a href=\"#anatomie-d-une-spline-n-uds-morceaux-raccords\">Anatomie d&rsquo;une spline : n\u0153uds, morceaux, raccords<\/a><\/li>\n<li><a href=\"#ou-poser-les-n-uds\">O\u00f9 poser les n\u0153uds ?<\/a><\/li>\n<li><a href=\"#la-spline-de-lissage-un-seul-reglage-au-lieu-des-n-uds\">La spline de lissage : un seul r\u00e9glage au lieu des n\u0153uds<\/a><\/li>\n<li><a href=\"#une-spline-en-deux-lignes-de-code\">Une spline en deux lignes de code<\/a><\/li>\n<li><a href=\"#ce-que-la-spline-ne-sait-pas-faire\">Ce que la spline ne sait pas faire<\/a><\/li>\n<\/ul>\n<h2 id=\"l-essentiel-en-30-secondes\">L&rsquo;essentiel en 30 secondes<\/h2>\n<ul>\n<li>Une spline est <strong>une courbe faite de petits polyn\u00f4mes<\/strong> raccord\u00e9s, un par intervalle de l&rsquo;axe des X.<\/li>\n<li>Les points de raccord s&rsquo;appellent des <strong>n\u0153uds<\/strong> ; les contraintes qui y sont impos\u00e9es rendent la courbe continue et lisse \u00e0 l&rsquo;\u0153il nu.<\/li>\n<li>Une spline cubique \u00e0 <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-ea9c87a513e4a72624155d392fae86e2_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#75;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"16\" style=\"vertical-align: 0px;\"\/> n\u0153uds poss\u00e8de <strong><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-a1c35e64c7c03fae947e6b0ba8e03d79_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#52;&#43;&#75;\" title=\"Rendered by QuickLaTeX.com\" height=\"14\" width=\"47\" style=\"vertical-align: -2px;\"\/> degr\u00e9s de libert\u00e9<\/strong> : c&rsquo;est le prix de sa souplesse.<\/li>\n<li>Tu r\u00e8gles la souplesse par <strong>le nombre de n\u0153uds<\/strong>, ou avec une spline de lissage par un seul param\u00e8tre <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-2b5c45836864531b8e37025dabadd24a_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#108;&#97;&#109;&#98;&#100;&#97;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"10\" style=\"vertical-align: 0px;\"\/>.<\/li>\n<li>Une spline <strong>d\u00e9crit une seule variable<\/strong> ; avec plusieurs variables, on additionne une courbe par variable.<\/li>\n<\/ul>\n<h2 id=\"pourquoi-une-seule-formule-ne-suit-pas-tout-le-nuage\">Pourquoi une seule formule ne suit pas tout le nuage<\/h2>\n<p>Deux r\u00e9flexes existent pour courber une droite. Le premier impose une seule forme polynomiale sur tout l&rsquo;axe ; le second d\u00e9coupe l&rsquo;axe et pose une constante par tranche. Les deux ont le m\u00eame d\u00e9faut : <strong>une seule forme impos\u00e9e<\/strong> \u00e0 tout le domaine, globale pour l&rsquo;un, plate par morceaux pour l&rsquo;autre.<\/p>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6adef46e3fe0e&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6adef46e3fe0e\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1229\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch06_regression_polynomiale_fonctions_palier-scaled.png\" alt=\"\u00c0 gauche, une courbe polynomiale de degr\u00e9 4 qui descend puis remonte doucement sur un nuage d\u00e9croissant ; \u00e0 droite, cinq paliers horizontaux sur le m\u00eame nuage\" class=\"wp-image-420\" srcset=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch06_regression_polynomiale_fonctions_palier-scaled.png 2560w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch06_regression_polynomiale_fonctions_palier-300x144.png 300w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch06_regression_polynomiale_fonctions_palier-1024x492.png 1024w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch06_regression_polynomiale_fonctions_palier-768x369.png 768w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch06_regression_polynomiale_fonctions_palier-1536x737.png 1536w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch06_regression_polynomiale_fonctions_palier-2048x983.png 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Regarde les deux panneaux sur le m\u00eame nuage : la courbe de gauche est lisse mais d&rsquo;un seul tenant, les paliers de droite s&rsquo;adaptent localement mais cassent la continuit\u00e9 entre deux tranches. La spline garde le d\u00e9coupage des paliers et la douceur de la courbe : c&rsquo;est un compromis entre les deux.<\/figcaption><\/figure>\n\n\n<h2 id=\"anatomie-d-une-spline-n-uds-morceaux-raccords\">Anatomie d&rsquo;une spline : n\u0153uds, morceaux, raccords<\/h2>\n<p>Une spline de r\u00e9gression se construit en trois gestes. On d\u00e9coupe le domaine en intervalles s\u00e9par\u00e9s par des n\u0153uds (knots en anglais). On ajuste sur chaque intervalle un polyn\u00f4me de bas degr\u00e9, le plus souvent cubique. Et \u00e0 chaque n\u0153ud, on impose des <strong>contraintes de raccordement<\/strong> : la courbe finale reste continue, et m\u00eame d\u00e9rivable deux fois de suite, c&rsquo;est-\u00e0-dire sans coude ni brisure visible \u00e0 l&rsquo;\u0153il nu.<\/p>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6adef46e4023f&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6adef46e4023f\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"2250\" height=\"1500\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch06_splines_noeuds_regression.png\" alt=\"Nuage de points entre X=0 et X=10 avec deux traits verticaux en pointill\u00e9s \u00e0 X\u22483 et X\u22487 et une courbe orange faite de trois morceaux\" class=\"wp-image-421\" srcset=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch06_splines_noeuds_regression.png 2250w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch06_splines_noeuds_regression-300x200.png 300w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch06_splines_noeuds_regression-1024x683.png 1024w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch06_splines_noeuds_regression-768x512.png 768w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch06_splines_noeuds_regression-1536x1024.png 1536w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch06_splines_noeuds_regression-2048x1365.png 2048w\" sizes=\"auto, (max-width: 2250px) 100vw, 2250px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Sur l&rsquo;illustration, les deux pointill\u00e9s sont les n\u0153uds et la courbe orange change de morceau en chacun d&rsquo;eux. Observe le second : la courbe y chute brusquement. C&rsquo;est exactement le genre de rupture que les contraintes de raccordement servent \u00e0 interdire, et c&rsquo;est ce qui s\u00e9pare une vraie spline lisse d&rsquo;un simple collage de segments.<\/figcaption><\/figure>\n\n\n<blockquote>\n<p><strong>\ud83d\udca1 Intuition<\/strong> Chaque n\u0153ud est une couture : tu es libre de changer de forme de part et d&rsquo;autre, mais pas de laisser la couture se voir.<\/p>\n<\/blockquote>\n<p>Cette libert\u00e9 se paie en param\u00e8tres. Une spline cubique \u00e0 <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-ea9c87a513e4a72624155d392fae86e2_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#75;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"16\" style=\"vertical-align: 0px;\"\/> n\u0153uds compte <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-a1c35e64c7c03fae947e6b0ba8e03d79_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#52;&#43;&#75;\" title=\"Rendered by QuickLaTeX.com\" height=\"14\" width=\"47\" style=\"vertical-align: -2px;\"\/> degr\u00e9s de libert\u00e9 : <strong>quatre pour le polyn\u00f4me cubique de base<\/strong>, plus un par n\u0153ud. Chaque n\u0153ud \u00ab consomme \u00bb donc un degr\u00e9 de libert\u00e9 en \u00e9change de la contrainte de raccordement qu&rsquo;il impose.<\/p>\n<p>Il existe une variante, la spline cubique <strong>naturelle<\/strong>, qui reste lin\u00e9aire au-del\u00e0 des n\u0153uds extr\u00eames.<\/p>\n<h2 id=\"ou-poser-les-n-uds\">O\u00f9 poser les n\u0153uds ?<\/h2>\n<p>Reste une vraie question de r\u00e9glage : combien de n\u0153uds, et o\u00f9 ? En pratique, on les place souvent \u00e0 intervalles r\u00e9guliers <strong>en quantiles des donn\u00e9es<\/strong>, avec plus de n\u0153uds l\u00e0 o\u00f9 les observations sont denses.<\/p>\n<p>Pour le nombre, on essaie plusieurs valeurs du nombre de degr\u00e9s de libert\u00e9 par validation crois\u00e9e et l&rsquo;on garde celle qui minimise l&rsquo;erreur de test estim\u00e9e. Sur les donn\u00e9es de salaires Wage, une spline naturelle \u00e0 <strong>trois ou quatre degr\u00e9s de libert\u00e9<\/strong> suffit d\u00e9j\u00e0 \u00e0 capturer l&rsquo;essentiel de la relation entre \u00e2ge et salaire : au-del\u00e0, la courbe change tr\u00e8s peu.<\/p>\n<p>Le gain est net face \u00e0 un polyn\u00f4me de degr\u00e9 \u00e9quivalent : en laissant la souplesse varier <strong>n\u0153ud par n\u0153ud<\/strong>, la spline \u00e9vite les oscillations erratiques qu&rsquo;un polyn\u00f4me de haut degr\u00e9 d\u00e9veloppe presque in\u00e9vitablement pr\u00e8s des bords.<\/p>\n<h2 id=\"la-spline-de-lissage-un-seul-reglage-au-lieu-des-n-uds\">La spline de lissage : un seul r\u00e9glage au lieu des n\u0153uds<\/h2>\n<p>Choisir le nombre et l&#8217;emplacement des n\u0153uds, c&rsquo;est deux d\u00e9cisions. La spline de lissage les remplace par une seule : on cherche la fonction <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-d208fd391fa57c168dc0f151de829fee_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#103;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"9\" style=\"vertical-align: -4px;\"\/> qui minimise<\/p>\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 49px;\"><span class=\"ql-right-eqno\"> &nbsp; <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-7f42e955a143e3a80e97eb40009c17bc_l3.png\" height=\"49\" width=\"244\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#91; &#92;&#115;&#117;&#109;&#95;&#123;&#105;&#61;&#49;&#125;&#94;&#110;&#32;&#40;&#121;&#95;&#105;&#32;&#45;&#32;&#103;&#40;&#120;&#95;&#105;&#41;&#41;&#94;&#50;&#32;&#43;&#32;&#92;&#108;&#97;&#109;&#98;&#100;&#97;&#32;&#92;&#105;&#110;&#116;&#32;&#103;&#39;&#39;&#40;&#116;&#41;&#94;&#50;&#32;&#92;&#44;&#32;&#100;&#116;&#44;&#92;&#93;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n<p>Lis la formule en deux moiti\u00e9s. La somme mesure l&rsquo;\u00e9cart entre la courbe <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-d208fd391fa57c168dc0f151de829fee_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#103;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"9\" style=\"vertical-align: -4px;\"\/> et les observations <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-586e54f3cdec14202303c5f7cd419c44_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#40;&#120;&#95;&#105;&#44;&#32;&#121;&#95;&#105;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"50\" style=\"vertical-align: -5px;\"\/>. L&rsquo;int\u00e9grale du carr\u00e9 de la d\u00e9riv\u00e9e seconde <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-99e7b254df80a92295171ccfd48bc6b7_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#103;&#39;&#39;\" title=\"Rendered by QuickLaTeX.com\" height=\"18\" width=\"17\" style=\"vertical-align: -4px;\"\/> mesure la <strong>courbure totale<\/strong> de <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-d208fd391fa57c168dc0f151de829fee_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#103;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"9\" style=\"vertical-align: -4px;\"\/> : elle punit les courbes qui zigzaguent. Et <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-21d0afe89f5d1545ccda3d2bd0d8660a_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#108;&#97;&#109;&#98;&#100;&#97;&#32;&#92;&#103;&#101;&#113;&#32;&#48;\" title=\"Rendered by QuickLaTeX.com\" height=\"15\" width=\"43\" style=\"vertical-align: -3px;\"\/> r\u00e8gle l&rsquo;\u00e9quilibre entre les deux.<\/p>\n<p>Pousse le curseur aux deux bouts. \u00c0 <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-dda098fd48544344686cb6968a131c1d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#108;&#97;&#109;&#98;&#100;&#97;&#32;&#61;&#32;&#48;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"43\" style=\"vertical-align: 0px;\"\/>, la courbe est libre d&rsquo;<strong>\u00e9pouser chaque observation<\/strong> : parfait sur l&rsquo;entra\u00eenement, mais absurdement irr\u00e9gulier. \u00c0 l&rsquo;autre bout, avec <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-2b5c45836864531b8e37025dabadd24a_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#108;&#97;&#109;&#98;&#100;&#97;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"10\" style=\"vertical-align: 0px;\"\/> tr\u00e8s grand, plus aucune courbure n&rsquo;est tol\u00e9r\u00e9e et il ne reste qu&rsquo;une droite des moindres carr\u00e9s.<\/p>\n<p>On montre que la solution est toujours une spline cubique naturelle avec un n\u0153ud \u00e0 chaque valeur observ\u00e9e de <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-d4ee28752517d6062a3ca0314890342d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#88;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"16\" style=\"vertical-align: 0px;\"\/> ; ce n&rsquo;est donc plus le nombre de n\u0153uds mais la rugosit\u00e9 qui est contr\u00f4l\u00e9e par <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-2b5c45836864531b8e37025dabadd24a_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#108;&#97;&#109;&#98;&#100;&#97;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"10\" style=\"vertical-align: 0px;\"\/>. La souplesse se r\u00e9sume alors par des <strong>degr\u00e9s de libert\u00e9 effectifs<\/strong>, qui varient de fa\u00e7on continue entre <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-b170995d512c659d8668b4e42e1fef6b_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#110;\" title=\"Rendered by QuickLaTeX.com\" height=\"8\" width=\"11\" style=\"vertical-align: 0px;\"\/> (quand <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-dda098fd48544344686cb6968a131c1d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#108;&#97;&#109;&#98;&#100;&#97;&#32;&#61;&#32;&#48;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"43\" style=\"vertical-align: 0px;\"\/>) et 2 (quand <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-4547f6e16280f439afd31661da523192_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#108;&#97;&#109;&#98;&#100;&#97;&#32;&#92;&#116;&#111;&#32;&#92;&#105;&#110;&#102;&#116;&#121;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"55\" style=\"vertical-align: -1px;\"\/>, une droite).<\/p>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6adef46e405e6&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6adef46e405e6\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"2250\" height=\"1500\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch06_splines_lissage_penalisation.png\" alt=\"Nuage de points avec une courbe orange pleine assez lisse et une courbe pointill\u00e9e tr\u00e8s ondul\u00e9e\" class=\"wp-image-311\" srcset=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch06_splines_lissage_penalisation.png 2250w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch06_splines_lissage_penalisation-300x200.png 300w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch06_splines_lissage_penalisation-1024x683.png 1024w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch06_splines_lissage_penalisation-768x512.png 768w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch06_splines_lissage_penalisation-1536x1024.png 1536w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch06_splines_lissage_penalisation-2048x1365.png 2048w\" sizes=\"auto, (max-width: 2250px) 100vw, 2250px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">La courbe pleine est celle d&rsquo;une p\u00e9nalit\u00e9 forte, la pointill\u00e9e d&rsquo;une p\u00e9nalit\u00e9 faible qui s&rsquo;agite autour de chaque point. Plus le trait est lisse, plus on se rapproche des 2 degr\u00e9s de libert\u00e9 d&rsquo;une droite.<\/figcaption><\/figure>\n\n\n<h2 id=\"une-spline-en-deux-lignes-de-code\">Une spline en deux lignes de code<\/h2>\n<p>Voyons-la sur une vraie question : comment mod\u00e9liser le salaire (<code>wage<\/code>) en fonction de l&rsquo;\u00e2ge (<code>age<\/code>) dans le jeu de donn\u00e9es Wage ? Les lignes <code>In [n]:<\/code> sont les commandes saisies dans une session interactive ; ici <code>MS<\/code> construit la matrice du mod\u00e8le, <code>sm<\/code> d\u00e9signe <code>statsmodels<\/code>, et <code>Wage<\/code> est le jeu de donn\u00e9es d\u00e9j\u00e0 charg\u00e9.<\/p>\n<pre><code>In [7]: bs_age = MS([bs('age',\n                          internal_knots=[25,40,60],\n                          intercept=True)])\n        Xbs = bs_age.fit_transform(Wage)\n        M = sm.OLS(Wage['wage'], Xbs).fit()\n\nIn [11]: ns_age = MS([ns('age', df=4)])\n         Xns = ns_age.fit_transform(Wage)\n         M_ns = sm.OLS(Wage['wage'], Xns).fit()\n<\/code><\/pre>\n<p>La fonction <code>bs()<\/code> construit une <strong>base de spline cubique ordinaire<\/strong> \u00e0 partir de n\u0153uds que tu fournis, ici 25, 40 et 60 ans. <code>ns()<\/code> construit directement une spline cubique naturelle : tu donnes seulement le nombre de degr\u00e9s de libert\u00e9 (<code>df=4<\/code>), et la biblioth\u00e8que place elle-m\u00eame les n\u0153uds aux quantiles appropri\u00e9s des donn\u00e9es. Dans les deux cas, le mod\u00e8le est ensuite ajust\u00e9 par une <a href=\"\/blog\/machine-learning\/qu-est-ce-qu-une-regression-lineaire\/\" title=\"r\u00e9gression lin\u00e9aire\">r\u00e9gression lin\u00e9aire<\/a> ordinaire.<\/p>\n<h2 id=\"ce-que-la-spline-ne-sait-pas-faire\">Ce que la spline ne sait pas faire<\/h2>\n<p><strong>Elle suit une seule variable.<\/strong> Une spline d\u00e9crit la relation entre la r\u00e9ponse et un seul pr\u00e9dicteur. Avec plusieurs variables, on remplace chaque terme lin\u00e9aire par une fonction propre \u00e0 chacune, une spline par exemple : c&rsquo;est le mod\u00e8le additif.<\/p>\n<p><strong>Elle ne devine pas les interactions.<\/strong> Comme chaque courbe ne d\u00e9pend que de sa variable, un tel mod\u00e8le ne capture pas les interactions entre pr\u00e9dicteurs, sauf \u00e0 les ajouter explicitement, ce qui fait perdre une partie de la simplicit\u00e9 d&rsquo;interpr\u00e9tation.<\/p>\n<p><strong>Plus souple n&rsquo;est pas mieux.<\/strong> Chaque n\u0153ud ajoute un degr\u00e9 de libert\u00e9, et une p\u00e9nalit\u00e9 <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-2b5c45836864531b8e37025dabadd24a_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#108;&#97;&#109;&#98;&#100;&#97;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"10\" style=\"vertical-align: 0px;\"\/> nulle colle \u00e0 chaque point. Pour choisir le r\u00e9glage, on s&rsquo;appuie sur la validation crois\u00e9e plut\u00f4t que sur l&rsquo;ajustement des donn\u00e9es d&rsquo;entra\u00eenement.<\/p>\n<blockquote>\n<p><strong>\ud83d\udccc \u00c0 retenir<\/strong> Une spline, c&rsquo;est des polyn\u00f4mes recoll\u00e9s aux n\u0153uds. Tu en r\u00e8gles la souplesse par le nombre de n\u0153uds, ou par <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/ql-cache\/quicklatex.com-2b5c45836864531b8e37025dabadd24a_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#108;&#97;&#109;&#98;&#100;&#97;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"10\" style=\"vertical-align: 0px;\"\/> quand tu laisses la p\u00e9nalit\u00e9 d\u00e9cider.<\/p>\n<\/blockquote>","protected":false},"excerpt":{"rendered":"<p>Une spline raccorde de petits polyn\u00f4mes en des points appel\u00e9s n\u0153uds pour tracer une courbe lisse. Construction, r\u00e9glage et limites, avec le code.<\/p>\n","protected":false},"author":1,"featured_media":422,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[],"class_list":["post-423","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-maths"],"_links":{"self":[{"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts\/423","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/comments?post=423"}],"version-history":[{"count":3,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts\/423\/revisions"}],"predecessor-version":[{"id":813,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts\/423\/revisions\/813"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/media\/422"}],"wp:attachment":[{"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/media?parent=423"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/categories?post=423"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/tags?post=423"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}