statistics

L’analisi di regressione multipla, spiegata semplice.

La lunghezza del testo aiuta il ranking? I backlink portano traffico? Le pagine più veloci convertono di più?
Prese una alla volta, queste domande hanno quasi sempre la stessa risposta pigra: «sì, un po’». Il guaio è che nella realtà i fattori non arrivano mai uno alla volta. Le pagine lunghe tendono anche ad attirare più link; quelle con più link sono spesso le più curate, e magari anche le più lente. Tutto si muove insieme, e la domanda che conta davvero è un’altra: quale di questi fattori pesa sul traffico al netto degli altri?

Abbiamo visto, parlando di correlazione, che si può misurare quanto due variabili si muovono insieme; e con la regressione lineare semplice che si può usarne una per prevedere l’altra.
Ma una correlazione alla volta è cieca di fronte all’intreccio: rischia di darci la stessa medaglia a un fattore e al suo compare, senza saperli distinguere. È l’anticamera di una trappola che conosciamo già, il paradosso di Simpson: un’associazione che cambia segno o svanisce non appena teniamo conto di una terza variabile. La regressione multipla è lo strumento che affronta di petto proprio questo — molte cause insieme, ciascuna misurata tenendo ferme le altre.

In sintesi: la regressione multipla è una tecnica che misura quanto ciascun fattore contribuisce a un risultato tenendo fermi tutti gli altri — risponde alla domanda “a parità di backlink, la lunghezza conta ancora?”. L’equazione combina più cause in un solo effetto: \(Y = b_0 + b_1 X_1 + b_2 X_2 + \dots + b_k X_k\), e i coefficienti \(b_i\) dicono quanto pesa ogni fattore al netto degli altri. È lo strumento che smaschera l’intreccio tra variabili che una correlazione alla volta non sa distinguere.

Di cosa parleremo:


Perché una correlazione alla volta non basta

Immaginiamo di misurare, sul nostro sito, la correlazione fra la lunghezza dei contenuti e il traffico che ricevono. Quasi certamente la troveremo positiva: le pagine più lunghe ricevono più traffico.
La tentazione, a quel punto, è la scorciatoia di ogni consulente di fretta: «scrivo più lungo e il traffico sale». Ma quella correlazione, da sola, non ci dice perché le pagine lunghe vanno meglio. Vanno meglio perché sono lunghe, o perché — essendo lunghe e ben fatte — hanno raccolto negli anni più backlink, e sono i link a portare il traffico?

Sono due storie completamente diverse, con due piani d’azione opposti, e la correlazione fra traffico e lunghezza le confonde in un unico numero. Per separarle dobbiamo poter chiedere: a parità di backlink, la lunghezza conta ancora?
È esattamente la domanda a cui la regressione multipla sa rispondere. La regressione multipla non misura se un fattore è associato al risultato, ma quanto vi contribuisce una volta che tutti gli altri sono tenuti fermi: è la differenza tra guardare il mondo una variabile alla volta e guardarlo per intero.


Qual è l’equazione della regressione multipla?

La forma dell’equazione è la naturale espansione di quella della regressione semplice: al posto di una sola variabile predittiva ne mettiamo diverse, ciascuna con il suo coefficiente. Vogliamo spiegare una variabile responso (unica) a partire da un insieme di variabili predittive:

\( y = b + a_1 x_1 + a_2 x_2 + \dots + a_k x_k \\ \)

dove \( y \) è la variabile che vogliamo spiegare (il traffico), \( x_1, x_2, \dots, x_k \) sono le variabili predittive (lunghezza, backlink, velocità), \( a_1, a_2, \dots, a_k \) sono i coefficienti di regressione e \( b \) è l’intercetta.
Il cuore di tutto è il significato di ciascun \( a_i \): è di quanto cambia \( y \) quando \( x_i \) aumenta di un’unità e tutte le altre variabili restano costanti. Quel «restano costanti» è la magia — e la responsabilità — del metodo: è lì che avviene la separazione degli effetti che a occhio nudo restano ingarbugliati.

In altri termini: la regressione multipla stima simultaneamente il contributo di ogni fattore, depurato da quello di tutti gli altri presenti nel modello. Il modo migliore per capirlo è vederlo smontare un caso costruito apposta per ingannarci.


Un esempio: cosa spinge il traffico di una pagina

Costruisco in R una tabella d’esempio con sessanta pagine di un sito. Per ciascuna ho il traffico mensile, il numero di parole, i backlink ricevuti e il tempo di caricamento in secondi. Nella realtà questi dati si esportano da Search Console, da un crawler e da un tool per i link; qui, trattandosi di un esempio, li simulo — ma con un meccanismo preciso in testa, che sarà il nostro banco di prova:

set.seed(42)
n <- 60
parole   <- round(rnorm(n, 1200, 380)); parole[parole < 350] <- 350
velocita <- round(pmax(0.6, rnorm(n, 2.6, 0.8)), 2)
# i contenuti piu' lunghi attirano piu' backlink: ecco l'intreccio
backlink <- round(pmax(0, 0.018 * parole + rnorm(n, 0, 6)))
# il traffico e' guidato DA backlink e velocita', NON dalle parole
traffico <- round(38 * backlink - 260 * velocita + 900 + rnorm(n, 0, 220))
traffico[traffico < 0] <- 0

pagine <- data.frame(traffico, parole, backlink, velocita)

Ho costruito i dati in modo che il traffico dipenda davvero solo dai backlink e dalla velocità, mentre la lunghezza non ha alcun effetto diretto. Ma ho anche legato la lunghezza ai backlink — le pagine lunghe ne attirano di più — così come accade nella realtà. Quanto sono legati?

cor(pagine$parole, pagine$backlink)
# [1] 0.81

Un legame forte: 0,81. Vediamo ora cosa succede se, ingenuamente, studiamo il traffico guardando solo la lunghezza, con una regressione semplice:

coef(summary(lm(traffico ~ parole, data = pagine)))
#              Estimate Std. Error t value  Pr(>|t|)
# (Intercept) 241.1577   137.9404   1.748 0.0857...
# parole        0.6128     0.1088   5.635 0.0000...

Il verdetto sembra schiacciante: ogni cento parole in più valgono una sessantina di sessioni in più, con un p-value minuscolo (sotto lo 0,001). La lunghezza «conta», e conta parecchio.
Se ci fermassimo qui, andremmo a scrivere una direttiva editoriale — facciamo tutti i contenuti più lunghi — su una base che sta per rivelarsi un miraggio. Aggiungiamo al modello gli altri due fattori e guardiamo cosa resta della lunghezza:

modello <- lm(traffico ~ parole + backlink + velocita, data = pagine)
coef(summary(modello))
#              Estimate Std. Error t value Pr(>|t|)
# (Intercept) 1100.797   120.119    9.164  0.0000
# parole         0.107     0.102    1.041  0.3025
# backlink      29.444     4.804    6.129  0.0000
# velocita    -322.943    34.515   -9.357  0.0000

Ecco il ribaltamento. Il coefficiente della lunghezza è crollato da 0,613 a 0,107, e il suo p-value è schizzato a 0,30: non più distinguibile dallo zero.
La lunghezza, a parità di backlink e velocità, non porta praticamente nulla. Quel che nella regressione semplice sembrava il suo merito era in realtà un riflesso dei backlink: le pagine lunghe ricevono più traffico non perché lunghe, ma perché — essendo lunghe — attirano più link, e sono i link a fare il lavoro.

Il traffico contro il numero di parole, con i punti colorati per livello di backlink. La retta rossa è la regressione semplice: pendenza +0,61, la lunghezza «sembra» spingere il traffico. La retta verde tratteggiata è l’effetto della lunghezza a parità di backlink e velocità: quasi piatta. I punti con molti backlink (blu scuro) si affollano in alto a destra — sono loro a creare la pendenza apparente.

È questo il senso profondo della regressione multipla: distingue il fattore che agisce da quello che si limita ad accompagnarlo. Un compito che nessuna correlazione presa singolarmente potrà mai svolgere.


Leggere i coefficienti: chi pesa davvero

Dal modello completo ricaviamo tre coefficienti, ma confrontarli così come sono sarebbe un errore: hanno unità di misura diverse. Il coefficiente delle parole (0,107) è per parola, quello dei backlink (29,4) è per link, quello della velocità (−323) è per secondo. Dire che la velocità «conta di più» perché il suo numero è più grande non ha senso: un secondo e una parola non sono la stessa cosa.

Per confrontarli bisogna metterli sulla stessa scala. Il modo standard è standardizzare tutte le variabili — esprimerle in deviazioni standard — e rifare la regressione: i coefficienti che ne escono, detti coefficienti standardizzati (o beta), dicono di quante deviazioni standard cambia il traffico per una deviazione standard in più di ciascun fattore. Ora sono confrontabili. Li calcolo in R standardizzando i dati con scale:

z <- as.data.frame(scale(pagine))
round(coef(lm(traffico ~ parole + backlink + velocita, data = z))[-1], 3)
#   parole backlink velocita
#    0.104    0.610   -0.552

Il quadro diventa leggibile a colpo d’occhio: i backlink sono il motore (+0,61), la velocità una potente zavorra (−0,55: più una pagina è lenta, meno traffico raccoglie), e le parole un’inezia (+0,10) che, come già sappiamo, non è nemmeno distinguibile dal caso.
Un coefficiente da solo, però, non basta a fidarsi: attorno a ogni stima c’è un margine d’incertezza. Se l’intervallo di confidenza di un coefficiente include lo zero, quel fattore potrebbe benissimo non avere alcun effetto — è precisamente la situazione della lunghezza.

Coefficient plot: ogni fattore con il suo coefficiente standardizzato e l’intervallo di confidenza al 95%. Backlink (+0,61) e velocità (−0,55) stanno nettamente da un lato della linea dello zero; le parole (+0,10) la attraversano — effetto non distinguibile dal caso. La lunghezza dell’intervallo racconta anche la precisione della stima.

Un avvertimento: nel nostro esempio parole e backlink erano correlati all’81%, e questo non è un dettaglio innocuo. Quando due predittori si somigliano troppo, il modello fa fatica a separare i loro effetti, e i coefficienti diventano instabili e imprecisi — è la multicollinearità, una delle insidie che affronteremo parlando di diagnostica del modello. Qui ha giocato a nostro favore, aiutando a smascherare il finto effetto della lunghezza; ma in generale un coefficiente non significativo non prova che un fattore sia irrilevante: può solo dirci che, dati questi predittori così intrecciati, non riusciamo a isolarne il contributo.


Quanto è valido il modello?

Sapere quali fattori contano è metà del lavoro; l’altra metà è chiedersi quanto bene, nel complesso, il modello ricostruisce la realtà. La misura di riferimento è il coefficiente di determinazione \( R^2 \): la quota di variabilità del traffico che il modello riesce a spiegare, da 0 (nulla) a 1 (tutto). Lo leggo dal riepilogo:

summary(modello)$r.squared      # 0.805
summary(modello)$adj.r.squared  # 0.795

Un \( R^2 \) di 0,805 dice che i nostri tre fattori spiegano insieme l’80,5% della variabilità del traffico fra le pagine — il resto è rumore, o fattori che non abbiamo incluso.
Accanto compare l’\( R^2 \) aggiustato (0,795), un valore leggermente più basso: penalizza l’aggiunta di variabili inutili, e va guardato al posto dell’\( R^2 \) grezzo quando si confrontano modelli con un numero diverso di predittori. Serve a non farsi ingannare: aggiungere variabili fa sempre salire l’\( R^2 \) grezzo, anche quando quelle variabili non aggiungono nulla di reale.

Il modo più onesto per giudicare un modello, però, è guardarlo all’opera: mettere il traffico che predice contro quello osservato, pagina per pagina. Più i punti si stringono attorno alla bisettrice, meglio il modello coglie la realtà.

Traffico osservato contro traffico predetto dal modello a tre variabili. I punti si stringono attorno alla bisettrice (la predizione perfetta); i segmenti grigi verticali sono gli scarti fra osservato e predetto. Il modello spiega l’80,5% della variabilità.

Un \( R^2 \) alto, va detto, non è una promozione automatica: dietro c’è una lista di requisiti che il modello dà per scontati — che le relazioni siano lineari, che i residui si comportino bene, che i predittori non siano ridondanti (la multicollinearità di poco fa). Quando queste assunzioni saltano, i coefficienti restano numeri, ma smettono di essere affidabili. È il territorio della diagnostica, e merita un discorso a parte.


Domande frequenti

Che cos’è la regressione multipla?

È una tecnica statistica che stima quanto ciascun fattore contribuisce a un risultato tenendo fermi tutti gli altri. Non misura se un fattore è associato all’esito, ma quanto vi contribuisce al netto delle altre variabili: risponde a domande del tipo “a parità di backlink, la lunghezza del testo conta ancora?”.

Che differenza c’è tra regressione semplice e multipla?

La regressione semplice usa un solo predittore per spiegare il risultato; la multipla ne usa molti insieme. È la differenza tra guardare il mondo una variabile alla volta e guardarlo per intero: la multipla separa l’effetto di ciascun fattore dall’intreccio con gli altri, cosa che una correlazione alla volta non può fare.

Come si leggono i coefficienti della regressione multipla?

Ogni coefficiente dice quanto cambia il risultato quando quel fattore aumenta di un’unità, con tutti gli altri tenuti fermi. Un coefficiente vicino a zero (con l’intervallo di confidenza che attraversa lo zero) indica un effetto non distinguibile dal caso; un coefficiente lontano da zero da un lato netto dice che quel fattore pesa davvero.

Cosa significa R² = 0,80?

Che i predittori inclusi nel modello spiegano insieme l’80% della variabilità del risultato. Il restante 20% è rumore o fattori non considerati. Meglio guardare l’R² aggiustato, che penalizza le variabili inutili: a differenza dell’R² grezzo, non sale solo perché abbiamo aggiunto un predittore qualsiasi.

Perché la regressione multipla smaschera correlazioni ingannevoli?

Perché le pagine lunghe tendono ad attirare più backlink e quelli portano traffico: la correlazione semplice tra lunghezza e traffico “regala” ai link il merito che è loro. Tenendo fermi i backlink, la regressione multipla fa emergere che la lunghezza, da sola, conta quasi nulla. È l’anticamera del paradosso di Simpson: un’associazione che svanisce quando si controlla una terza variabile.

Quali sono i limiti della regressione multipla?

Il modello dà per scontati alcuni requisiti: relazioni lineari, residui ben comportati, predittori non ridondanti (niente multicollinearità). Quando queste assunzioni saltano, i coefficienti restano numeri ma smettono di essere affidabili — ed è lì che serve la diagnostica del modello.

Prova tu

Il modo migliore per fissare il meccanismo è metterci le mani sopra. Riprendendo il codice qui sopra, ci sono tre direzioni interessanti da esplorare:

  1. Togli i backlink dal modello — lm(traffico ~ parole + velocita) — e osserva cosa succede al coefficiente delle parole: torna grande e «significativo». È la controprova che quel finto effetto vive solo finché il confondente resta fuori dal modello.
  2. Aggiungi una variabile del tutto inventata e casuale (pagine$rumore <- rnorm(60)) e rimettila nel modello: guarda l’\( R^2 \) grezzo salire di un pelo e l’\( R^2 \) aggiustato restare fermo o scendere. È il senso pratico dell’aggiustamento.
  3. Cambia il meccanismo generatore: fai dipendere il traffico anche dalle parole (aggiungi un + 0.3 * parole alla formula del traffico) e verifica che ora, nel modello completo, il coefficiente della lunghezza sopravvive. Serve a sentire la differenza fra un effetto vero e uno solo apparente.

Suggerimento: la struttura non cambia mai — si stima il modello, si leggono i coefficienti a parità degli altri, si controlla l’\( R^2 \) e la nuvola osservati-predetti. È giocando con le variabili dentro e fuori dal modello che si capisce quanto di ciò che chiamiamo «fattore di ranking» sia causa e quanto, semplicemente, compagnia.


Finora la nostra variabile risposta è stata un numero che scorre senza salti — il traffico, che può valere 300 sessioni come 1.520. Ma moltissime domande della SEO non hanno questa forma: una pagina converte o non converte, un utente torna o non torna, una keyword entra in prima pagina o resta fuori. La risposta è un sì o un no, e allora una retta che predice numeri continui non basta più: servirebbe un modello che predica una probabilità, costretta a stare fra 0 e 1. È il mestiere della regressione logistica, il passo naturale da cui proseguire.


Per approfondire

Se vuoi approfondire la regressione multipla, l’interpretazione dei coefficienti a parità degli altri e la lettura dell’\( R^2 \) — l’ossatura esatta di ciò che abbiamo costruito qui — Introduzione all’econometria di Stock e Watson è il riferimento che consiglio: costruisce il metodo con cura partendo sempre da problemi applicati, e dedica pagine limpide proprio al significato del «tenere ferme le altre variabili» e alle trappole dei fattori correlati.

paolo

Recent Posts

Clustering delle keyword: raggruppare migliaia di query con K-means e clustering gerarchico

Capita spesso che si esporti l'elenco delle keyword da Search Console o da un tool,…

3 mesi ago

CTR atteso vs reale: trovare le pagine che rendono meno della loro posizione

Chi passa le giornate dentro Search Console conosce bene una situazione di questo tipo: una…

3 mesi ago

Naive Bayes: classificare l’intento delle query con il teorema di Bayes

Nell'articolo sul multi-armed bandit abbiamo usato Bayes per decidere fra varianti: spostare il traffico verso…

3 mesi ago

Multi-armed bandit: ottimizzare le varianti mentre il test è ancora in corso

Nell'articolo sull'A/B test bayesiano abbiamo confrontato due varianti a campione fisso: si raccolgono i dati…

3 mesi ago

A/B test bayesiano: non solo “se” B è meglio di A, ma “di quanto”

Abbiamo avuto modo di esaminare, nell'articolo sull'A/B testing classico, come confrontare due varianti con il…

3 mesi ago

Stima bayesiana di un conversion rate: quanto possiamo fidarci dei pochi dati che abbiamo

Abbiamo avuto modo di esaminare, nell'articolo sulle fondamenta della statistica bayesiana, come l'aggiornamento bayesiano funzioni…

3 mesi ago