Hai mai notato come alcune cose tendano a muoversi in coppia?
Se le temperature salgono, aumentano le vendite di gelati. Se il prezzo del petrolio scende, di solito scende anche il costo della benzina.
Nella vita di tutti i giorni lo chiamiamo “buon senso”, ma in statistica e nel machine learning abbiamo bisogno di misurare esattamente questa danza a due (o a tre, o a cento).
È qui che entra in gioco la matrice di covarianza. Non è solo una griglia di numeri: è una mappa che ci dice esattamente come diverse variabili si influenzano a vicenda, chi si muove nella stessa direzione e chi prende strade opposte.
La matrice di covarianza è uno strumento fondamentale in statistica multivariata, che generalizza il concetto di varianza a più dimensioni.
Per un vettore casuale [math]\mathbf{X} = (X_1, X_2, \dots, X_n)^\top[/math], la matrice di covarianza è definita come:
[math]\displaystyle \boldsymbol{\Sigma} = \operatorname{Cov}(\mathbf{X}) = \mathbb{E}\left[(\mathbf{X} – \boldsymbol{\mu})(\mathbf{X} – \boldsymbol{\mu})^\top\right][/math]
dove [math]\boldsymbol{\mu} = \mathbb{E}[\mathbf{X}][/math] è il vettore delle medie.
Proprietà fondamentali:
- Simmetria: [math]\boldsymbol{\Sigma}^\top = \boldsymbol{\Sigma}[/math]
- Semidefinita positiva: per qualsiasi vettore [math]\mathbf{a}[/math], [math]\mathbf{a}^\top \boldsymbol{\Sigma} \mathbf{a} \ge 0[/math]
- Elementi: [math]\Sigma_{ij} = \operatorname{Cov}(X_i, X_j)[/math]
- Diagonalizzazione: gli autovettori rappresentano le direzioni principali di variabilità
In questo articolo , attraverso esercizi pratici, dall’agricoltura all’ottimizzazione di portafogli finanziari , vedremo come si costruisce, come si legge e, soprattutto, come si usa una matrice di covarianza.
Esercizio 1: Calcolo Base (Livello Facile)
Testo:
Un’azienda agricola misura per 5 campioni di terreno il contenuto di azoto (N) e fosforo (P) (in mg/kg).
I dati sono:
| Campione | N | P |
|---|---|---|
| 1 | 12 | 8 |
| 2 | 15 | 11 |
| 3 | 10 | 7 |
| 4 | 13 | 9 |
| 5 | 15 | 10 |
Calcolare la matrice di covarianza campionaria.
✅ Soluzione
Passo 1: Calcolo delle medie
[math]\displaystyle \bar{N} = \frac{12 + 15 + 10 + 13 + 15}{5} = \frac{65}{5} = 13[/math]
[math]\displaystyle \bar{P} = \frac{8 + 11 + 7 + 9 + 10}{5} = \frac{45}{5} = 9[/math]
Passo 2: Calcolo degli scarti dalla media
| Campione | [math]N – \bar{N}[/math] | [math]P – \bar{P}[/math] |
|---|---|---|
| 1 | -1 | -1 |
| 2 | +2 | +2 |
| 3 | -3 | -2 |
| 4 | 0 | 0 |
| 5 | +2 | +1 |
Passo 3: Calcolo delle somme dei prodotti
[math]\displaystyle S_{NN} = \sum_{i=1}^{5} (N_i – \bar{N})^2 = (-1)^2 + 2^2 + (-3)^2 + 0^2 + 2^2 = 1 + 4 + 9 + 0 + 4 = 18[/math]
[math]\displaystyle S_{PP} = \sum_{i=1}^{5} (P_i – \bar{P})^2 = (-1)^2 + 2^2 + (-2)^2 + 0^2 + 1^2 = 1 + 4 + 4 + 0 + 1 = 10[/math]
[math]\displaystyle S_{NP} = \sum_{i=1}^{5} (N_i – \bar{N})(P_i – \bar{P}) = (-1)(-1) + (2)(2) + (-3)(-2) + (0)(0) + (2)(1) = 1 + 4 + 6 + 0 + 2 = 13[/math]
Passo 4: Costruzione della matrice di covarianza campionaria
Con [math]n = 5[/math] osservazioni, usiamo [math]n-1 = 4[/math] al denominatore per ottenere uno stimatore non distorto:
[math]\displaystyle \boldsymbol{\Sigma} = \frac{1}{n-1} \begin{pmatrix} S_{NN} & S_{NP} \\ S_{NP} & S_{PP} \end{pmatrix}[/math]
Sostituendo i valori:
[math]\displaystyle \boldsymbol{\Sigma} = \frac{1}{4} \begin{pmatrix} 18 & 13 \\ 13 & 10 \end{pmatrix} = \begin{pmatrix} 4.5 & 3.25 \\ 3.25 & 2.5 \end{pmatrix}[/math]
💡 Osservazione:
La matrice è simmetrica ([math]3.25[/math] appare in entrambe le posizioni fuori diagonale). Il valore di covarianza positivo ([math]3.25[/math]) indica che N e P tendono a variare nella stessa direzione: terreni con più azoto tendono ad avere anche più fosforo.
Esercizio 2: Diagnostica, Simmetria e Autovalori (Livello Medio-Facile)
Testo
Consideriamo la seguente matrice di covarianza stimata per tre variabili finanziarie relative a un portafoglio titoli: il rendimento ([math]X_1[/math]), la volatilità ([math]X_2[/math]) e la liquidità ([math]X_3[/math]).
[math]\displaystyle \boldsymbol{\Sigma} = \begin{pmatrix} 4 & 1 & -2 \\ 1 & 9 & 3 \\ -2 & 3 & 16 \end{pmatrix}[/math]
Ti viene richiesto di:
- Verificare che [math]\boldsymbol{\Sigma}[/math] sia simmetrica;
- Calcolarne gli autovalori per verificarne la validità matematica;
- Discutere il significato del segno degli autovalori nel contesto dell’analisi dati.
✅ Soluzione
1. Verifica della simmetria
Una matrice è simmetrica se coincide con la sua trasposta, ovvero se [math]\boldsymbol{\Sigma} = \boldsymbol{\Sigma}^\top[/math].
Scambiando le righe con le colonne otteniamo:
[math]\displaystyle \boldsymbol{\Sigma}^\top = \begin{pmatrix} 4 & 1 & -2 \\ 1 & 9 & 3 \\ -2 & 3 & 16 \end{pmatrix} = \boldsymbol{\Sigma}[/math]
Infatti, i valori speculari rispetto alla diagonale principale sono identici:
- [math]\Sigma_{12} = \Sigma_{21} = 1[/math]
- [math]\Sigma_{13} = \Sigma_{31} = -2[/math]
- [math]\Sigma_{23} = \Sigma_{32} = 3[/math]
La matrice rispetta la prima regola fondamentale di ogni matrice di covarianza: è simmetrica.
2. Calcolo degli autovalori
Gli autovalori si trovano risolvendo l’equazione caratteristica [math]\det(\boldsymbol{\Sigma} – \lambda \mathbf{I}) = 0[/math].
Sviluppando i calcoli (traccia [math]= 29[/math], somma dei minori principali [math]= 230[/math], determinante [math]= 476[/math]), otteniamo il seguente polinomio caratteristico:
[math]\displaystyle \lambda^3 – 29\lambda^2 + 230\lambda – 476 = 0[/math]
Le soluzioni approssimate di questa equazione sono:
- [math]\lambda_1 \approx 17.45[/math]
- [math]\lambda_2 \approx 8.44[/math]
- [math]\lambda_3 \approx 3.11[/math]
Verifica di coerenza matematica:
- La somma degli autovalori ([math]17.45 + 8.44 + 3.11 = 29[/math]) coincide perfettamente con la traccia della matrice ([math]4 + 9 + 16 = 29[/math]).
- Il prodotto degli autovalori ([math]17.45 \cdot 8.44 \cdot 3.11 \approx 476[/math]) coincide con il determinante della matrice ([math]\det(\boldsymbol{\Sigma}) = 476[/math]).
3. Significato del segno degli autovalori
Gli autovalori rappresentano la varianza dei dati lungo le direzioni principali (le componenti principali). Poiché [math]\lambda_1, \lambda_2, \lambda_3 > 0[/math], la nostra matrice è definita positiva.
Questo ci garantisce che:
- Ogni direzione nello spazio presenta una varianza positiva.
- Non esistono combinazioni lineari delle variabili con varianza nulla o negativa.
- Questa è una matrice di covarianza valida.
Cosa succederebbe se ci fosse un autovalore nullo ([math]\lambda = 0[/math])?
Significherebbe che esiste una combinazione lineare delle variabili senza alcuna variabilità. Ad esempio, una variabile potrebbe essere l’esatta somma delle altre due ([math]X_3 = X_1 + X_2[/math]). In quel caso, la matrice sarebbe “semidefinita positiva” e non invertibile, un problema noto in statistica come multicollinearità perfetta.
Cosa significherebbe un autovalore negativo?
Una varianza non può mai essere negativa ([math]\operatorname{Var} \ge 0[/math]). Se il calcolo restituisce un autovalore negativo, significa che i dati sono incoerenti, c’è un errore nei calcoli o la matrice non è stata generata da dati reali, ma è stata compilata in modo arbitrario e matematicamente impossibile.
💡Perché questo esercizio è fondamentale?
Collega la statistica all’algebra lineare in modo estremamente pratico. Quando lavori come Data Scientist, non puoi inserire numeri a caso in una matrice e aspettarti che un modello li digerisca. Questo esercizio è la “diagnostica” standard: se nei tuoi script Python o R vedi autovalori nulli o negativi, sai immediatamente che c’è un errore nei dati di origine (come variabili duplicate o linearmente dipendenti) prima ancora di addestrare il tuo algoritmo.
Esercizio 3: Covarianza tra Variabili Finanziarie (Livello Medio)
Testo:
Un analista finanziario studia la relazione tra tre indici: S&P500 ([math]X_1[/math]), Nikkei225 ([math]X_2[/math]) e FTSE100 ([math]X_3[/math]) utilizzando 12 mesi di dati mensili. La matrice di covarianza stimata è:
[math]\displaystyle \boldsymbol{\Sigma} = \begin{pmatrix} 0.0025 & 0.0012 & 0.0018 \\ 0.0012 & 0.0036 & 0.0015 \\ 0.0018 & 0.0015 & 0.0049 \end{pmatrix}[/math]
Calcolare:
- Le varianze e le deviazioni standard di ciascun indice
- La matrice di correlazione
- Interpretare i risultati in termini di rischio e diversificazione
✅ Soluzione
Passo 1: Estrazione delle varianze e deviazioni standard
Dalla diagonale principale:
- [math]\operatorname{Var}(X_1) = 0.0025 \;\Longrightarrow\; \sigma_1 = \sqrt{0.0025} = 0.05 \;(5\%)[/math]
- [math]\operatorname{Var}(X_2) = 0.0036 \;\Longrightarrow\; \sigma_2 = \sqrt{0.0036} = 0.06 \;(6\%)[/math]
- [math]\operatorname{Var}(X_3) = 0.0049 \;\Longrightarrow\; \sigma_3 = \sqrt{0.0049} = 0.07 \;(7\%)[/math]
Passo 2: Calcolo della matrice di correlazione
La formula è: [math]\rho_{ij} = \frac{\operatorname{Cov}(X_i, X_j)}{\sigma_i \cdot \sigma_j}[/math]
[math]\displaystyle \rho_{12} = \frac{0.0012}{0.05 \times 0.06} = \frac{0.0012}{0.003} = 0.4[/math]
[math]\displaystyle \rho_{13} = \frac{0.0018}{0.05 \times 0.07} = \frac{0.0018}{0.0035} \approx 0.5143[/math]
[math]\displaystyle \rho_{23} = \frac{0.0015}{0.06 \times 0.07} = \frac{0.0015}{0.0042} \approx 0.3571[/math]
Matrice di correlazione [math]\mathbf{R}[/math]:
[math]\displaystyle \mathbf{R} = \begin{pmatrix} 1 & 0.4 & 0.5143 \\ 0.4 & 1 & 0.3571 \\ 0.5143 & 0.3571 & 1 \end{pmatrix}[/math]
Passo 3: Interpretazione
- Correlazioni positive: Tutti gli indici sono correlati positivamente, indicando che tendono a muoversi nella stessa direzione (mercati globali interconnessi).
- Grado di correlazione:
- S&P500–FTSE100: [math]\rho = 0.514[/math] (correlazione moderata-forte)
- S&P500–Nikkei225: [math]\rho = 0.4[/math] (correlazione moderata)
- Nikkei225–FTSE100: [math]\rho = 0.357[/math] (correlazione moderata-debole)
- Rischio (varianza):
FTSE100 ha la varianza maggiore ([math]0.0049[/math]), seguito da Nikkei ([math]0.0036[/math]) e S&P500 ([math]0.0025[/math]). - Implicazioni per la diversificazione:
- Correlazioni positive riducono i benefici della diversificazione.
- La correlazione più bassa è tra Nikkei e FTSE ([math]0.357[/math]) → offrono il miglior potenziale di diversificazione.
- Per minimizzare il rischio, un portafoglio dovrebbe sovrappesare gli asset con correlazioni più basse.
💡 Osservazione:
La matrice di correlazione è sempre simmetrica e ha [math]1[/math] sulla diagonale. La correlazione è invariante per trasformazioni lineari delle variabili, mentre la covarianza no. Per questo motivo, nelle analisi finanziarie si usa spesso la correlazione per confrontare diversi asset.
Esercizio 4: Standardizzazione e Matrice di Correlazione (Livello Medio)
Testo
In un’analisi demografica, viene estratto un piccolo campione di 4 persone per misurare tre caratteristiche: Età ([math]X_1[/math]), Altezza in cm ([math]X_2[/math]) e Peso in kg ([math]X_3[/math]).
| Persona | Età ([math]X_1[/math]) | Altezza ([math]X_2[/math]) | Peso ([math]X_3[/math]) |
|---|---|---|---|
| 1 | 25 | 175 | 70 |
| 2 | 30 | 180 | 78 |
| 3 | 22 | 170 | 65 |
| 4 | 28 | 178 | 75 |
Ti viene richiesto di:
- Calcolare la matrice di covarianza campionaria.
- Trasformare le variabili nei loro valori standardizzati (Z-score).
- Calcolare la matrice di correlazione e verificare come gestisce le diverse scale di misura.
✅ Soluzione
Passo 1 – Medie e Scarti
Iniziamo calcolando le medie delle tre variabili:
[math]\bar{x}_1 = (25 + 30 + 22 + 28) / 4 = 26.25[/math]
[math]\bar{x}_2 = (175 + 180 + 170 + 178) / 4 = 175.75[/math]
[math]\bar{x}_3 = (70 + 78 + 65 + 75) / 4 = 72[/math]
Sottraendo la media a ciascun valore, otteniamo la matrice degli scarti:
| Persona | Scarto Età | Scarto Altezza | Scarto Peso |
|---|---|---|---|
| 1 | -1.25 | -0.75 | -2 |
| 2 | 3.75 | 4.25 | 6 |
| 3 | -4.25 | -5.75 | -7 |
| 4 | 1.75 | 2.25 | 3 |
Passo 2 – Varianze e Covarianze Campionarie
Applicando la formula della varianza campionaria [math]\frac{\sum (x_i – \bar{x})^2}{n-1}[/math] con [math]n-1 = 3[/math]:
[math]s_1^2 \text{ (Età)} = (1.5625 + 14.0625 + 18.0625 + 3.0625) / 3 = 12.25[/math]
[math]s_2^2 \text{ (Alt)} = (0.5625 + 18.0625 + 33.0625 + 5.0625) / 3 \approx 18.917[/math]
[math]s_3^2 \text{ (Peso)} = (4 + 36 + 49 + 9) / 3 \approx 32.667[/math]
Le relative deviazioni standard (radice quadrata della varianza) sono:
- [math]s_1 = 3.500[/math]
- [math]s_2 \approx 4.349[/math]
- [math]s_3 \approx 5.715[/math]
Calcoliamo le covarianze campionarie [math]\frac{\sum (x_i – \bar{x})(y_i – \bar{y})}{n-1}[/math]:
[math]\operatorname{Cov}(1,2) = [(-1.25)(-0.75) + \dots + (1.75)(2.25)] / 3 \approx 15.083[/math]
[math]\operatorname{Cov}(1,3) = [(-1.25)(-2) + \dots + (1.75)(3)] / 3 = 20.000[/math]
[math]\operatorname{Cov}(2,3) = [(-0.75)(-2) + \dots + (2.25)(3)] / 3 \approx 24.667[/math]
Matrice di covarianza risultante [math]\mathbf{S}[/math]:
[math]\displaystyle \mathbf{S} = \begin{pmatrix} 12.250 & 15.083 & 20.000 \\ 15.083 & 18.917 & 24.667 \\ 20.000 & 24.667 & 32.667 \end{pmatrix}[/math]
Passo 3 – La Matrice di Correlazione (e il trucco di NumPy)
La covarianza è difficile da interpretare perché dipende dall’unità di misura (anni, cm, kg). Per renderla universale, calcoliamo la correlazione di Pearson dividendo ogni covarianza per il prodotto delle rispettive deviazioni standard: [math]r_{ij} = \frac{\operatorname{Cov}(X_i, X_j)}{s_i s_j}[/math].
Età – Altezza ([math]r_{12}[/math]): [math]\frac{15.083}{3.500 \times 4.349} = \frac{15.083}{15.222} \approx \mathbf{0.991}[/math]
Età – Peso ([math]r_{13}[/math]): [math]\frac{20.000}{3.500 \times 5.715} = \frac{20.000}{20.004} = 0.99979 \dots \approx \mathbf{1.000}[/math]
Altezza – Peso ([math]r_{23}[/math]): [math]\frac{24.667}{4.349 \times 5.715} = \frac{24.667}{24.855} \approx \mathbf{0.992}[/math]
La matrice di correlazione finale (che coincide con la matrice di covarianza calcolata sui dati standardizzati Z-score) è:
[math]\displaystyle \mathbf{R} = \begin{pmatrix} 1 & 0.991 & 1 \\ 0.991 & 1 & 0.992 \\ 1 & 0.992 & 1 \end{pmatrix}[/math]
Nota : Noti l’1 nella correlazione Età-Peso? Il calcolo esatto restituisce [math]0.9998[/math]. È una correlazione talmente perfetta e lineare (in questo piccolo campione) che qualsiasi software di calcolo matematico o linguaggio di programmazione (come Python e NumPy) lo arrotonda direttamente a 1.0.
💡 Commento Applicativo
Questo esercizio dimostra matematicamente una proprietà bellissima: la matrice di correlazione non è altro che la matrice di covarianza di dati standardizzati.
Quando alleni modelli di Machine Learning (soprattutto Reti Neurali o modelli basati sulle distanze come il K-NN), inserire variabili con scale molto diverse (Età in decine, Stipendi in decine di migliaia) “schiaccia” l’apprendimento del modello sulle variabili con i numeri più alti, ignorando le altre. La standardizzazione e il passaggio alla correlazione spiegano matematicamente perché il Feature Scaling è uno step obbligatorio per ogni Data Scientist.
Intermezzo Pratico: Verifica tutti i risultati con Python (NumPy e Scikit-Learn)
Abbiamo visto come calcolare tutto a mano per capire i meccanismi matematici dietro le quinte.
Ma come si fa tutto questo nel mondo reale della Data Science?
In Python, bastano tre righe di codice per ottenere gli stessi identici risultati sfruttando NumPy e Scikit-Learn.
Riprendiamo i dati dell’Esercizio 4 (Età, Altezza, Peso):
import numpy as np
# Definiamo il nostro dataset (4 osservazioni, 3 variabili)
X = np.array([
[25, 175, 70],
[30, 180, 78],
[22, 170, 65],
[28, 178, 75]
])
1. Calcolare la Matrice di Covarianza
Per ottenere la matrice di covarianza usiamo la funzionenp.cov().
Attenzione a un dettaglio fondamentale: di default, NumPy si aspetta che le variabili siano sulle righe e le osservazioni sulle colonne.
Poiché il nostro array [math]X[/math] ha le variabili sulle colonne, dobbiamo passargli la matrice trasposta usando X.T.
# Calcoliamo la matrice di covarianza campionaria
cov_matrix = np.cov(X.T, ddof=1)
print("Matrice di Covarianza:")
print(np.round(cov_matrix, 2))
Matrice di Covarianza:
[[12.25 15.08 20. ]
[15.08 18.92 24.67]
[20. 24.67 32.67]]
Nota: il parametro ddof=1 (Delta Degrees of Freedom) dice a NumPy di dividere per [math]n-1[/math], calcolando esattamente la covarianza campionaria non distorta che abbiamo calcolato noi a mano nell’Esercizio 4.
2. Calcolare la Matrice di Correlazione
Ancora più semplice. Per passare dalla covarianza alla correlazione, NumPy mette a disposizione la funzione np.corrcoef(), che calcola direttamente la matrice di correlazione normalizzando automaticamente la matrice di covarianza rispetto alle deviazioni standard delle variabili. Il risultato è equivalente a quello che si otterrebbe standardizzando preventivamente i dati e calcolandone poi la covarianza.
# Calcoliamo la matrice di correlazione
corr_matrix = np.corrcoef(X.T)
print("\nMatrice di Correlazione:")
print(np.round(corr_matrix, 3))
Matrice di Correlazione:
[[1. 0.991 1. ]
[0.991 1. 0.992]
[1. 0.992 1. ]]
Eseguendo questo codice, otterrai esattamente i valori che abbiamo faticosamente ricavato a mano.
3. Prepararsi alla PCA con Scikit-Learn
Nel prossimo esercizio (Esercizio 5) vedremo come estrarre gli autovalori per la scomposizione PCA. Nel machine learning moderno, nessuno calcola gli autovettori a mano. Si usa la libreria standard dell’ecosistema Python: Scikit-Learn.
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
# Standardizziamo le variabili (media = 0, deviazione standard = 1)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# Inizializziamo la PCA mantenendo le prime due componenti
pca = PCA(n_components=2)
# Addestriamo il modello sui dati standardizzati
pca.fit(X_scaled)
print("Varianza spiegata:")
print(pca.explained_variance_ratio_)
Se esegui il codice qui sopra, l'output che otterrai sarà esattamente questo:
Varianza spiegata:
[0.99620684 0.00374458]
Cosa ci dicono questi due numeri?
È qui che avviene la vera “magia” della riduzione della dimensionalità.
Il primo numero (0.9962): Ci dice che la primissima componente principale (PC1), da sola, riesce a spiegare ben il 99.62% di tutta l’informazione contenuta nel dataset.
Il secondo numero (0.0037): La seconda componente (PC2) cattura solo uno scarno 0.37%, ovvero una leggerissima variazione residua (quasi “rumore”).
Perché un risultato così estremo?
Se ricordi la matrice di correlazione calcolata poco fa, Età, Altezza e Peso avevano correlazioni vicinissime a 1.0 (crescevano tutte insieme in modo quasi perfettamente lineare).
La PCA ha matematicamente “capito” che queste tre variabili raccontavano in realtà un’unica storia.
Il risultato applicativo è straordinario: grazie a questa scomposizione potremmo buttare via due intere colonne dal nostro database e lavorare su una singola dimensione (PC1), conservando il 99.6% delle informazioni originali.
Una manna dal cielo per velocizzare gli algoritmi di Machine Learning!
Perché standardizzare prima della PCA?
La PCA individua le direzioni di massima varianza del dataset. Se le variabili hanno scale molto diverse (ad esempio età espressa in anni e reddito espresso in euro), quelle con valori numericamente più grandi tendono a dominare l’analisi. La standardizzazione tramite StandardScaler porta tutte le variabili ad avere media pari a 0 e deviazione standard pari a 1, consentendo alla PCA di individuare le relazioni reali tra le variabili e non semplicemente quelle con la scala numerica maggiore.
Osservazione: questo passaggio è la traduzione pratica dell’Esercizio 4. Là abbiamo visto che standardizzare i dati equivale a eliminare l’effetto delle diverse unità di misura. Qui sfruttiamo lo stesso principio per preparare il dataset alla PCA, che nella pratica del Machine Learning viene quasi sempre applicata dopo la standardizzazione delle feature.
Esercizio 5: Decomposizione Spettrale e PCA (Livello Difficile)
Testo
Un e-commerce ha tracciato il comportamento dei suoi utenti registrando tre metriche chiave: il tempo di navigazione in minuti ([math]X_1[/math]), il numero di pagine visitate ([math]X_2[/math]) e il valore del carrello in euro ([math]X_3[/math]).
Analizzando il dataset, viene estratta la seguente matrice di covarianza:
[math]\displaystyle \boldsymbol{\Sigma} = \begin{pmatrix} 4 & 2 & 1 \\ 2 & 9 & 3 \\ 1 & 3 & 16 \end{pmatrix}[/math]
Essendo una matrice di covarianza definita positiva, ammette una decomposizione spettrale del tipo [math]\boldsymbol{\Sigma} = \mathbf{Q} \boldsymbol{\Lambda} \mathbf{Q}^\top[/math], dove [math]\mathbf{Q}[/math] contiene gli autovettori e [math]\boldsymbol{\Lambda}[/math] gli autovalori sulla diagonale.
Calcolare le componenti principali (PCA), valutare il peso delle variabili originali sulla prima componente e determinare la percentuale di informazione conservata riducendo l’analisi a due sole dimensioni.
✅ Soluzione
1. Calcolo degli autovalori e degli autovettori
Risolvendo la matrice, estraiamo gli autovalori (che rappresentano la varianza di ciascuna componente) in ordine decrescente:
- [math]\lambda_1 \approx 17.314[/math]
- [math]\lambda_2 \approx 8.388[/math]
- [math]\lambda_3 \approx 3.298[/math]
(Verifica rapida: la traccia [math]4+9+16 = 29[/math] corrisponde alla somma degli autovalori [math]17.314 + 8.388 + 3.298 = 29[/math]).
A ciascun autovalore è associato un autovettore normalizzato. I tre autovettori sono:
- [math]\mathbf{v}_1 = (0.124, 0.363, 0.923)^\top[/math] associato a [math]\lambda_1[/math]
- [math]\mathbf{v}_2 = (0.309, 0.870, -0.384)^\top[/math] associato a [math]\lambda_2[/math]
- [math]\mathbf{v}_3 = (0.943, -0.333, 0.004)^\top[/math] associato a [math]\lambda_3[/math]
2. Direzione di massima varianza (Prima Componente Principale)
La prima componente principale (PC1) corrisponde all’autovettore legato all’autovalore più grande ([math]\lambda_1[/math]).
Possiamo scriverla come equazione lineare delle variabili originali:
[math]\displaystyle \text{PC}_1 = 0.124 X_1 + 0.363 X_2 + 0.923 X_3[/math]
Interpretazione aziendale:
Guardando i coefficienti di PC1, notiamo che:
- Il tempo di navigazione ([math]X_1[/math]) ha un peso marginale ([math]0.124[/math]).
- Il numero di pagine ([math]X_2[/math]) ha un peso moderato ([math]0.363[/math]).
- Il valore dell’acquisto ([math]X_3[/math]) domina nettamente la componente ([math]0.923[/math]).
Poiché i pesi al quadrato indicano la quota di varianza influenzata da quella variabile, sappiamo che [math]0.923^2 \approx 0.85[/math]. Questo significa che circa l’85% del “peso” direzionale di questa nuova variabile sintetica è guidato esclusivamente da quanto l’utente spende.
3. Varianza spiegata dalla prima componente
Per capire quanta informazione del dataset originale è catturata da PC1, dividiamo il suo autovalore per la varianza totale:
[math]\displaystyle \text{Varianza spiegata} = \frac{\lambda_1}{\lambda_1 + \lambda_2 + \lambda_3} = \frac{17.314}{29} \approx 0.597[/math]
La prima componente principale, da sola, riassume quasi il 60% della variabilità di tutti i comportamenti degli utenti sull’e-commerce.
4. Compressione dei dati (Riduzione a 2 Dimensioni)
Se decidessimo di mappare i nostri utenti su un grafico 2D utilizzando solo le prime due componenti (PC1 e PC2), scartando la terza per semplificare l’analisi:
[math]\displaystyle \text{Varianza conservata} = \frac{\lambda_1 + \lambda_2}{\text{Varianza Totale}} = \frac{17.314 + 8.388}{29} = \frac{25.702}{29} \approx 0.886[/math]
Questa tecnica ci permette di scartare una dimensione intera perdendo soltanto l’11.4% dell’informazione complessiva, garantendo un’analisi più agile con una rappresentazione dei dati dell’88.6% fedele all’originale.
💡 Commento Applicativo:
Questo esercizio chiude il cerchio matematico e mostra il vero “superpotere” della matrice di covarianza: la riduzione della dimensionalità. Quando un’azienda elabora database enormi con centinaia di metriche, i server rallentano e i modelli previsionali soffrono (la cosiddetta maledizione della dimensionalità). Usando gli autovettori della matrice di covarianza (PCA), possiamo comprimere lo spazio mantenendo intatto il segnale principale e scartando solo il rumore di fondo.
⚠️ I 5 Errori Più Comuni in Data Science (e come evitarli)
Ora che sai come calcolare e interpretare la matrice di covarianza, sei già a un ottimo punto. Tuttavia, nel lavoro di tutti i giorni, ci sono delle trappole in cui quasi tutti i Data Scientist alle prime armi finiscono per cadere.
Ecco i 5 errori più cercati e frequenti da cui guardarsi le spalle:
1. Confondere covarianza e correlazione
È l’errore più diffuso. La covarianza ti dice se due variabili si muovono nella stessa direzione (segno positivo) o in direzioni opposte (segno negativo). Ma non ti dice quanto è forte questo legame, perché il suo valore dipende dalle unità di misura.
La correlazione, invece, è la covarianza “in abito da sera”: essendo standardizzata tra [math]-1[/math] e [math]+1[/math], ti permette di misurare l’intensità esatta del legame, indipendentemente da cosa stai misurando.
2. Usare la covarianza per confrontare variabili su scale diverse
Se confronti la covarianza tra “Età e Altezza in cm” e la covarianza tra “Età e Stipendio in Euro”, la seconda avrà un valore numerico gigantesco. Questo non significa che l’età influenzi lo stipendio più dell’altezza! Il numero esplode semplicemente perché lo stipendio si misura in decine di migliaia. Usa la matrice di covarianza per i calcoli interni (come la PCA), ma usa la matrice di correlazione per l’interpretazione umana.
3. Dimenticare la standardizzazione prima del Machine Learning
Modelli basati sulle distanze (come K-Nearest Neighbors) o sull’ottimizzazione tramite gradiente (come le Reti Neurali) sono estremamente sensibili alla scala dei dati. Se gli passi la matrice grezza senza aver standardizzato le feature (Z-score), il modello darà un’importanza sproporzionata alle variabili con i numeri più alti, distruggendo l’efficacia dell’algoritmo.
4. Applicare la PCA senza prima standardizzare i dati
Questo è l’errore numero uno in assoluto nell’uso dell’Analisi delle Componenti Principali. La PCA cerca matematicamente le direzioni di “massima varianza”. Se hai un dataset con una variabile misurata in chilometri (valori piccoli) e una in millimetri (valori enormi), la PCA assegnerà tutto il peso ai millimetri solo perché generano una varianza numericamente più grande. Ricorda sempre: prima si scala (StandardScaler in Python), poi si applica la PCA.
5. Interpretare la covarianza come causalità
Il famoso mantra Correlation does not imply causation. Se scopri che le vendite di gelati e gli attacchi di squalo hanno un’altissima covarianza positiva durante i mesi estivi, non significa che mangiare il gelato attiri gli squali. Significa che entrambe le variabili dipendono da un terzo fattore nascosto: il caldo estivo che spinge le persone sia a mangiare gelati, sia a fare il bagno in mare. I numeri mostrano il legame, ma la causalità deve essere dimostrata con la logica e la conoscenza del dominio.
❓ FAQ: Domande Frequenti sulla Matrice di Covarianza
Per chiudere il cerchio, ecco le risposte rapide ai dubbi più comuni che emergono quando si lavora con matrici di covarianza, correlazione e algoritmi di Machine Learning.
Cos’è la matrice di covarianza?
È una tabella quadrata (una matrice) che mostra come diverse variabili statistiche si muovono insieme. Sulla sua diagonale principale trovi la varianza di ogni singola variabile (quanto oscilla da sola), mentre in tutti gli altri spazi trovi la covarianza tra coppie di variabili (come oscillano insieme). È la mappa fondamentale per analizzare le relazioni nei dati multivariati.
Qual è la differenza tra covarianza e correlazione?
La covarianza indica la direzione della relazione tra due variabili (positiva se crescono insieme, negativa se vanno in direzioni opposte), ma il suo valore dipende dalle unità di misura (es. euro, metri). La correlazione è semplicemente la covarianza standardizzata: un numero puro compreso sempre tra [math]-1[/math] e [math]+1[/math] che misura non solo la direzione, ma anche l’esatta forza di questo legame, indipendentemente dalla scala.
Quando usare la matrice di correlazione invece della covarianza?
Usa la correlazione quando devi interpretare i risultati a occhio nudo o confrontare l’intensità del legame tra variabili misurate su scale diverse (es. stipendio in euro vs. peso in kg). Usa la covarianza quando i dati hanno la stessa scala o come motore matematico interno per algoritmi che richiedono la dispersione originale, come l’Analisi delle Componenti Principali o il calcolo del rischio di un portafoglio finanziario.
Perché la PCA usa la matrice di covarianza?
L’Analisi delle Componenti Principali (PCA) cerca le direzioni geometriche (autovettori) nello spazio dei dati in cui la dispersione, ovvero la varianza, è massima. La matrice di covarianza contiene esattamente questa informazione strutturale. Diagonalizzando la matrice, la PCA trova nuove variabili sintetiche ortogonali (non correlate tra loro) che riassumono al meglio il dataset.
Una matrice di covarianza può avere autovalori negativi?
Matematicamente, no. Una matrice di covarianza valida deve essere “semidefinita positiva”, il che implica che tutti i suoi autovalori siano maggiori o uguali a zero. Un autovalore negativo equivarrebbe ad avere una “varianza negativa”, il che è impossibile. Se il tuo software restituisce autovalori negativi, indica la presenza di dati corrotti, dipendenza lineare perfetta tra le variabili o errori di approssimazione numerica (floating-point).
Come si calcola la matrice di covarianza in Python?
Il metodo più rapido e standard in Data Science è utilizzare la libreria NumPy con la funzione [code]np.cov()[/code]. Bisogna però fare attenzione all’orientamento dei dati: di default, NumPy si aspetta che le variabili siano posizionate sulle righe. Se il tuo dataset ha le variabili sulle colonne (lo standard per i DataFrame pandas), devi passare la matrice trasposta scrivendo [code]np.cov(X.T)[/code].
Perché è importante standardizzare i dati prima della PCA?
Poiché la PCA cerca le direzioni di massima varianza, una variabile con numeri nativamente grandi (es. il prezzo di un immobile in centinaia di migliaia di euro) dominerà completamente il modello rispetto a una variabile con numeri piccoli (es. il numero di stanze). Standardizzando (ad esempio calcolando lo Z-score), si dà a ogni variabile lo stesso “peso” di partenza, permettendo alla PCA di trovare i veri pattern relazionali nascosti e non solo la variabile con la scala numerica più ingombrante.
La matrice di covarianza è probabilmente uno degli oggetti matematici più importanti dell’intera Data Science. Ogni volta che esegui una PCA, addestri una Gaussian Mixture, calcoli una distanza di Mahalanobis o analizzi un portafoglio finanziario, stai sfruttando le informazioni racchiuse in questa matrice. Imparare a leggerla significa comprendere la struttura nascosta dei dati prima ancora di costruire un modello predittivo.
📚 Per approfondire: Analisi multivariata, algebra lineare e struttura dei dati con Python
I dati reali raramente vivono in uno spazio semplice: spesso contengono molte variabili correlate, anomalie nascoste e strutture complesse da interpretare. Dalla riduzione della dimensionalità con la PCA all’analisi multivariata con MANOVA, dalla distanza di Mahalanobis alla segmentazione dei clienti, queste guide mostrano come l’algebra lineare e la statistica multivariata diventano strumenti fondamentali per il Data Scientist.
- 👉PCA (Analisi delle Componenti Principali): mettere ordine nel caos dei dati con Python
- 👉MANOVA in Python: analisi multivariata della varianza con esempi pratici
- 👉Esercizio MANOVA svolto: analisi multivariata su sentiment e rating delle app
- 👉Distanza di Mahalanobis in Python: guida pratica agli outlier multivariati
- 👉Segmentazione clienti con Python: K-Means, PCA e t-SNE per il marketing comportamentale
- 👉Tutorial NumPy: algebra lineare con NumPy e applicazioni pratiche
- 👉Guida a NumPy per il Data Science: operazioni vettoriali ed esempi di embedding





