Correlation Field Guide
Un coefficiente è un riassunto, e ogni riassunto butta via qualcosa. Quale misura di correlazione vede quale tipo di dipendenza, e cosa fare davvero quando due feature portano la stessa informazione.
Ogni numero di questa pagina è calcolato dal tuo browser a partire da un generatore con seme: niente è precalcolato e niente viene inviato da nessuna parte.
Indice
Parte prima
Misurare la dipendenza
Ognuno dei coefficienti qui sotto risponde a una domanda leggermente diversa. Pearson chiede quanto bene ci sta una retta. Spearman chiede se l'ordinamento è d'accordo. La correlazione di distanza chiede se le due variabili siano indipendenti o no. Dagli gli stessi dati e non saranno d'accordo — e quel disaccordo è già di per sé la diagnosi.
Cinque misure, un campione solo
Scegli una forma. Tutti e cinque i coefficienti vengono ricalcolati sugli stessi 200 punti, così li si guarda mentre si separano. Passa ai ranghi per vedere il grafico esattamente come lo vedono Spearman e Kendall: i valori sono sostituiti dalla loro posizione nell'ordinamento.
n = 200, estratto da un
generatore con seme, così ogni lettura è riproducibile. L'informazione mutua usa 7
bin a frequenza uguale per asse, normalizzati per
√H(X)H(Y).
Le due misure senza segno sono distorte verso l'alto a n finito:
su dati genuinamente indipendenti, a questa numerosità, la correlazione di distanza
vale in media 0,12 e l'informazione mutua normalizzata 0,05. Le soglie citate sotto i
numeri sono il 95° percentile sotto indipendenza, misurato per simulazione — una
lettura sotto la soglia vuol dire non c'è niente, non dipendenza
debole.
Scegliere in base al tipo delle due variabili
Quasi tutta la scelta è già decisa prima ancora di guardare i dati: le scale di misura delle due variabili escludono da sole quasi tutte le alternative.
| Variabile A | Variabile B | Scelta di default | Cambia misura quando |
|---|---|---|---|
| Continua | Continua | Pearson r | Code pesanti, valori anomali, o una relazione curva ma monotona → Spearman |
| Ordinale | Ordinale | Kendall τb | Pochi pari merito e n ben sopra ~50 → Spearman si legge più facilmente |
| Continua | Binaria | Punto-biseriale rpb | La divisione binaria è molto sbilanciata → riporta le medie dei gruppi e una misura di effetto |
| Binaria | Binaria | Phi φ | Vuoi un rapporto interpretabile → odds ratio o lift |
| Nominale (k livelli) | Nominale (m livelli) | V di Cramér | Molti livelli rari — la V è distorta verso l'alto → usa la variante corretta |
| Continua | Nominale (k livelli) | Rapporto di correlazione η² | Gruppi fortemente non normali → ε² da un test di Kruskal–Wallis |
| Qualunque | Qualunque | Correlazione di distanza | Vuoi vedere dove sta la dipendenza → la tabella congiunta a bin che sta dietro all'informazione mutua |
| Due variabili, con una terza da tenere ferma | Correlazione parziale rxy·z | Vuoi togliere l'effetto di z da un lato solo → semi-parziale | |
I coefficienti
Intervallo, assunzioni, e il modo di rompersi che dà davvero fastidio nella pratica.
Correlazione di Spearman
per ranghiTau-b di Kendall
concordanzascipy.stats.kendalltau.Punto-biseriale
continua ↔ binariaV di Cramér
nominale ↔ nominaleRapporto di correlazione
continua ↔ nominaleCorrelazione di distanza
Székely–RizzoInformazione mutua
guadagno di informazioneCorrelazione parziale
tenendo fermo zCoefficiente phi
binaria ↔ binariaQuattro cose che un coefficiente non ti dice
La forma
Il quartetto di Anscombe e il Datasaurus sono le dimostrazioni classiche: nuvole di punti completamente diverse che condividono le stesse medie, le stesse varianze e la stessa r alla seconda cifra. Fai il grafico della coppia prima di agire sul numero.
La direzione della causa
Un coefficiente è simmetrico — rxy = ryx — e quindi non può contenere informazione sulla direzione nemmeno in linea di principio. Tutto ciò che è causale viene dal disegno dello studio, non dalla statistica.
Se il campione è una popolazione sola
Paradosso di Simpson: una relazione negativa dentro ogni sottogruppo può risultare positiva sul totale. Prova la forma due gruppi nel laboratorio. Chiediti sempre che cosa sono le righe.
Quanto crederci
Con n = 20, l'intervallo al 95% attorno a una r di 0,5 va all'incirca da 0,07 a 0,77. Fai il bootstrap del coefficiente prima di costruire una decisione sulla terza cifra decimale.
Parte seconda
Gestire feature correlate
La collinearità non è un difetto di qualità dei dati da ripulire. È un'affermazione su che cosa i tuoi dati riescono e non riescono a identificare. Prima di correre ai ripari, sii preciso su quale delle due cose rompe davvero — perché una la rompe sempre e l'altra la lascia sempre stare.
Che cosa rompe e che cosa no
Rompe: i singoli coefficienti
Quando due feature si muovono insieme, tante combinazioni diverse dei loro pesi si adattano ai dati quasi altrettanto bene. Gli errori standard si gonfiano, i segni cambiano da una ristima all'altra, e "la feature x vale 0,4" smette di essere una frase difendibile.
Lascia stare: le previsioni
La superficie stimata è stabile anche quando i coefficienti non lo sono, quindi
l'errore fuori campione si muove appena. Se al modello si chiede solo
y_hat, la collinearità può non costarti
niente.
Rompe: attribuzione e importanza
Gli ensemble di alberi si dividono a caso fra feature correlate, spartendo il merito e facendole sembrare tutte deboli. L'importanza per permutazione le sottostima tutte, perché l'informazione sopravvive nella gemella.
Lascia stare: le combinazioni identificabili
Anche a r = 0,99 la somma dei due coefficienti è stimata con precisione; instabile è solo la ripartizione fra i due. E spesso la somma è proprio la quantità che ti serviva.
Che cosa fa la collinearità a un coefficiente
Un caso da manuale, simulato dal vivo:
y = x₁ + x₂ + ε, quindi i due coefficienti veri
valgono esattamente 1. Ogni punto è una ristima dello stesso modello su un campione
nuovo di 60 righe. Alza la correlazione fra x₁ e x₂ e guarda la nuvola
stirarsi lungo la retta dove la somma resta 2: i dati fissano il totale e non
dicono quasi niente sulla ripartizione.
Linea tratteggiata: tutte le coppie di coefficienti che sommano a 2. Al crescere della correlazione la nuvola ci collassa sopra.
n = 60,
σ = 1. L'errore fuori campione è misurato su
200 righe nuove per ogni stima. La penalizzazione ridge aggiunge
λ · n alla diagonale di X′X sui
predittori centrati, che per costruzione hanno varianza unitaria: quindi
λ = 0 sono i minimi quadrati ordinari e λ è
sulla scala per osservazione.
Accorgersene — la r a coppie non basta
Una dozzina di feature può essere debolmente correlata a due a due e insieme risultare quasi perfettamente dipendente in senso lineare. La correlazione a coppie non lo vede; le diagnostiche qui sotto sì.
| Diagnostica | Definizione | Soglia indicativa | Coglie |
|---|---|---|---|
| |r| a coppie | Matrice di correlazione delle feature | > 0,8 vale un'occhiata | Solo la ridondanza a due. Costa poco, ed è il primo passaggio giusto. |
| VIF | VIFj = 11 − Rj² — si regredisce la feature j su tutte le altre | > 5 sospetto, > 10 grave | La dipendenza fra più variabili insieme. √VIF è il fattore di cui si gonfia l'errore standard. |
| Indice di condizione | κ = √λmax / λmin di X′X su colonne standardizzate | 10–30 moderato, > 30 grave | Il condizionamento complessivo in un numero solo. Standardizza prima, altrimenti misura le tue unità; sulla matrice di correlazione è già fatto. |
| Spettro degli autovalori | Autovalori della matrice di correlazione | Uno qualunque vicino a zero | Gli autovalori quasi nulli, i cui autovettori nominano direttamente la combinazione colpevole. |
| Varianza fra ristime | Dispersione dei coefficienti su ricampionamenti bootstrap o su fold di convalida | Cambi di segno | Il problema nella forma in cui ti arriverà davvero. Vale per qualunque modello, senza assunzioni. |
Potare una matrice di correlazione
Undici feature di un dataset immobiliare, generate da tre fattori latenti — dimensione, posizione ed età — più il rumore di ciascuna, ed è per questo che la struttura a blocchi è vera e non decorativa. Due coppie sono duplicati esatti per costruzione: una conversione di unità, e una variabile registrata sia come anno sia come età. Muovi la soglia per vedere la potatura greedy al lavoro.
Gruppi di ridondanza a questa soglia
Risultato
caret::findCorrelation): si prende la coppia
più correlata fra quelle rimaste e si scarta quella delle due che ha la correlazione
media più alta con tutto il resto ancora in gioco. Ogni numero della matrice
è stampato, quindi il colore è un aiuto alla lettura e non l'unica codifica. Il
cursore scende fino a 0,50 così puoi vedere la regola potare troppo; nella pratica
sotto ~0,85 si sta buttando via informazione vera.
Otto trattamenti
In ordine dal meno al più invasivo. Il primo non è una battuta: è la risposta giusta più spesso di tutti gli altri messi insieme.
Non fare niente
Costo: nessuno
Lasciarla stare
Se il modello esiste per fare previsioni e nessuno leggerà i suoi coefficienti, le feature correlate non sono un problema da risolvere. L'errore fuori campione è praticamente immutato: il secondo laboratorio mostra l'RMSE di test che resta piatto mentre la dispersione dei coefficienti cresce di un ordine di grandezza.
Togliere feature butta via sempre un po' di informazione. Farlo per soddisfare un'assunzione da cui il tuo caso d'uso non dipendeva è una perdita e basta.
Selezionare
Costo: perdita di informazione
Scartare una di ogni coppia ridondante
La regola greedy a soglia del laboratorio qui sopra. Semplice, riproducibile, e lascia le feature sopravvissute interpretabili esattamente come prima.
Scegli la sopravvissuta su criteri che la matrice di correlazione non conosce: quale costa meno da raccogliere, quale è misurata in modo più affidabile, quale è disponibile al momento della previsione, quale un esperto di dominio sa spiegare. Prendere quella più correlata con il target è la regola ovvia ed è la più debole: sovradatta il campione di addestramento e ignora le interazioni.
Raggruppare
Costo: una scelta da tarare
Raggruppare le feature e tenerne una per gruppo
Si fa clustering gerarchico sulla distanza
1 − |r| (con Spearman se le feature sono
asimmetriche), si taglia il dendrogramma a un'altezza scelta e si prende un
rappresentante — o la media del gruppo — per ciascun cluster.
Questo scala dove la potatura a coppie non scala, e produce un oggetto stabile
e rivedibile: un elenco di gruppi di ridondanza con un nome, da mettere in mano
a un esperto di dominio.
FeatureAgglomeration in scikit-learn e
VarClusHi in Python lo implementano
direttamente.
Costruire
Costo: lavoro di dominio
Combinarle nella quantità che intendevi
Altezza e peso sono collineari; l'indice di massa corporea no. Spesa totale e numero di transazioni sono collineari; lo scontrino medio no. Prezzo e superficie sono collineari; il prezzo al metro quadro no.
È la stessa intuizione del secondo laboratorio, presa dall'altro capo: la quantità identificabile era da sempre la somma, quindi stima la somma. Un rapporto, una differenza o un indice rendono esplicita la direzione stabile e buttano via quella instabile, di proposito.
Regolarizzare
Costo: distorsione, un iperparametro
Ridge, lasso, elastic net
Ridge è il trattamento diretto: la penalizzazione L2 rende di nuovo invertibile la matrice del disegno e restringe le feature correlate insieme, spartendo fra loro l'effetto comune invece di lasciare che la stima scelga a caso una ripartizione. Restano nel modello tutte e due. Muovi il cursore della ridge nel secondo laboratorio e guarda la nuvola contrarsi.
Lasso fa l'opposto: di un gruppo correlato ne tiene grosso modo una e azzera le altre — ma quale cambia da un ricampionamento all'altro. È uno strumento per la sparsità, non per la collinearità, e le sue selezioni non vanno mai lette come importanze. Elastic net è il compromesso: la parte L2 restituisce l'effetto di raggruppamento, così le feature correlate entrano ed escono insieme.
Proiettare
Costo: interpretabilità
PCA, PLS e compagnia
La PCA sostituisce le feature con componenti ortogonali, quindi la collinearità sparisce per costruzione. Il prezzo è totale: il modello non ha più feature con un nome, e ogni spiegazione a valle va data in termini di loading.
La PCA è anche non supervisionata: ordina le direzioni per varianza in X, senza guardare y, quindi una direzione a bassa varianza che però prevede il target può essere buttata via. I minimi quadrati parziali risolvono esattamente questo estraendo componenti che covariano con y, e di solito ne servono meno.
Residualizzare
Costo: un ordine arbitrario
Regredire una sull'altra
Si tiene x₁ com'è e si sostituisce x₂ con il suo residuo dopo averla regredita su x₁. Adesso le due sono esattamente incorrelate e restano tutte e due nel modello.
L'inganno sta nel significato: la seconda feature adesso è "la parte di x₂ che x₁ non spiega", e tutto l'effetto comune è stato assegnato a x₁ dalla tua scelta dell'ordine. È una mossa difendibile quando c'è una gerarchia vera — una linea di base e una correzione, un controllo e un trattamento — e un gioco di prestigio in tutti gli altri casi.
Attribuire
Costo: calcolo
Aggiustare la misura di importanza invece delle feature
Se la collinearità sta danneggiando solo le tue spiegazioni, cura la spiegazione. Permutare una di due feature correlate lascia l'informazione intatta nella gemella, e allora sembrano irrilevanti tutte e due — e la permutazione crea anche righe che non potrebbero esistere, spingendo il modello fuori dalla distribuzione su cui è stato addestrato.
Permuta tutto il gruppo correlato in una volta sola e riporta un numero per il gruppo; oppure usa la permutazione condizionale, che ricampiona dentro strati delle feature correlate. Il risultato onesto è "queste tre feature insieme portano il 12% del segnale", non tre numeretti separati.
Scegliere il trattamento in base a cosa devi al lettore
| Il tuo obiettivo | Prima mossa | Ripiego | Da evitare |
|---|---|---|---|
| Accuratezza predittiva, scatola nera | Niente | Ridge o un ensemble di alberi | PCA troncata: perderesti segnale senza guadagnare niente |
| Coefficienti interpretabili | Combinare in una quantità sensata | Ridge, poi riportare l'effetto di gruppo | Lasso: la sua selezione dentro un gruppo correlato non è stabile |
| Inferenza causale o di policy | Sistemare il disegno — più variabilità, o una strategia di identificazione diversa | Riportare ciò che è identificato: la somma, il contrasto | Qualunque potatura automatica. Togliere un confondente per abbassare il VIF crea distorsione |
| Importanza delle feature per chi ti ascolta | Importanza per permutazione a gruppi | Prima il clustering, poi il resoconto per cluster | Le importanze grezze basate sul gain di un albero potenziato |
| Ridurre i costi — meno colonne da raccogliere | Clustering, tenendo la più economica per cluster | Potatura greedy a soglia | Ridge: tiene tutto, che è l'opposto dell'obiettivo |
| Dati larghi, p maggiore di n | PLS o elastic net | PCA con il numero di componenti scelto per convalida incrociata | VIF: non è definito quando la matrice del disegno è singolare |
Trappole
La trappola delle variabili dummy
Un insieme completo di colonne one-hot somma a una costante, quindi con l'intercetta la matrice del disegno è esattamente singolare. Togli un livello, oppure stima senza intercetta. Questa è collinearità perfetta, non quasi-perfetta, e nessuna regola a soglia sulle coppie la farà emergere — il VIF e lo spettro degli autovalori sì.
Potare su tutto il dataset
Selezionare le feature per correlazione prima di dividere i dati fa entrare l'insieme di test nella scelta. La selezione delle feature fa parte della pipeline e va dentro il ciclo di convalida incrociata.
Correlazione non è ridondanza
Due feature a r = 0,9 possono servire lo stesso tutte e due, se un modello non lineare usa la loro differenza. La ridondanza si conferma togliendo la feature e misurando come cambia l'errore di convalida, non leggendo la matrice.
Una correlazione altissima con il target
Una r di 0,98 contro l'etichetta di solito non è una gran feature: è una fuga di informazione. Prima di festeggiare, controlla se quel valore fosse davvero disponibile al momento della previsione.
Note
Leggi i numeri come illustrazioni del meccanismo, non come misure di qualcosa di reale: ogni campione di questa pagina viene estratto da un generatore con seme nel momento in cui la apri.
Implementazioni che vale la pena conoscere:
scipy.stats per Pearson, Spearman e Kendall;
dcor per la correlazione di distanza;
sklearn.feature_selection.mutual_info_regression
per lo stimatore dell'informazione mutua sui k vicini più prossimi;
statsmodels.stats.outliers_influence.variance_inflation_factor
per il VIF; sklearn.inspection.permutation_importance
per la correzione dell'attribuzione.