Corso
Adattare una retta a dati che curvano non è mai una buona idea.
La regressione lineare presume che la relazione tra predittori e target sia una retta. Purtroppo, la maggior parte delle relazioni nel mondo reale non lo è. Pensa al rapporto tra reddito e spesa o tra tempo e crescita: si piegano, si appiattiscono, si ripiegano e cambiano direzione in modi che non possono essere rappresentati da un’unica pendenza.
La regressione a spline gestisce questo lasciando che la relazione si pieghi dove serve, senza adattare una curva selvaggia e non vincolata. L’idea è di adattare più segmenti polinomiali lisci lungo l’intervallo del predittore e combinarli in punti specifici.
In questo articolo imparerai i concetti alla base della regressione a spline, come i nodi controllano la flessibilità, i principali tipi di spline e come applicarli nella pratica.
Prima di affrontare le spline, leggi il nostro tutorial che ti insegnerà tutto ciò che devi sapere sulla regressione lineare semplice.
Che cos’è la regressione a spline?
La regressione a spline è una tecnica di regressione che modella relazioni non lineari usando funzioni polinomiali a tratti unite in punti specifici chiamati nodi.
Quindi, invece di usare un’unica equazione per descrivere l’intera relazione, la regressione a spline suddivide l’intervallo del predittore in parti più piccole e adatta un polinomio separato su ciascuna parte. Questi pezzi si incontrano nei nodi e dei vincoli assicurano transizioni fluide.
Il risultato finale sta tra due estremi. È più flessibile della regressione lineare, che può tracciare solo una retta attraverso i dati. Ed è più strutturato di modelli non lineari completamente non vincolati come reti neurali profonde o metodi kernel, che possono adattare quasi tutto ma ti dicono ben poco su cosa abbiano effettivamente adattato.
Per questo motivo, le spline compaiono così spesso nella statistica applicata.
Perché serve la regressione a spline
I dati reali quasi mai seguono una retta.
La regressione lineare è il punto di partenza predefinito per modellare relazioni, ma ha un’ipotesi forte: l’effetto di un predittore sull’esito resta costante lungo l’intervallo. Quando la relazione reale curva o cambia direzione, una retta non la coglie. Ottieni errori agli estremi e un modello che non riesce a seguire il pattern.
La soluzione è usare un modello più flessibile. La regressione polinomiale di alto grado è un’opzione: aggiungi i termini x^2, x^3, x^4 finché la curva non si piega abbastanza da adattarsi ai tuoi dati. Ma i polinomi diventano instabili ai bordi dei dati, impennandosi verso l’alto o il basso dove hai pochi punti. Questo comportamento è chiamato fenomeno di Runge e rende i polinomi di alto grado rischiosi per la previsione.
La regressione a spline sta tra questi due estremi.
Ottieni flessibilità locale dove i dati curvano, senza l’instabilità globale di un singolo polinomio di alto grado. Ogni segmento è un polinomio di basso grado (di solito cubico), quindi nessuna parte può comportarsi in modo inatteso. E poiché i segmenti sono uniti senza soluzione di continuità ai nodi, la curva complessiva appare ancora come una funzione continua.
In poche parole, una spline offre abbastanza flessibilità per seguire pattern complessi e abbastanza struttura per restare ben comportata agli estremi.
Come funziona la regressione a spline
La regressione a spline segue sempre un semplice flusso in tre passi.
- Dividi l’intervallo del predittore in regioni: scegli un insieme di nodi lungo l’asse del predittore. Questi nodi suddividono l’intervallo in intervalli. Se metti tre nodi, ottieni quattro regioni. I nodi sono i confini tra i segmenti.
- Adatta un polinomio in ciascuna regione: all’interno di ogni intervallo, il modello adatta un polinomio di basso grado. Ogni regione ha i propri coefficienti, così la curva può piegarsi in modo diverso nelle diverse parti dell’intervallo del predittore. Una regione in cui la relazione è quasi piatta ottiene un polinomio quasi piatto. Una regione in cui la relazione curva nettamente ne ottiene uno più curvo.
- Collega le regioni: il modello impone vincoli di continuità a ogni nodo. I valori dei polinomi da entrambi i lati devono coincidere al nodo, così la curva non ha salti. Per le spline cubiche, devono coincidere anche la prima e la seconda derivata, il che significa niente spigoli vivi e niente cambi bruschi di curvatura.
Questi vincoli sono ciò che dà alle spline l’aspetto di un’unica curva liscia che si piega localmente ma scorre in modo continuo lungo l’intero intervallo del predittore. Visivamente, non riesci a distinguere dove finisce un polinomio e inizia il successivo.
Nodi, grado del polinomio e vincoli di continuità definiscono insieme la spline. Se ne cambi uno, ottieni un tipo di spline diverso con proprietà diverse — ed è proprio ciò che vedrai nelle prossime sezioni.
Cosa sono i nodi nella regressione a spline?
I nodi sono i punti lungo l’asse del predittore in cui finisce un segmento polinomiale e inizia il successivo.
Puoi pensarli come le giunture della spline. Se metti un nodo a x = 5, il modello adatta un polinomio per i valori sotto 5 e un polinomio diverso per i valori sopra 5. I due polinomi si incontrano al nodo e i vincoli di continuità garantiscono un collegamento fluido. Se aggiungi più nodi, ottieni più segmenti, quindi la curva può piegarsi in più punti.
Ecco perché i nodi sono la leva principale per controllare quanto è flessibile il modello.
Il numero di nodi determina quanti pezzi polinomiali compongono la spline. La posizione dei nodi determina dove la curva può cambiare forma. Una spline con due nodi può piegarsi solo in pochi punti. Una spline con venti nodi può seguire quasi ogni punto dato.
Scegliere il numero e la posizione giusti dei nodi è quindi la decisione principale nella regressione a spline.
Troppo pochi nodi
Se metti troppo pochi nodi, la spline non ha abbastanza segmenti per seguire il pattern reale nei dati. La curva resta troppo rigida. Si comporta quasi come un polinomio di basso grado: flessibile in modo generale, ma incapace di cogliere i cambiamenti locali.
Immagina di adattare una spline con un nodo a dati che hanno tre fasi distinte: una crescita, un plateau e un calo. Con un solo nodo, la spline ha solo due segmenti con cui lavorare. Può cogliere la crescita e una delle altre fasi, ma non tutte e tre. Finisci con lo stesso problema della regressione lineare: errori dove la spline non riesce a seguire la forma dei dati.

Esempio con troppo pochi nodi
Troppo pochi nodi portano a underfitting. Il modello è troppo liscio per essere utile.
Troppi nodi
Il problema opposto è altrettanto grave. Se metti troppi nodi, la spline ha così tanti segmenti da iniziare ad adattare il rumore nei dati invece del pattern reale. La curva serpeggia tra ogni osservazione e insegue la variazione casuale invece della tendenza sottostante.
Una spline con venti nodi su un dataset di cinquanta punti sembrerà più un “unisci i puntini” che un modello. Adatterà quasi perfettamente i dati di training, ma le previsioni su nuovi dati saranno inaffidabili. Piccoli cambi nell’input porteranno a grandi e imprevedibili cambi nell’output.

Esempio con troppi nodi
Troppi nodi portano a overfitting. Il modello è troppo flessibile per generalizzare.
Vuoi abbastanza nodi da cogliere le curve reali nei dati, ma non così tanti da far memorizzare il rumore. Le sezioni seguenti spiegano come decidere in pratica.
Tipi di spline
Le spline esistono in alcune varianti, e la scelta dipende soprattutto dal tipo di polinomio usato in ogni segmento e dai vincoli imposti alla curva.
Spline lineari
Le spline lineari sono la versione più semplice. Ogni segmento è una retta e i segmenti si collegano ai nodi.

Esempio di spline lineari
Qui il vincolo di continuità è blando, perché i valori da entrambi i lati devono coincidere al nodo, ma le pendenze possono cambiare. Il risultato sembra una serie di segmenti di retta collegati con spigoli a ciascun nodo. È abbastanza flessibile per gestire pieghe semplici, ma a volte la curva non è liscia.
Le spline lineari funzionano bene quando ti interessa cogliere le tendenze generali e non ti disturba la nitidezza visiva. Sono anche le più facili da interpretare, perché ogni segmento è solo una retta con la sua pendenza.
Spline cubiche
Le spline cubiche sono la scelta predefinita nella maggior parte delle applicazioni. Ogni segmento è un polinomio cubico (grado 3) e i vincoli di continuità sono più severi rispetto alle spline lineari.

Esempio di spline cubiche
A ogni nodo devono valere tre condizioni: i valori coincidono, le prime derivate coincidono e le seconde derivate coincidono. Ciò significa niente salti, niente spigoli vivi e niente cambi improvvisi di curvatura. La curva attraversa i nodi senza segni visivi di dove avvengono le transizioni.
Il cubico è il grado più basso che consente cambiamenti di curvatura lisci. Ecco perché è così popolare. Gradi più alti raramente aggiungono flessibilità utile e rendono solo il modello più difficile da controllare.
Spline cubiche naturali
Le spline cubiche naturali sono una variante che aggiunge vincoli extra ai bordi dei dati.

Esempio di spline cubiche naturali
Il problema delle spline cubiche regolari è che possono comportarsi in modo strano ai bordi, soprattutto dove hai pochi dati. I segmenti più a sinistra e più a destra sono ancora polinomi cubici, e i cubici possono impennarsi rapidamente quando si extrapola.
Le spline cubiche naturali aggirano il problema imponendo che la seconda derivata sia zero ai nodi di confine. In pratica, significa che la curva diventa lineare oltre i nodi più esterni. Il comportamento in extrapolazione è molto più stabile, il che rende le spline cubiche naturali una scelta migliore quando ti interessano le previsioni vicino ai bordi dei dati.
B-spline
Le B-spline (abbreviazione di basis splines) sono un modo diverso di costruire le spline. Invece di definire direttamente ogni segmento polinomiale, le B-spline costruiscono la spline come somma pesata di funzioni base.

Esempio di B-spline
Ogni funzione base è a sua volta una piccola spline non nulla solo in una regione limitata. La spline completa è la somma di queste funzioni base, ciascuna moltiplicata per un coefficiente stimato dalla regressione.
Le B-spline sono numericamente stabili e facili da estendere. La maggior parte delle implementazioni moderne di spline in Python e R usa rappresentazioni B-spline, anche quando l’interfaccia lato utente sembra una spline “regolare”. Se hai mai chiamato bs() in R o usato SplineTransformer in scikit-learn, hai usato le B-spline.
Regressione a spline vs regressione polinomiale
Sia la regressione polinomiale sia quella a spline gestiscono relazioni non lineari, ma lo fanno in modi molto diversi. La differenza sta in come si costruisce la curva.
Regressione polinomiale
La regressione polinomiale adatta un singolo polinomio globale su tutto l’intervallo del predittore. Scegli un grado (2, 3, 5, 10) e il modello trova un unico insieme di coefficienti che minimizza l’errore su tutti i dati. La curva ha un’unica equazione, e quell’equazione descrive la relazione ovunque.
Sembra pulito, ma ha un problema. Un singolo polinomio deve bilanciare l’adattamento su tutto l’intervallo, quindi ciò che succede in una regione influenza ciò che succede in tutte le altre. Se aumenti il grado per gestire una piega netta nel mezzo dei dati, vedrai la curva iniziare a oscillare ai bordi. Questo è il fenomeno di Runge citato prima: i polinomi di alto grado diventano instabili vicino ai confini dei dati.
L’altro problema è che la regressione polinomiale non ha un concetto di località. Un picco a x = 5 può cambiare la forma dell’adattamento a x = 50, perché ogni osservazione contribuisce alla stessa equazione globale.
Regressione a spline
La regressione a spline divide l’intervallo del predittore in segmenti e adatta un polinomio di basso grado in ciascun segmento. I polinomi sono collegati in modo fluido ai nodi, ma ciascuno è indipendente nel senso che la sua forma è guidata soprattutto dai dati nella propria regione.
Questo ti dà flessibilità locale. Una regione con una piega marcata ottiene un polinomio più curvo. Una regione con una tendenza piatta ottiene uno quasi piatto. E poiché ogni segmento è di basso grado (di solito cubico), nessuna parte può comportarsi in modo strano agli estremi. Ottieni un adattamento più liscio e stabile, soprattutto vicino ai bordi dei dati.
Confronto fianco a fianco

Regressione polinomiale versus a spline
Quindi, se la tua relazione è lievemente non lineare e ti va bene un adattamento globale, la regressione polinomiale può funzionare. Se hai un pattern più complesso o ti interessano previsioni vicino ai confini, le spline sono la scelta più sicura.
Scelta del numero e della posizione dei nodi
La selezione dei nodi è la parte più importante della regressione a spline. Troppo pochi nodi portano a underfitting e troppi portano a overfitting. E dove li metti cambia i pattern che il modello può catturare.
Ci sono diversi approcci e spesso li combinerai.
- Conoscenza del dominio: se conosci il problema, sfruttalo. Uno studio clinico potrebbe posizionare i nodi a soglie cliniche note. Un modello di pricing potrebbe posizionarli in punti in cui si prevede che il comportamento dei consumatori cambi. Il posizionamento guidato dal dominio è l’approccio più interpretabile perché i segmenti corrispondono a confini reali.
- Nodi equidistanti: scegli un numero di nodi e spaziali uniformemente lungo l’intervallo del predittore. Funziona quando i dati sono approssimativamente distribuiti in modo uniforme lungo l’asse del predittore. Non funziona quando hai dati densi in alcune regioni e radi in altre: i nodi equidistanti possono cadere in regioni quasi senza dati, rendendo l’adattamento instabile.
- Nodi basati sui quantili: invece di posizionare i nodi a posizioni uguali sull’asse x, posizionali ai quantili del predittore. Con 4 nodi e posizionamento per quantili, metteresti i nodi al 20°, 40°, 60° e 80° percentile. Questo garantisce che ogni segmento contenga all’incirca lo stesso numero di osservazioni, rendendo l’adattamento più affidabile nelle regioni rade.
- Cross-validation: provi diversi numeri di nodi, adatti la spline per ciascuno e confronti le prestazioni su dati di validazione. Vince la configurazione con l’errore di validazione più basso. Questo elimina le congetture ma aggiunge costo computazionale, e il risultato dipende comunque dalla strategia di posizionamento (uniforme, quantili) che stai esplorando.
Il trade-off è lo stesso di ogni problema di regressione: flessibilità contro complessità. Più nodi significano più flessibilità, che consente al modello di seguire pattern più fini ma anche di inseguire il rumore. Meno nodi significano un modello più stabile e interpretabile che però può perdere pattern reali.
Inizia con 3-5 nodi posizionati ai quantili, poi controlla i residui. Se vedi pattern sistematici che la spline non coglie, aggiungi un nodo in quella regione. Se l’adattamento è troppo ondulato, toglierne uno. La cross-validation vale la pena quando devi motivare la scelta o quando il modello va in produzione.
La regressione a spline in machine learning e statistica
La regressione a spline compare ovunque serva modellare un effetto non lineare e liscio senza vincolarsi a una forma funzionale specifica. Ecco un paio di ambiti comuni:
- Trend nelle serie temporali: un uso comune è separare il trend liscio in una serie temporale dalle fluttuazioni di breve periodo. Una spline adattata sul tempo come predittore ti dà una linea di tendenza flessibile che si adatta ai cambi di direzione senza reagire eccessivamente al rumore. Economisti e analisti lo usano spesso quando vogliono descrivere la traiettoria sottostante di una variabile — pensa a PIL o prezzi azionari — senza assumere linearità o esponenzialità.
- Economia ed econometria: le spline si usano per modellare relazioni in cui l’effetto di una variabile cambia lungo il suo intervallo. L’effetto del reddito sui consumi non è costante: i nuclei a basso reddito spendono in modo diverso da quelli ad alto reddito. Una spline lo vede senza assumere una forma funzionale specifica.
- Sanità e biostatistica: molti esiti di salute hanno relazioni non lineari con predittori come età, BMI, pressione sanguigna o livelli di biomarcatori. Il rischio di malattia spesso segue una forma a U o a J: entrambi gli estremi sono pericolosi, il centro è sicuro. Un modello lineare lo perderebbe. Le spline cubiche e cubiche naturali sono lo strumento standard per modellare questi effetti e sono integrate nella maggior parte dei software statistici usati nella ricerca clinica.
- Modellazione ambientale ed ecologica: le spline compaiono anche nel modellare come specie o variabili climatiche rispondono a gradienti ambientali. Temperature, altitudine e piogge hanno spesso effetti non lineari su risultati come abbondanza di specie o resa delle colture. Le spline permettono di adattare la curva di risposta senza specificare prima la sua forma.
In tutti questi casi, le spline ti danno flessibilità dove serve, senza costringerti a indovinare la forma funzionale della relazione. Questo le rende adatte sia alla modellazione esplorativa sia a modelli di produzione quando conta l’interpretabilità.
Regressione a spline in Python
In Python ci sono tre modi comuni per adattare una regressione a spline: scikit-learn per una pipeline in stile ML, patsy per la specifica del modello con formule e statsmodels per l’inferenza statistica. Ecco una panoramica.
Uso di scikit-learn
scikit-learn ti mette a disposizione SplineTransformer, che converte una feature numerica in un insieme di funzioni base B-spline. Poi passi queste feature a un qualsiasi modello di regressione lineare.
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))

scikit-learn R2 score
Il SplineTransformer crea la base spline con 5 nodi e polinomi cubici. Poi, LinearRegression trova i coefficienti per ciascuna funzione base. Qui puoi sostituire qualsiasi regressore sklearn — ridge, lasso, qualsiasi modello lineare sulle feature trasformate.
Questo approccio si integra bene con i workflow sklearn, ma non ottieni output statistici come errori standard o p-value. Per quelli, ti serviranno patsy o statsmodels.
Uso di patsy
patsy è un’interfaccia basata su formule per costruire matrici dei disegni. È la cosa più simile che Python ha alle formule modello di R, ed è lo standard per creare feature spline da usare con 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())

Riepilogo modello patsy
La funzione bs() dentro la formula dice a patsy di costruire una base B-spline con 6 gradi di libertà e grado 3 (cubico). patsy restituisce la matrice dei disegni, che entra direttamente in sm.OLS(). Il parametro df controlla il numero di funzioni base della spline: valori più alti danno più flessibilità, un po’ come aggiungere più nodi.
Se vuoi spline naturali, sostituisci semplicemente bs() con ns():
spline_basis = dmatrix("ns(x, df=6)", data=df, return_type="dataframe")
Uso di statsmodels con formule
statsmodels ha anche una API a formule che si integra con patsy. È la versione più pulita quando vuoi una regressione a spline in una riga con pieno output statistico.
import statsmodels.formula.api as smf
model = smf.ols("y ~ bs(x, df=7, degree=3)", data=df).fit()
print(model.summary())

Riepilogo modello statsmodels
L’output di summary() ti dà i coefficienti per ciascuna funzione base della spline, errori standard, p-value e le solite statistiche di adattamento. I coefficienti in sé non sono direttamente interpretabili, perché ciascuno corrisponde a una funzione base, non a una quantità del mondo reale. Interpreti l’adattamento tracciando le previsioni lungo l’intervallo del predittore.
Per la maggior parte dei workflow statistici, l’API a formule di statsmodels è la scelta più comoda. Usa scikit-learn quando le spline fanno parte di una pipeline ML più ampia.
Regressione a spline in R
R ha il miglior supporto integrato per le spline tra i linguaggi principali. Il pacchetto splines è incluso in R base e le sue due funzioni principali — bs() e ns() — funzionano direttamente dentro qualsiasi formula di regressione.
La funzione bs() crea una base B-spline. La funzione ns() crea una base di spline cubiche naturali. Entrambe producono una matrice di feature spline che il sistema di formule di R inserisce automaticamente nel modello.
Uso di bs() per le B-spline
# 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)

Output di bs() in R
La formula y ~ bs(x, df = 6, degree = 3) dice a R di sostituire x con una base B-spline di grado 3 e 6 gradi di libertà. R fa il resto: costruisce la matrice di base, adatta il modello lineare e produce un oggetto lm standard con tutte le solite diagnostiche.
Puoi passare direttamente le posizioni dei nodi se vuoi pieno controllo:
model <- lm(y ~ bs(x, knots = c(2, 5, 8), degree = 3), data = df)
Questo posiziona i nodi a x = 2, x = 5 e x = 8 invece di lasciare che R li scelga per te.
Uso di ns() per le spline naturali
Per le spline cubiche naturali (quelle con comportamento lineare oltre i confini), usa ns():
model_natural <- lm(y ~ ns(x, df = 6), data = df)
summary(model_natural)

Output di ns() in R
La sintassi è la stessa, ma il comportamento ai bordi è diverso. Le spline naturali sono di solito la scelta più sicura quando ti interessano previsioni o interpretazioni vicino ai bordi dei dati.
Interpretare l’output
I coefficienti nell’output di summary() corrispondono alle funzioni base della spline, non a quantità interpretabili direttamente. Per vedere cosa ha imparato il modello, prevedi su una griglia di valori di x e traccia il risultato:
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)

Interpretazione dell’output in R
Questo è lo schema standard in R: adatti la spline, prevedi su una griglia liscia e sovrapponi la curva ai dati. R ti permette anche di usare termini spline insieme ad altri predittori nella stessa formula:
model_multi <- lm(y ~ ns(x, df = 6) + other_var, data = df)
Questo adatta un effetto non lineare per x e un effetto lineare per other_var nello stesso modello. Questa flessibilità spiega perché le spline sono così usate nei workflow statistici basati su R.
Vantaggi della regressione a spline
Ecco un paio di vantaggi delle spline rispetto a modelli di machine learning più popolari:
- Modellano relazioni non lineari senza conoscerne la forma: non devi vincolarti a una forma funzionale specifica. Le spline lasciano che siano i dati a plasmare la curva, così puoi modellare pieghe, plateau e cambi di direzione senza sapere in anticipo dove avverranno.
- Adattamenti lisci e interpretabili: l’output è una curva continua, non una previsione black box. Puoi tracciare la spline, vedere come la risposta cambia lungo l’intervallo del predittore e spiegarlo a un pubblico non tecnico.
- Più stabili dei polinomi di alto grado: ogni segmento è un polinomio di basso grado, così nessuna parte può comportarsi in modo selvaggio agli estremi. Il comportamento ai bordi è molto più controllato, specialmente con le spline cubiche naturali.
- Si integrano nei workflow di regressione esistenti: le spline funzionano dentro la regressione lineare standard. Puoi combinarle con altri predittori, regolarizzazione, effetti misti e qualsiasi altro strumento che si appoggi all’OLS.
Limiti della regressione a spline
Come la maggior parte dei modelli, anche le spline presentano alcuni compromessi da conoscere:
- La scelta dei nodi è la parte difficile: scegliere numero e posizione dei nodi richiede lavoro. I default a volte vanno bene, ma spesso serviranno cross-validation o conoscenza del dominio per ottenere un buon adattamento. Non c’è una regola unica che funzioni sempre.
- L’interpretazione si complica con più nodi: una spline con tre nodi è abbastanza semplice da interpretare. Una con venti nodi no. Puoi comunque tracciare la curva, ma spiegare in modo rigoroso cosa stia facendo il modello diventa molto più difficile.
- Possono comunque overfittare: le spline sono più stabili dei polinomi di alto grado, ma non sono immuni all’overfitting. Troppi nodi, nodi posizionati male, troppe outlier o un campione ridotto possono produrre un modello che si adatta bene ai dati di training ma fallisce su nuovi dati.
- I coefficienti non sono direttamente significativi: i coefficienti adattati corrispondono a funzioni base, non a quantità del mondo reale. Non puoi leggere “un aumento di un’unità in x cambia y di beta” come nella regressione lineare. Devi interpretare visivamente l’adattamento.
Errori comuni con la regressione a spline
Ecco ora alcuni errori che i neofiti commettono con la regressione a spline:
- Usare troppi nodi: spesso si aggiungono nodi finché l’adattamento sembra buono visivamente sui dati di training. È una classica trappola di overfitting. Se la spline ondeggia tra ogni osservazione, hai troppi nodi. Fai cross-validation o parti con pochi nodi e aggiungili solo quando i residui mostrano un pattern chiaro.
- Usare troppo pochi nodi e dare per scontata la linearità: l’errore opposto. Se adatti una spline con uno o due nodi e i residui mostrano ancora curvatura, il modello è sottoadattato. La spline non ha abbastanza segmenti per seguire il pattern reale. Aggiungi nodi nelle regioni in cui i residui sono anomali.
- Fraintendere il comportamento ai bordi: le spline cubiche regolari possono comportarsi in modo imprevedibile vicino ai bordi dei dati. Se prevedi vicino ai confini (o oltre), usa le spline cubiche naturali. Impongono un comportamento lineare oltre i nodi di confine ed evitano le oscillazioni che le cubiche regolari possono produrre.
- Confrontare direttamente le spline con modelli non lineari non vincolati: le spline non vogliono essere reti neurali o random forest. Se confronti una spline con un modello black box completamente non lineare sulla pura accuratezza predittiva, spesso vince il black box. Non è questo il punto. Le spline vincono in interpretabilità e capacità di inserirsi nell’inferenza statistica tradizionale.
Regressione a spline vs altre tecniche di modellazione non lineare
Le spline non sono l’unico modo per modellare relazioni non lineari, ma sono utili se ti interessa l’interpretabilità. Ecco come si confrontano con le alternative più comuni.
Regressione polinomiale
La regressione polinomiale usa un’unica equazione globale. È più semplice da specificare ma meno stabile, soprattutto ai confini. Le spline battono i polinomi in flessibilità e stabilità quando la relazione ha più di una piega. I polinomi sono più facili da interpretare solo a gradi molto bassi (2 o 3). Oltre, le spline diventano sia più affidabili sia più interpretabili.
Modelli additivi generalizzati (GAM)
I GAM sono essenzialmente spline su larga scala. Un GAM ti permette di adattare una spline per ciascun predittore in modo indipendente e combinarle additivamente. Puoi pensare alla regressione a spline come a un GAM a singola variabile, e a un GAM come a una somma di spline su più variabili.
I GAM gestiscono più predittori non lineari in modo più pulito che adattando manualmente una spline per ciascuno. Includono anche penalizzazioni di smoothing che scelgono la giusta quantità di flessibilità, rimuovendo parte del lavoro di selezione dei nodi. Se lavori con più predittori e alcuni richiedono trattamento non lineare, di solito i GAM sono l’opzione migliore.
Alberi decisionali
Gli alberi decisionali adottano un approccio completamente diverso. Invece di adattare una curva liscia, suddividono lo spazio dei predittori in regioni rettangolari e prevedono un valore costante in ciascuna. Il risultato è una funzione a gradini.
Gli alberi sono più flessibili delle spline in alcuni sensi — possono modellare interazioni e cambi bruschi. Ma la funzione adattata non è liscia né continua. Inoltre non generalizza bene nelle regioni con pochi dati. Le spline sono migliori quando ti interessa la levigatezza e un’extrapolazione stabile. Gli alberi sono migliori quando vuoi modellare confini netti o interazioni tra molte variabili.
Perché la regressione a spline è importante
Le spline sono ovunque nella statistica applicata. Compaiono nella ricerca clinica, nell’analisi economica, nelle scienze ambientali, nella modellazione di serie temporali e in qualsiasi campo in cui serva modellare un effetto non lineare e liscio senza ricorrere a un modello black box.
Il motivo è l’equilibrio che offrono: abbastanza flessibilità per gestire dati disordinati, ma abbastanza struttura per restare interpretabili e stabili.
Sono anche fondamentali per metodi più avanzati. I Modelli Additivi Generalizzati sono costruiti direttamente sulle spline, le smoothing spline estendono l’idea con regolarizzazione integrata e molte tecniche moderne di regressione non lineare usano basi spline. Se vuoi capire questi metodi, devi prima capire le spline.
Le spline contano perché sono pratiche e perché sono il mattone di base per molto di ciò che viene dopo. Non sono il modello più potente, ma sono tra i più affidabili — e spesso è questo che conta.
Conclusione
La regressione a spline modella relazioni non lineari combinando polinomi a tratti in punti chiamati nodi. Questa è l’idea, e il resto sono varianti su di essa.
Nodi e levigatezza sono i due concetti da capire. Tutto il resto (tipi di spline, rappresentazioni a basi, implementazione in R e Python) sono solo modi diversi di lavorare con questi due concetti.
Prova qualche tipo di spline sui tuoi dati. Confronta cubiche, cubiche naturali e B-spline. Sposta i nodi e guarda cosa succede. Sperimenta: la natura visiva dell’adattamento rende facile vedere cosa comporta ogni scelta.
Se vuoi approfondire la matematica dietro le spline e molti altri algoritmi, iscriviti al nostro Machine Learning Scientist in Python track. Ha tutto ciò che ti serve per essere pronto al lavoro nel 2026.
FAQ sulla regressione a spline
Cos’è la regressione a spline in parole semplici?
La regressione a spline è un modo per modellare relazioni curve nei dati dividendo l’intervallo del predittore in segmenti e adattando un piccolo polinomio in ciascun segmento. I segmenti si connettono in modo fluido in punti chiamati nodi, così il risultato complessivo è un’unica curva continua. È più flessibile della regressione lineare e più stabile della regressione polinomiale di alto grado.
Quando dovrei usare la regressione a spline invece della regressione lineare?
Usa la regressione a spline quando la relazione tra predittore ed esito non è una retta. Se un modello lineare lascia pattern nei residui — ad esempio, errori positivi al centro dei dati e negativi agli estremi — è un segnale che la relazione è non lineare.
Cosa sono i nodi nella regressione a spline?
I nodi sono i punti lungo l’asse del predittore in cui finisce un segmento polinomiale e inizia il successivo. Controllano quanto la spline può essere flessibile. Più nodi significano che la curva può piegarsi in più punti. Scegliere numero e posizionamento dei nodi è la decisione centrale nella regressione a spline. Troppo pochi portano a underfitting, troppi a overfitting.
Qual è la differenza tra spline cubiche e spline cubiche naturali?
Entrambe adattano polinomi cubici tra i nodi, ma differiscono nel comportamento ai bordi dei dati. Le spline cubiche regolari possono comportarsi in modo inatteso vicino ai margini perché le estremità sono ancora polinomi cubici completi. Le spline cubiche naturali forzano la curva a essere lineare oltre i nodi più esterni, rendendo le previsioni vicino o oltre i bordi molto più stabili.
Come scelgo il numero di nodi per un modello a spline?
Inizia con 3-5 nodi posizionati ai quantili del predittore così che ogni segmento abbia un numero simile di osservazioni. Se i residui mostrano pattern che la spline non coglie, aggiungi un nodo in quella regione. Per un approccio più rigoroso, usa la cross-validation per confrontare diversi numeri di nodi e scegli la configurazione con l’errore di validazione più basso.


