Cours
Ajuster une droite à des données qui forment une courbe n’est jamais une bonne idée.
La régression linéaire suppose que la relation entre vos prédicteurs et la cible est une droite. Or, dans la vraie vie, c’est rarement le cas. Pensez au lien entre revenu et dépenses, ou entre temps et croissance : la relation se courbe, se stabilise, se recourbe et change de direction d’une manière impossible à capturer avec une seule pente.
La régression par splines contourne le problème en laissant la relation se plier là où il faut, sans pour autant ajuster une courbe débridée. L’idée est d’ajuster plusieurs segments polynomiaux lisses sur l’étendue du prédicteur et de les assembler en des points précis.
Dans cet article, vous verrez les concepts clés de la régression par splines, comment les nœuds pilotent la flexibilité, les principaux types de splines, et comment les appliquer en pratique.
Avant d’aborder les splines, lisez notre tutoriel qui vous apprendra tout ce qu’il faut savoir sur la régression linéaire simple.
Qu’est-ce que la régression par splines ?
La régression par splines est une technique de régression qui modélise les relations non linéaires à l’aide de fonctions polynomiales par morceaux, raccordées en des points appelés nœuds.
Plutôt que d’écrire une seule équation pour décrire toute la relation, la régression par splines découpe l’étendue du prédicteur en sous-ensembles et ajuste un polynôme distinct sur chacun d’eux. Ces morceaux se rencontrent aux nœuds, et des contraintes garantissent des transitions fluides.
Le résultat final se situe entre deux extrêmes. C’est plus flexible qu’une régression linéaire, qui ne peut tracer qu’une seule droite dans vos données. Et c’est plus structuré que des modèles non linéaires totalement libres comme les réseaux de neurones profonds ou les méthodes à noyau, capables d’ajuster presque tout mais peu explicites sur ce qu’ils ont ajusté.
C’est pour cela que les splines sont si présentes en statistique appliquée.
Pourquoi a-t-on besoin des splines ?
Les données réelles suivent presque jamais une droite.
La régression linéaire est souvent le point de départ, mais elle repose sur une hypothèse forte : l’effet d’un prédicteur sur la cible reste constant sur toute l’étendue. Quand la relation réelle se courbe ou change de direction, une droite sous-ajuste. Vous obtenez des erreurs aux extrêmes et un modèle incapable de suivre le motif.
La solution consiste à utiliser un modèle plus flexible. La régression polynomiale de degré élevé est une option : vous ajoutez des termes x^2, x^3, x^4 jusqu’à ce que la courbe se plie assez pour coller à vos données. Mais les polynômes deviennent instables aux bords, en oscillant fortement là où l’on a peu de points. Ce comportement, appelé phénomène de Runge, rend les polynômes de degré élevé risqués pour la prédiction.
La régression par splines se situe entre ces deux extrêmes.
Vous obtenez une flexibilité locale là où les données se courbent, sans l’instabilité globale d’un seul polynôme de haut degré. Chaque segment est un polynôme de faible degré (généralement cubique), donc aucune partie ne peut se comporter de façon inattendue. Et comme les segments sont raccordés en douceur aux nœuds, la courbe globale reste une fonction continue.
En bref, une spline offre assez de liberté pour suivre des motifs complexes, avec suffisamment de structure pour rester sage aux extrêmes.
Comment fonctionne la régression par splines
Le flux de travail tient toujours en trois étapes.
- Diviser l’étendue du prédicteur en régions : vous choisissez un ensemble de nœuds sur l’axe du prédicteur. Ils découpent l’étendue en intervalles. Trois nœuds donnent quatre régions. Les nœuds sont les frontières entre segments.
- Ajuster un polynôme dans chaque région : dans chaque intervalle, on ajuste un polynôme de faible degré. Chaque région a ses propres coefficients, ce qui permet à la courbe de se plier différemment selon la zone. Une région quasi plate reçoit un polynôme quasi plat. Une région très courbe reçoit un polynôme plus courbe.
- Relier les régions : le modèle impose des contraintes de continuité à chaque nœud. Les valeurs polynomiales de part et d’autre doivent coïncider au nœud, donc pas de sauts. Pour les splines cubiques, les première et deuxième dérivées doivent aussi coïncider : pas d’angles vifs ni de changements brusques de courbure.
Ces contraintes donnent aux splines l’apparence d’une courbe unique, lisse, qui se plie localement tout en restant continue sur toute l’étendue du prédicteur. Visuellement, on ne voit pas où s’arrête un polynôme et où commence le suivant.
Les nœuds, le degré polynomiale et les contraintes de continuité définissent ensemble la spline. En modifiant l’un d’entre eux, vous obtenez un autre type de spline avec d’autres propriétés – ce que couvrent les sections suivantes.
Que sont les nœuds en régression par splines ?
Les nœuds sont les points sur l’axe du prédicteur où se termine un segment polynomial et où le suivant commence.
Vous pouvez les voir comme les articulations de la spline. Si vous placez un nœud en x = 5, le modèle ajuste un polynôme pour les valeurs inférieures à 5 et un autre pour les valeurs supérieures. Les deux se rencontrent au nœud, et les contraintes assurent un raccordement fluide. Plus vous ajoutez de nœuds, plus vous avez de segments, donc plus la courbe peut se plier à différents endroits.
C’est pourquoi les nœuds sont le principal levier pour contrôler la flexibilité du modèle.
Le nombre de nœuds détermine combien de morceaux polynomiaux composent la spline. Leur emplacement détermine où la courbe peut changer de forme. Une spline avec deux nœuds ne peut se plier qu’à quelques endroits. Avec vingt nœuds, elle peut quasiment suivre chaque point.
Choisir le bon nombre et le bon placement des nœuds est donc la décision centrale en régression par splines.
Trop peu de nœuds
Si vous en placez trop peu, la spline n’a pas assez de segments pour suivre le motif réel des données. La courbe reste trop rigide. Elle se comporte presque comme un polynôme de bas degré : flexible dans les grandes lignes, mais incapable de capter les variations locales.
Imaginez ajuster une spline avec un seul nœud à des données qui ont trois phases distinctes : hausse, plateau, puis baisse. Avec un nœud, la spline n’a que deux segments. Elle peut capter la hausse et l’une des deux autres phases, mais pas les trois. Vous retombez sur le problème de la régression linéaire : des erreurs là où la spline ne peut pas suivre la forme des données.

Exemple avec trop peu de nœuds
Trop peu de nœuds conduit au sous-ajustement. Le modèle est trop lisse pour être utile.
Trop de nœuds
Le problème inverse est tout aussi mauvais. Si vous mettez trop de nœuds, la spline comporte tellement de segments qu’elle commence à ajuster le bruit au lieu du motif réel. La courbe ondule entre chaque observation et poursuit les variations aléatoires au lieu de la tendance sous-jacente.
Une spline avec vingt nœuds sur un jeu de 50 points ressemblera plus à un dessin « relier les points » qu’à un modèle. Elle ajustera presque parfaitement l’entraînement, mais les prédictions sur de nouvelles données seront peu fiables. De petites variations d’entrée provoqueront de grands changements imprévisibles en sortie.

Exemple avec trop de nœuds
Trop de nœuds conduit au surajustement. Le modèle est trop flexible pour généraliser.
Vous voulez suffisamment de nœuds pour capter les vrais changements de courbure, mais pas au point que le modèle mémorise le bruit. Les sections suivantes expliquent comment trancher en pratique.
Types de splines
Il existe plusieurs variantes, selon le type de polynôme dans chaque segment et les contraintes imposées à la courbe.
Splines linéaires
La version la plus simple. Chaque segment est une droite, raccordée aux nœuds.

Exemple de splines linéaires
La contrainte de continuité est légère : les valeurs doivent coïncider au nœud, mais les pentes peuvent changer. Le résultat ressemble à une suite de segments reliés, avec des angles à chaque nœud. Suffisant pour des courbures simples, mais parfois pas assez lisse visuellement.
Utile si vous visez les grandes tendances et acceptez des ruptures visuelles. Faciles à interpréter : chaque segment est une droite avec sa propre pente.
Splines cubiques
Le choix par défaut dans la plupart des cas. Chaque segment est un polynôme de degré 3, avec des contraintes plus strictes qu’en linéaire.

Exemple de splines cubiques
À chaque nœud, trois conditions : égalité des valeurs, des premières dérivées et des deuxièmes dérivées. Donc pas de sauts, pas d’angles, pas de changements brusques de courbure. La courbe traverse les nœuds sans signe visible de transition.
Le degré 3 est le plus bas qui autorise des changements de courbure lisses, d’où sa popularité. Des degrés plus élevés ajoutent rarement une flexibilité utile et compliquent le contrôle.
Splines cubiques naturelles
Une variante qui ajoute des contraintes supplémentaires aux frontières des données.

Exemple de splines cubiques naturelles
Le problème des splines cubiques classiques est leur comportement parfois étrange aux bords, surtout avec peu de points. Les segments extrêmes restent cubiques, et un polynôme cubique peut vite s’emballer en extrapolation.
Les splines cubiques naturelles contournent cela en forçant la deuxième dérivée à zéro aux nœuds de bord. En pratique, la courbe devient linéaire au-delà des nœuds externes. L’extrapolation est bien plus stable, ce qui en fait un meilleur choix si vous soignez les prédictions près des limites.
B-splines
Les B-splines (pour basis splines) construisent la spline autrement : comme une somme pondérée de fonctions de base.

Exemple de B-splines
Chaque fonction de base est elle-même une petite spline non nulle que sur une région limitée. La spline complète est la somme de ces fonctions de base multipliées par des coefficients estimés par la régression.
Les B-splines sont stables numériquement et faciles à étendre. La plupart des implémentations modernes en Python et R utilisent des représentations B-spline, même si l’interface utilisateur ressemble à une spline « classique ». Si vous avez déjà appelé bs() en R ou utilisé SplineTransformer dans scikit-learn, vous avez utilisé des B-splines.
Splines vs régression polynomiale
Les deux gèrent les relations non linéaires, mais de façons très différentes. Tout se joue dans la construction de la courbe.
Régression polynomiale
La régression polynomiale ajuste un polynôme global unique sur toute l’étendue du prédicteur. Vous fixez un degré (2, 3, 5, 10) et le modèle trouve un seul jeu de coefficients minimisant l’erreur globale. Une équation unique décrit la relation partout.
Cela paraît propre, mais pose problème. Un polynôme unique doit équilibrer l’ajustement sur toute l’étendue : ce qui se passe dans une région affecte toutes les autres. En augmentant le degré pour gérer une forte courbure au milieu, la courbe se met à osciller aux bords. C’est le phénomène de Runge évoqué plus haut : les polynômes de haut degré deviennent instables près des limites.
Autre souci : la régression polynomiale n’a pas de notion de localité. Un pic en x = 5 peut modifier la forme de l’ajustement en x = 50, car chaque observation contribue à la même équation globale.
Régression par splines
La régression par splines découpe l’étendue du prédicteur en segments et ajuste un polynôme de faible degré dans chaque segment. Les polynômes sont raccordés en douceur aux nœuds, mais chaque segment est surtout influencé par les données de sa propre région.
Vous gagnez ainsi une flexibilité locale. Une zone avec forte courbure reçoit un polynôme plus courbe. Une zone plate reçoit un polynôme quasi plat. Et comme chaque segment est de faible degré (souvent cubique), aucun morceau ne se comporte étrangement aux extrêmes. L’ajustement est plus lisse et plus stable, surtout près des bords.
Comparaison côte à côte

Régression polynomiale versus régression par splines
Si la relation est légèrement non linéaire et qu’un ajustement global vous convient, la régression polynomiale peut suffire. Si le motif est plus complexe ou si vous tenez aux prédictions près des limites, les splines sont un choix plus sûr.
Choisir le nombre et l’emplacement des nœuds
La sélection des nœuds est l’élément qui compte le plus. Trop peu : sous-ajustement. Trop : surajustement. Et leur position modifie les motifs capturés par le modèle.
Plusieurs approches existent, et vous les combinerez souvent.
- Connaissance métier : si vous connaissez le domaine, servez-vous-en. Une étude clinique placera des nœuds aux seuils cliniques connus. Un modèle de tarification aux points où le comportement des consommateurs change. C’est l’approche la plus interprétable : les segments correspondent à des frontières réelles.
- Nœuds régulièrement espacés : choisissez un nombre de nœuds et espacez-les uniformément. Efficace si vos données sont approximativement uniformes le long de l’axe. Inefficace si les données sont denses par endroits et clairsemées ailleurs : des nœuds peuvent tomber là où il n’y a presque pas de données, rendant l’ajustement instable.
- Nœuds basés sur les quantiles : au lieu de positions égales sur l’axe x, placez-les aux quantiles du prédicteur. Avec 4 nœuds, placez-les aux 20e, 40e, 60e et 80e percentiles. Chaque segment contient ainsi à peu près autant d’observations, ce qui fiabilise l’ajustement dans les zones clairsemées.
- Validation croisée : testez différents nombres de nœuds, ajustez la spline pour chacun, puis comparez sur un jeu de validation. La configuration au plus faible score d’erreur gagne. Moins d’arbitraire, plus de calcul, et le résultat dépend quand même de la stratégie de placement (régulier, quantiles) évaluée.
On retrouve le compromis classique : flexibilité vs complexité. Plus de nœuds = plus de flexibilité, donc meilleure capture des motifs fins, mais aussi plus de risque de poursuivre le bruit. Moins de nœuds = modèle plus stable et interprétable, qui peut rater des motifs réels.
Commencez avec 3 à 5 nœuds placés aux quantiles, puis examinez les résidus. Si vous observez des motifs systématiques non captés, ajoutez un nœud dans la zone concernée. Si l’ajustement ondule, retirez-en un. La validation croisée s’impose quand vous devez justifier le choix ou mettre le modèle en production.
Splines en apprentissage automatique et en statistique
On utilise des splines partout où l’on veut modéliser un effet non linéaire lisse sans imposer de forme fonctionnelle précise. Quelques cas courants :
- Tendances de séries temporelles : séparer la tendance lisse des fluctuations court terme. Une spline sur le temps fournit une tendance flexible qui s’adapte aux changements sans réagir au bruit. Économistes et analystes l’emploient pour décrire la trajectoire sous-jacente d’une variable – PIB, cours boursiers – sans supposer d’emblée une forme linéaire ou exponentielle.
- Économie et économétrie : modéliser des effets qui varient selon l’intervalle. L’effet du revenu sur la consommation n’est pas constant : ménages modestes vs aisés. Une spline le révèle sans imposer de forme.
- Santé et biostatistique : de nombreux résultats de santé ont des relations non linéaires avec l’âge, l’IMC, la tension, ou des biomarqueurs. Le risque suit souvent une forme en U ou en J : les extrêmes sont risqués, le milieu est sûr. Une droite passerait à côté. Les splines cubiques, surtout naturelles, sont l’outil standard, intégré aux logiciels statistiques utilisés en recherche clinique.
- Modélisation environnementale et écologique : pour modéliser la réponse d’espèces ou de variables climatiques à des gradients. Température, altitude, précipitations ont souvent des effets non linéaires sur l’abondance d’une espèce ou le rendement agricole. Les splines permettent d’ajuster la courbe sans en fixer la forme à l’avance.
Dans tous ces cas, les splines offrent de la flexibilité où c’est nécessaire, sans vous forcer à deviner la forme de la relation. Idéales pour l’exploration, solides pour la production lorsque l’interprétabilité compte.
Régression par splines en Python
Trois voies courantes : scikit-learn pour un pipeline « ML », patsy pour une spécification par formule, et statsmodels pour l’inférence statistique. Tour d’horizon.
Avec scikit-learn
scikit-learn propose SplineTransformer, qui convertit une variable numérique en un ensemble de fonctions de base B-spline. Vous les passez ensuite à un modèle de régression linéaire.
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import SplineTransformer
from sklearn.pipeline import make_pipeline
# Data
np.random.seed(42)
x = np.linspace(0, 10, 100).reshape(-1, 1)
y = np.sin(x).ravel() + 0.3 * x.ravel() + np.random.normal(0, 0.3, 100)
# Spline features + linear regression pipeline
model = make_pipeline(
SplineTransformer(n_knots=5, degree=3),
LinearRegression()
)
model.fit(x, y)
y_pred = model.predict(x)
print("R^2 score:", model.score(x, y))

score R2 scikit-learn
Le SplineTransformer crée la base de splines avec 5 nœuds et des polynômes cubiques. Puis LinearRegression estime les coefficients de chaque fonction de base. Vous pouvez remplacer par tout régresseur sklearn linéaire régularisé (ridge, lasso, etc.).
Cette approche s’intègre aux workflows sklearn, mais vous n’obtenez pas d’inférences (erreurs standards, p-valeurs). Pour cela, préférez patsy ou statsmodels.
Avec patsy
patsy offre une interface par formules pour construire des matrices de conception. C’est l’équivalent le plus proche des formules R en Python et la voie standard pour créer des splines avec statsmodels.
import numpy as np
import pandas as pd
from patsy import dmatrix
import statsmodels.api as sm
np.random.seed(42)
x = np.linspace(0, 10, 100)
y = np.sin(x) + 0.3 * x + np.random.normal(0, 0.3, 100)
df = pd.DataFrame({"x": x, "y": y})
# B-spline basis using patsy
spline_basis = dmatrix("bs(x, df=6, degree=3)", data=df, return_type="dataframe")
# Fit with statsmodels OLS
model = sm.OLS(df["y"], spline_basis).fit()
print(model.summary())

résumé du modèle patsy
La fonction bs() dans la formule demande à patsy de construire une base B-spline avec 6 degrés de liberté et degré 3 (cubique). patsy renvoie la matrice de conception, qui passe directement à sm.OLS(). Le paramètre df contrôle le nombre de fonctions de base – plus élevé = plus de flexibilité, comme ajouter des nœuds.
Pour des splines naturelles, remplacez simplement bs() par ns() :
spline_basis = dmatrix("ns(x, df=6)", data=df, return_type="dataframe")
Avec statsmodels et formules
statsmodels propose aussi une API par formules intégrée à patsy. La solution la plus simple pour obtenir, en une ligne, une régression par splines avec sortie statistique complète.
import statsmodels.formula.api as smf
model = smf.ols("y ~ bs(x, df=7, degree=3)", data=df).fit()
print(model.summary())

résumé du modèle statsmodels
La sortie summary() fournit les coefficients de chaque fonction de base, leurs erreurs standards, p-valeurs et les statistiques d’ajustement usuelles. Les coefficients ne sont pas directement interprétables, car ils correspondent aux fonctions de base et non à des quantités métier. On interprète en traçant les prédictions sur l’étendue du prédicteur.
Pour la plupart des workflows statistiques, l’API formules de statsmodels est la plus pratique. Utilisez scikit-learn lorsque les splines s’insèrent dans un pipeline ML plus large.
Régression par splines en R
R dispose du meilleur support natif pour les splines. Le package splines est fourni avec R de base, et ses deux fonctions principales – bs() et ns() – s’emploient directement dans toute formule de régression.
La fonction bs() crée une base B-spline. ns() crée une base de splines cubiques naturelles. Les deux produisent une matrice de caractéristiques spline que le système de formules de R insère automatiquement dans le modèle.
Utiliser bs() pour les B-splines
# Data
set.seed(42)
x <- seq(0, 10, length.out = 100)
y <- sin(x) + 0.3 * x + rnorm(100, sd = 0.3)
df <- data.frame(x = x, y = y)
# Cubic B-spline with 6 degrees of freedom
library(splines)
model <- lm(y ~ bs(x, df = 6, degree = 3), data = df)
summary(model)

sortie de bs() en R
La formule y ~ bs(x, df = 6, degree = 3) indique à R de remplacer x par une base B-spline de degré 3 et 6 degrés de liberté. R gère le reste : construit la base, ajuste le modèle linéaire et renvoie un objet lm avec les diagnostics usuels.
Vous pouvez passer directement les positions des nœuds pour un contrôle total :
model <- lm(y ~ bs(x, knots = c(2, 5, 8), degree = 3), data = df)
Cela place des nœuds en x = 2, x = 5 et x = 8 au lieu de laisser R les choisir.
Utiliser ns() pour les splines naturelles
Pour des splines cubiques naturelles (linéaires au-delà des frontières), utilisez ns() :
model_natural <- lm(y ~ ns(x, df = 6), data = df)
summary(model_natural)

sortie de ns() en R
La syntaxe est la même, mais le comportement aux bords change. Les splines naturelles sont généralement un meilleur choix si vous tenez aux prédictions ou à l’interprétation près des limites.
Interpréter la sortie
Les coefficients dans summary() correspondent aux fonctions de base, pas à des quantités interprétables. Pour voir ce que le modèle a appris, prédisez sur une grille de valeurs de x et tracez le résultat :
x_grid <- data.frame(x = seq(0, 10, length.out = 200))
preds <- predict(model, newdata = x_grid)
plot(df$x, df$y)
lines(x_grid$x, preds, col = "green", lwd = 2)

Interprétation de la sortie en R
Le schéma classique en R : ajuster la spline, prédire sur une grille lisse et superposer la courbe aux données. R permet aussi d’utiliser des termes spline aux côtés d’autres prédicteurs dans la même formule :
model_multi <- lm(y ~ ns(x, df = 6) + other_var, data = df)
On ajuste ainsi un effet non linéaire pour x et un effet linéaire pour other_var dans le même modèle. Cette flexibilité explique l’adoption massive des splines dans les workflows R.
Avantages des splines
Voici quelques atouts face à des modèles d’IA plus populaires :
- Modélisent le non linéaire sans connaître la forme : pas besoin d’imposer une forme fonctionnelle. Les splines laissent les données dessiner la courbe : courbures, plateaux, changements de direction, sans savoir où ils surviendront.
- Ajustements lisses et interprétables : la sortie est une courbe continue, pas une boîte noire. Vous pouvez la tracer, voir comment la réponse évolue selon le prédicteur et l’expliquer à un public non technique.
- Plus stables que les polynômes de haut degré : chaque segment est de faible degré, donc aucun morceau ne s’emballe aux extrêmes. Le comportement aux frontières est bien mieux maîtrisé, surtout avec les splines cubiques naturelles.
- S’intègrent aux workflows de régression existants : les splines se glissent dans une régression linéaire standard. Vous pouvez les combiner avec d’autres prédicteurs, de la régularisation, des effets mixtes, et tout ce qui se superpose à l’OLS.
Limites des splines
Comme la plupart des modèles, elles comportent des compromis à connaître :
- Le choix des nœuds est délicat : déterminer leur nombre et leur position demande du travail. Les valeurs par défaut peuvent convenir, mais souvent il faut de la validation croisée ou l’expertise métier. Il n’y a pas de règle universelle.
- L’interprétation se complique avec trop de nœuds : une spline avec trois nœuds reste simple à expliquer. Avec vingt, beaucoup moins. On peut toujours tracer la courbe, mais l’explication rigoureuse devient ardue.
- Le surajustement reste possible : plus stables que les polynômes de haut degré, elles n’en sont pas immunisées. Trop de nœuds, un mauvais placement, trop de valeurs aberrantes ou un petit échantillon peuvent conduire à un modèle performant en entraînement mais faible en généralisation.
- Les coefficients ne sont pas directement parlants : ils correspondent aux fonctions de base, pas à des quantités métier. Impossible de lire « une unité de x change y de bêta » comme en linéaire. L’interprétation est visuelle.
Erreurs fréquentes avec les splines
Voici quelques pièges classiques des débutants :
- Mettre trop de nœuds : on en ajoute jusqu’à ce que l’ajustement « paraisse bon » sur l’entraînement. Piège classique de surajustement. Si la spline ondule entre chaque point, il y en a trop. Validez par CV ou partez de moins et n’ajoutez qu’en cas de motif clair dans les résidus.
- En mettre trop peu et supposer la linéarité : l’excès inverse. Si vous n’avez qu’un ou deux nœuds et que les résidus montrent encore de la courbure, le modèle sous-ajuste. Ajoutez des nœuds là où les résidus dévient.
- Mal gérer le comportement aux frontières : les splines cubiques classiques peuvent être erratiques près des bords. Si vous prédisez près des limites (ou au-delà), utilisez des splines cubiques naturelles, qui imposent un comportement linéaire au-delà des nœuds de bord et évitent les emballements.
- Comparer directement aux modèles non linéaires non contraints : les splines ne cherchent pas à être des réseaux de neurones ou des forêts aléatoires. Si vous les évaluez uniquement sur la précision brute, les boîtes noires gagnent souvent. Ce n’est pas l’objectif. Les splines gagnent en interprétabilité et en intégration avec l’inférence statistique.
Splines vs autres techniques non linéaires
Les splines ne sont pas la seule option, mais elles brillent quand l’interprétation compte. Comparatif rapide.
Régression polynomiale
Une seule équation globale : plus simple à spécifier mais moins stable, surtout aux bords. Les splines dominent en flexibilité et stabilité dès qu’il y a plus d’un coude. Les polynômes restent plus simples à interpréter uniquement à très bas degré (2 ou 3). Au-delà, les splines deviennent à la fois plus fiables et plus lisibles.
Modèles additifs généralisés (GAM)
Les GAMs, ce sont des splines à grande échelle. Un GAM ajuste une spline par prédicteur et les additionne. Voyez la régression par splines comme un GAM à une variable, et un GAM comme une somme de splines sur plusieurs variables.
Les GAMs gèrent plus proprement plusieurs prédicteurs non linéaires et incluent des pénalités de lissage qui choisissent la bonne flexibilité, ce qui réduit le travail de sélection des nœuds. Avec plusieurs prédicteurs dont certains non linéaires, privilégiez les GAMs.
Arbres de décision
Approche totalement différente : découper l’espace des prédicteurs en régions rectangulaires et prédire une valeur constante dans chacune. Le résultat est une fonction en escaliers.
Les arbres sont plus flexibles sur certains aspects – interactions, ruptures nettes – mais la fonction ajustée n’est ni lisse ni continue et généralise moins bien dans les zones clairsemées. Choisissez les splines si vous voulez de la douceur et une extrapolation stable ; les arbres si vous devez modéliser des frontières nettes ou des interactions multiples.
Pourquoi les splines comptent
Les splines sont omniprésentes en statistique appliquée : recherche clinique, analyse économique, sciences de l’environnement, séries temporelles… partout où l’on souhaite modéliser un effet non linéaire lisse sans recourir à une boîte noire.
La raison : elles offrent le bon équilibre – assez de flexibilité pour des données « du monde réel », assez de structure pour rester interprétables et stables.
Elles sont aussi le socle de méthodes avancées. Les modèles additifs généralisés en découlent directement, les splines de lissage étendent l’idée avec de la régularisation intégrée, et beaucoup de techniques modernes utilisent des bases de splines. Pour comprendre tout cela, commencez par les splines.
Bref, les splines comptent parce qu’elles sont pratiques et parce qu’elles servent de brique de base à la suite. Pas le modèle le plus puissant, mais l’un des plus fiables – et c’est souvent ce qui importe.
Conclusion
La régression par splines modélise le non linéaire en combinant des polynômes par morceaux aux points appelés nœuds. Voilà l’idée ; le reste n’en est que des variantes.
Les nœuds et la douceur du raccordement sont les deux notions à maîtriser. Tout le reste (types de splines, bases, implémentations en R et Python) n’est qu’une façon différente de travailler avec ces deux concepts.
Testez plusieurs types de splines sur vos données. Comparez cubiques, cubiques naturelles et B-splines. Déplacez les nœuds et observez. Expérimentez : la nature visuelle de l’ajustement permet de voir rapidement l’impact de chaque choix.
Pour aller plus loin dans les mathématiques des splines et d’autres algorithmes, inscrivez-vous à notre parcours Machine Learning Scientist in Python. Il contient tout ce qu’il faut pour être opérationnel en 2026.
Devenez un scientifique ML
FAQ sur les splines
Qu’est-ce que la régression par splines, simplement ?
La régression par splines permet de modéliser des relations courbes en découpant l’étendue du prédicteur en segments et en ajustant un petit polynôme dans chaque segment. Les segments sont raccordés en douceur en des points appelés nœuds, de sorte que le résultat final est une courbe continue. Elle est plus flexible que la régression linéaire et plus stable qu’une régression polynomiale de haut degré.
Quand utiliser une régression par splines plutôt qu’une régression linéaire ?
Utilisez une régression par splines lorsque la relation entre votre prédicteur et votre cible n’est pas une droite. Si un modèle linéaire laisse des motifs dans les résidus – par exemple, des erreurs positives au milieu et négatives aux extrêmes – c’est un signe de non-linéarité.
Que sont les nœuds en régression par splines ?
Les nœuds sont les points de l’axe du prédicteur où s’achève un segment polynomial et où commence le suivant. Ils contrôlent la flexibilité de la spline. Plus de nœuds signifie plus d’endroits où la courbe peut se plier. Le choix du nombre et de la position des nœuds est la décision centrale : trop peu = sous-ajustement ; trop = surajustement.
Quelle est la différence entre splines cubiques et splines cubiques naturelles ?
Les deux utilisent des polynômes cubiques entre les nœuds, mais diffèrent aux frontières des données. Les splines cubiques « classiques » peuvent se comporter de façon inattendue aux bords, car les segments extrêmes restent cubiques. Les splines cubiques naturelles imposent une linéarité au-delà des nœuds externes, ce qui stabilise nettement les prédictions près ou au-delà des limites.
Comment choisir le nombre de nœuds pour un modèle spline ?
Commencez avec 3 à 5 nœuds placés aux quantiles du prédicteur afin que chaque segment ait un nombre d’observations similaire. Si les résidus montrent des motifs non captés, ajoutez un nœud dans la région concernée. Pour une approche plus rigoureuse, utilisez la validation croisée pour comparer différents nombres de nœuds et retenez la configuration au plus faible score de validation.

