Corso
Quando i tuoi dati si curvano, non ha senso usare una linea retta per stimare nuovi punti. Facendolo, otterrai un modello che non coglie il pattern, ha residui elevati e previsioni scarse. I dati del mondo reale raramente si comportano in modo lineare, che tu stia modellando come il dosaggio di un farmaco influenzi la risposta, come la temperatura impatti lo stress di un materiale o come i prezzi degli asset si muovano nel tempo.
La regressione polinomiale risolve il problema estendendo la regressione lineare per adattare curve invece di linee rette. Basta aggiungere alcuni termini di grado superiore - x², x³ - e il tuo modello potrà seguire la forma reale dei dati.
In questo articolo vedremo cos’è la regressione polinomiale, la matematica che c’è dietro, come implementarla in Python e come evitare la trappola in cui la maggior parte delle persone cade: l’overfitting.
Se sei alle prime armi con il machine learning, leggi prima il nostro tutorial Fondamenti della regressione lineare in Python.
Che cos’è la regressione polinomiale?
La regressione polinomiale è l’algoritmo a cui ricorri quando una linea retta non può descrivere i tuoi dati.
La regressione lineare modella la relazione tra variabili come una linea retta. Funziona quando la relazione è davvero lineare - ma la maggior parte dei dati reali non lo è. Pensa a come varia lo spazio di frenata di un’auto con la velocità, o a come il tasso di crescita di una pianta risponde al fertilizzante. Queste relazioni sono curve. Una linea retta non le adatterà bene, qualunque cosa tu faccia.
La regressione polinomiale estende la regressione lineare aggiungendo termini di grado superiore all’equazione. Invece di adattare y = b0 + b1x, adatti qualcosa come y = b0 + b1x + b2x² + b3x³. Il grado del polinomio - quella n in "n-esimo grado" - controlla quante curvature può avere la curva.
In breve e senza giri di parole, ecco la differenza chiave tra le due:
-
Regressione lineare: adatta una linea retta. Un coefficiente per caratteristica, un grado di libertà nella curva.
-
Regressione polinomiale: adatta una curva. Ogni termine aggiuntivo (
x²,x³, ...) dà al modello più flessibilità per seguire la forma dei dati.

Regressione lineare vs regressione polinomiale
Sotto la superficie, la regressione polinomiale è ancora un modello lineare. "Lineare" qui si riferisce a come il modello tratta i suoi coefficienti, non alla forma della curva che produce. Stai aggiungendo nuove feature (x², x³) e adattando un’equazione lineare su di esse.
Quindi, quando usarla davvero?
Scegli la regressione polinomiale quando il grafico dei residui di un modello lineare mostra un pattern: è il segnale che la relazione non è lineare. È anche un’ottima scelta quando le conoscenze di dominio suggeriscono una relazione curva, come in fisica, biologia o economia.
Il rovescio della medaglia è che i polinomi di grado elevato possono diventare instabili. Un polinomio di grado 2 o 3 gestisce la maggior parte delle curve reali, ma andando oltre rischi di adattare il rumore più che il segnale.
Perché usare la regressione polinomiale?
La maggior parte delle relazioni tra variabili nel mondo reale non è lineare.
Una linea retta può avvicinarsi, ma "quasi" non basta quando stai prevedendo qualcosa di sensibile. Se la relazione nei dati si piega, un modello lineare mancherà costantemente quella piega.
La regressione polinomiale fa meglio permettendo al modello di curvare. Invece di forzare una linea retta attraverso i dati, adatti una curva che può seguire la forma della relazione.
Ecco alcune aree in diversi settori in cui fa davvero la differenza:
- Biologia e medicina: Le relazioni dose-risposta raramente sono lineari. Una dose bassa può avere poco effetto, una dose media funziona bene e una dose alta causa effetti collaterali. Quella curva a S richiede un modello polinomiale per essere catturata
- Ingegneria: Le relazioni sforzo-deformazione nei materiali, la resistenza aerodinamica e la dilatazione termica seguono pattern non lineari che la regressione polinomiale modella bene
- Finanza: I rendimenti degli asset, il pricing delle opzioni e le curve di domanda spesso mostrano effetti decrescenti o acceleranti che una linea retta non può rappresentare
- Pipeline di machine learning: Le feature polinomiali sono un modo rapido per aggiungere non linearità a un modello lineare senza passare a un algoritmo più complesso
Il filo conduttore in tutti questi casi è lo stesso: la relazione tra input e output cambia a valori diversi di x. La regressione lineare assume che il cambiamento sia costante. La regressione polinomiale no.
Detto questo, la regressione polinomiale non è una bacchetta magica.
Funziona meglio quando hai conoscenze di dominio che suggeriscono una relazione curva, o quando il grafico dei residui mostra chiaramente un pattern che una linea retta non può risolvere. Usala con un problema specifico in mente - non solo perché l’R² del tuo modello lineare non è abbastanza alto.
Capire la matematica dietro la regressione polinomiale
Conoscere la matematica di base dietro la regressione polinomiale ti aiuterà a capirla meglio.
Termini polinomiali
Nella regressione lineare, il tuo modello ha questo aspetto:

Formula della regressione lineare
Una variabile in input, un coefficiente, una linea retta. La regressione polinomiale estende questo aggiungendo termini di grado superiore:

Formula della regressione polinomiale
Ogni nuovo termine - x², x³ e così via - dà al modello una "curvatura" in più con cui lavorare. Un polinomio di grado 2 può adattare una singola curva. Un polinomio di grado 3 può adattare una curva che cambia direzione una volta. Il grado n controlla quanto è flessibile il modello.
L’algoritmo sottostante resta lo stesso. Stai solo aggiungendo nuove feature. x² è trattata come una variabile di input a sé, proprio come x. Il modello sta ancora adattando un’equazione lineare - solo che lo fa su feature trasformate.
Stima ai minimi quadrati
Adattare un modello di regressione polinomiale funziona come per la regressione lineare - cioè con la stima ai minimi quadrati.
L’idea è trovare i coefficienti che minimizzano la somma dei residui al quadrato:

Formula SSR
Ogni differenza al quadrato è un residuo - il divario tra ciò che il modello prevede e ciò che è stato osservato. Metterli al quadrato fa sì che gli errori negativi e positivi non si annullino e penalizza gli errori grandi più di quelli piccoli.
In pratica, ci pensa la libreria. Ma sapere che l’obiettivo sono i minimi quadrati aiuta a capire perché gli outlier danneggiano così tanto i modelli polinomiali: un singolo residuo grande viene elevato al quadrato e trascina i coefficienti nella sua direzione.
Interpretare i coefficienti
Nella regressione lineare, b1 ha un’interpretazione semplice: per ogni aumento di un’unità in x, y cambia di b1.
La regressione polinomiale è un po’ più complessa. Quando il modello include b_1x + b_2x^2, l’effetto di x su y dipende dal valore attuale di x: non puoi leggere b2 in isolamento e trarre una conclusione. La pendenza della curva cambia costantemente, cosa che puoi vedere derivando rispetto a x:

Derivata rispetto a x
La pendenza stessa è una funzione di x. Significa che l’impatto di una variazione di un’unità in x è diverso in ogni punto della curva.
Ecco perché non dovresti provare a interpretare i singoli coefficienti in un modello polinomiale. Guarda invece la curva nel suo insieme. Metti a confronto i tuoi valori previsti con i dati.
Applicazioni della regressione polinomiale nella data science
La regressione polinomiale compare in molti campi perché le relazioni curve sono ovunque nei dati reali.
Finanza
I dati finanziari raramente si muovono in linea retta.
I prezzi degli asset, la crescita dei ricavi e le curve di domanda tendono ad accelerare, decelerare o invertire direzione a seconda delle condizioni di mercato. Un modello lineare assume un tasso di cambiamento costante, cosa quasi mai vera. La regressione polinomiale ti consente di modellare questi cambiamenti - ad esempio, come la domanda dei consumatori cala lentamente all’inizio, poi bruscamente quando i prezzi superano una certa soglia.
È anche utile per l’analisi dei trend nel tempo. Quando adatti una curva ai dati storici dei prezzi o modelli come una metrica cresca nelle diverse fasi del ciclo economico, un polinomio di grado 2 o 3 spesso stima la forma molto meglio di una linea retta.
Ingegneria
I processi fisici sono alcuni dei migliori esempi di relazioni non lineari.
Sforzo e deformazione nei materiali, fluidodinamica, dilatazione termica e resistenza aerodinamica seguono curve, non linee. Molte delle equazioni fondamentali in fisica sono di natura polinomiale. La regressione polinomiale ti offre un modo guidato dai dati per adattare queste curve quando hai misure ma non un’elegante equazione in forma chiusa.
Un buon esempio è la forza di resistenza, che aumenta con il quadrato della velocità. Un modello lineare sottostimerà la resistenza ad alte velocità, mentre un polinomio di grado 2 adatterà correttamente la relazione.
Machine learning
Nel machine learning, la regressione polinomiale è spesso usata come tecnica di feature engineering più che come modello a sé stante.
Aggiungendo termini polinomiali - x², x³, termini di interazione - al tuo set di feature, dai a un modello lineare la capacità di adattare pattern non lineari senza passare a un algoritmo più complesso. È un primo passo comune quando il tuo modello lineare underfit e vuoi aggiungere flessibilità prima di ricorrere a qualcosa come un albero decisionale o una rete neurale.
È utile anche come modello di base.
Prima di addestrare un modello più complesso, adattare una regressione polinomiale ti dice quanta varianza può spiegare una semplice curva. Se un polinomio di grado 3 ti porta già gran parte del risultato, potresti non aver bisogno di nulla di più complesso.
Come scegliere il grado giusto per la regressione polinomiale
Scegliere il grado del polinomio è una delle decisioni più importanti. Se sbagli in un senso o nell’altro, otterrai un modello meno accurato.
Per fortuna, bastano poche righe di Python per fare il lavoro.
Overfitting vs underfitting
L’underfitting si verifica quando il grado è troppo basso. Un polinomio di grado 1 su dati curvi non coglierà il pattern: alto bias, previsioni scarse e un modello che va male sia sui dati di training sia su quelli nuovi.
L’overfitting è il problema opposto, ed è più insidioso perché all’inizio sembra andare bene. Un polinomio di grado alto può passare per ogni punto del set di training con errore quasi nullo. Ma il modello sta solo memorizzando il rumore. Crollerà su nuovi dati.
Puoi vederlo confrontando l’errore di training con quello di test al variare del grado:
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
np.random.seed(42)
# Generate sample data
x = np.linspace(-3, 3, 80).reshape(-1, 1)
y = 0.6 * x.ravel()**2 - x.ravel() + np.random.normal(0, 0.6, 80)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)
for deg in [1, 2, 12]:
poly = PolynomialFeatures(deg)
model = LinearRegression()
model.fit(poly.fit_transform(x_train), y_train)
train_err = mean_squared_error(y_train, model.predict(poly.transform(x_train)))
test_err = mean_squared_error(y_test, model.predict(poly.transform(x_test)))
print(f"Degree {deg:>2} | Train MSE: {train_err:.4f} | Test MSE: {test_err:.4f}")

MSE su gradi diversi
Oppure, in forma visiva:

Adattamento dei dati con diversi gradi polinomiali
Il grado 1 mostra errore elevato su entrambi i set: è underfitting. Il grado 2 è ben bilanciato. Il grado 12 ha errore di training più basso ma un errore di test molto più alto: è overfitting.
Cross-validation
Il modo giusto per trovare il grado migliore è la cross-validation - in particolare, la k-fold cross-validation.
L’idea è dividere i dati in k sottoinsiemi, quindi addestrare su k-1 e testare su quello lasciato fuori, ripetendo finché ogni sottoinsieme è stato il set di test una volta. Infine, medi l’errore su tutte le fold, ripeti per ciascun grado candidato e scegli quello con l’errore medio di test più basso.
L’implementazione è molto più semplice della spiegazione:
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import make_pipeline
import matplotlib.pyplot as plt
np.random.seed(42)
# Generate sample data
x = np.linspace(-3, 3, 80).reshape(-1, 1)
y = 0.6 * x.ravel()**2 - x.ravel() + np.random.normal(0, 0.6, 80)
# Test degrees 1 through 10
degrees = range(1, 11)
mean_errors = []
for deg in degrees:
model = make_pipeline(PolynomialFeatures(deg), LinearRegression())
scores = cross_val_score(model, x, y, cv=5, scoring="neg_mean_squared_error")
mean_errors.append(-scores.mean())
print(f"Degree {deg:>2} | Mean error: {-scores.mean():.4f}")
best_degree = np.argmin(mean_errors) + 1

Confronto dell’errore per grado
Oppure, in forma visiva:

Confronto degli errori in cross-validation
L’errore in CV cala man mano che aggiungi termini polinomiali utili, poi risale quando il modello inizia a fare overfitting.
Quando due gradi danno errori in CV simili, scegli quello più basso. Un modello più semplice che rende altrettanto bene è sempre la scelta migliore.
Considerazioni chiave e limitazioni
Ci sono un paio di modi in cui la regressione polinomiale può portarti a conclusioni sbagliate. Vediamoli.
Sensibilità agli outlier
Gli outlier influenzano la regressione polinomiale più della regressione lineare.
I minimi quadrati elevano al quadrato ogni residuo prima di sommarli. Un singolo punto dati lontano dalla tendenza contribuisce con un errore sproporzionatamente grande e il modello piegherà la curva per ridurre quell’errore - anche se significa distorcere l’adattamento altrove.
Questo effetto peggiora all’aumentare del grado. Un polinomio di grado elevato ha la flessibilità per inseguire un outlier, trascinando la curva lontano dalla massa dei dati per adattare un punto anomalo.
Un modo per aggirare il problema è pulire i dati prima dell’adattamento. Visualizza i dati, identifica gli outlier e decidi se rappresentano segnale reale o rumore. Se sono rumore - errori di misurazione, errori di inserimento, record corrotti - rimuovili. Se sono reali, valuta un metodo di fitting più resistente agli outlier come RANSAC o la regressione di Huber.
Overfitting
Ogni volta che aggiungi un termine polinomiale, dai al modello più flessibilità. A un certo punto, questa flessibilità smette di aiutare e il modello inizia ad adattare il rumore casuale nei dati di training invece del pattern reale. Il risultato è una curva che va bene sul training ma crolla su nuovi dati.
La parte insidiosa è che l’overfitting è invisibile se guardi solo l’errore di training. Un polinomio di grado 10 avrà quasi sempre un MSE di training più basso di un polinomio di grado 2. Ma non significa che sia un modello migliore.
Ecco come dovresti procedere:
- Parti basso: prova grado 2 o 3 prima di salire. La maggior parte delle curve reali non richiede di più
- Valuta sempre su dati tenuti da parte: il solo errore di training non dice nulla sulla generalizzazione.
- Cross-validation: usala per trovare il grado oltre il quale l’errore di test smette di migliorare.
- Osserva la curva: se il tuo polinomio fa cose strane fuori dall’intervallo dei dati di training, è un segnale di overfitting.
La regressione polinomiale funziona meglio quando hai un buon motivo per aspettarti una relazione curva e puoi mantenere basso il grado.
Alternative alla regressione polinomiale
La regressione polinomiale non è sempre lo strumento giusto: alcune di queste alternative potrebbero fare più al caso tuo, senza giochi di parole.
Spline
Le spline risolvono il problema dell’instabilità globale.
Quando adatti un polinomio di grado 10, ogni coefficiente è influenzato da ogni punto dati. Un cambiamento in una regione dei dati influenza la curva ovunque. Le spline evitano questo suddividendo i dati in segmenti e adattando un polinomio a basso grado per ciascuno. I segmenti sono uniti in punti chiamati nodi, con vincoli che mantengono la curva complessiva liscia nelle giunzioni.
Il risultato è una curva flessibile dove serve e stabile altrove.
In Python, scipy e scikit-learn offrono implementazioni robuste delle spline:
from scipy.interpolate import UnivariateSpline
spline = UnivariateSpline(x, y, k=3)
y_pred = spline(x_new)

Spline vs polinomio di grado elevato
Ribadendo: scegli le spline quando i tuoi dati mostrano comportamenti diversi in regioni diverse, o quando una singola curva polinomiale non riesce a catturare la forma senza ricorrere a gradi elevati.
Support Vector Regression
La Support Vector Regression (SVR) adotta un approccio diverso.
Non adatta una curva che minimizza l’errore quadratico su tutti i punti, ma cerca una funzione che rimanga entro un margine di errore definito per il maggior numero possibile di punti, ignorando quelli che ricadono all’interno del margine. Questo la rende meno sensibile agli outlier rispetto alla regressione polinomiale.
Il collegamento con la regressione polinomiale arriva tramite il trucco del kernel. Una SVR con kernel polinomiale può adattare relazioni non lineari simili alla regressione polinomiale - ma con una migliore generalizzazione e più controllo sull’adattamento tramite parametri di regolarizzazione.
from sklearn.svm import SVR
model = SVR(kernel="poly", degree=3, C=1.0, epsilon=0.1)
model.fit(x_train, y_train)

SVR vs polinomio di grado elevato
La SVR è una buona scelta quando i tuoi dati contengono outlier che non puoi rimuovere, quando ti serve più controllo sul trade-off bias-varianza o quando la regressione polinomiale continua a fare overfitting nonostante la cross-validation.
Conclusione
In questo articolo, ti ho mostrato come estende la regressione lineare per adattare curve, come la stima ai minimi quadrati trovi i coefficienti migliori e perché interpretare singolarmente quei coefficienti non dica molto.
Il grado che scegli conta più di ogni altra cosa. Troppo basso porta a underfitting, troppo alto a overfitting. La cross-validation ti dà un modo oggettivo per trovare il punto di equilibrio. E se la regressione polinomiale non è la scelta giusta, spline e SVR sono valide alternative da conoscere.
Il modo migliore per sviluppare intuizione su tutto questo è usarla sui tuoi dati. Scegli un dataset in cui sospetti una relazione non lineare, adatta prima un modello lineare, traccia i residui e guarda cosa fa di diverso la regressione polinomiale. Leggi la nostra guida a Modelli non lineari e insight con R per vedere questa pipeline in pratica.
Domande frequenti sulla regressione polinomiale
Che cos'è la regressione polinomiale e quando dovrei usarla?
La regressione polinomiale è un’estensione della regressione lineare che adatta una linea curva ai tuoi dati invece di una retta. La usi quando la relazione tra variabili di input e output non è lineare - ad esempio, quando un grafico dei residui da un modello lineare mostra un pattern. È un buon primo passo prima di passare a modelli più complessi come alberi decisionali o reti neurali.
In cosa la regressione polinomiale è diversa dalla regressione lineare?
La regressione lineare adatta una linea retta modellando la relazione come y = b0 + b1x. La regressione polinomiale aggiunge termini di grado superiore come x² e x³, dando al modello sufficiente flessibilità per seguire le curve nei dati. Entrambe usano la stessa stima ai minimi quadrati: la regressione polinomiale tratta semplicemente quei termini extra come feature aggiuntive.
Quali sono i rischi maggiori dell'uso della regressione polinomiale?
I due rischi principali sono l’overfitting e la sensibilità agli outlier. Un polinomio di grado elevato può memorizzare il rumore nei dati di training e performare male su nuovi dati. Gli outlier sono pericolosi perché i minimi quadrati elevano al quadrato ogni residuo: un singolo punto errato può trascinare la curva lontano dal resto dei dati.
Come scelgo il grado giusto per il mio modello di regressione polinomiale?
Inizia con un grado 2 o 3: la maggior parte delle relazioni curve reali non richiede di più. Da lì, usa la k-fold cross-validation per confrontare l’errore medio di test sui gradi candidati e scegli quello in cui l’errore di test smette di migliorare. Quando due gradi danno risultati simili, scegli sempre quello più basso.
Quando dovrei usare spline o SVR invece della regressione polinomiale?
Scegli le spline quando i tuoi dati si comportano in modo diverso in regioni diverse, o quando un singolo polinomio continua a produrre curve instabili ai bordi dell’intervallo dei dati. E scegli la SVR con kernel polinomiale quando gli outlier sono inevitabili e ti serve un modello che non si pieghi fuori forma per accontentarli. Entrambe le alternative ti danno più controllo sull’adattamento al costo di un po’ di interpretabilità.


