ELAI S.r.l.

Conservare il 99% della variabilità significa conservare ciò che serve al modello?

Una derivazione della PCA e quattro punti mostrano perché ricostruzione, varianza e informazione predittiva non sono la stessa cosa.

Conservare il 99% della variabilità significa conservare ciò che serve al modello?

La differenza più grande può non essere quella decisiva

Un modello aziendale riceve molte caratteristiche e vogliamo comprimerle. Una procedura dichiara di conservare oltre il 99% della varianza: sembra rassicurante, quasi avessimo perso meno dell’1% di ciò che conta. Ma la variabilità dei dati e l’informazione utile a una previsione non sono sinonimi. Studieremo la PCA, analisi delle componenti principali, derivandone l’obiettivo e costruendo un esempio in cui il risultato è ottimo per la ricostruzione e insufficiente per distinguere le classi. Il punto non è screditare il metodo, ma leggere correttamente che cosa ottimizza.

Abstract. Quattro punti(±10,±1) hanno covarianza diagonale con autovalori 400/3 e 4/3. La prima componente conserva 100/101≈99,0099% della varianza e perde soltanto 1 di errore quadratico medio di ricostruzione per punto. Se l’etichetta è definita dal segno della seconda coordinata, però, la proiezione associa valori identici a classi opposte: nessun classificatore deterministico basato solo sulla prima componente può concordare con più di due delle quattro etichette. Non è accuratezza di test. Variare la scala della prima caratteristica cambia la direzione selezionata e può rendere gli autovalori degeneri. Eseguiamo i calcoli con NumPy, senza addestrare un predittore.

Il dataset completo e la domanda supervisionata

Le righe della matrice X sono(−10,−1),(−10,1),(10,−1),(10,1). Sono valori sintetici senza unità fisiche: una caratteristica ha ampiezza grande e una piccola. Assegniamo etichetta 0 quando la seconda coordinata è negativa e 1 quando è positiva. La media di ogni colonna è zero, quindi i dati sono già centrati. Non esiste suddivisione training/test e non useremo i quattro punti per stimare generalizzazione. Li usiamo per dimostrare che una percentuale elevata di varianza conservata non implica logicamente conservazione dell’informazione necessaria a quel compito.

Che cosa massimizza la PCA

Scegliamo una direzione unitaria v, un vettore colonna con due coordinate e lunghezza 1. La proiezione z=Xv associa a ogni riga un solo numero. Per dati centrati la varianza campionaria di z è vᵀCv, dove C=XᵀX/(n−1) e n=4. La prima componente principale cerca il v che massimizza questa quantità. La domanda della formula è dunque dove si estendano maggiormente i dati, non quale direzione predica meglio l’etichetta. Nessuna etichetta compare nell’obiettivo.

maximize v^T C v, subject to v^T v=1 C=X^T X/(n−1)=diag(400/3,4/3)

Il prodotto XᵀX ha 400 nella prima diagonale e 4 nella seconda; i prodotti incrociati si cancellano:10−10−10+10=0. Dividendo per 3 otteniamo C. Per trovare il massimo possiamo usare un moltiplicatore λ: la derivata di vᵀCv−λ(vᵀv−1) dà 2 Cv−2λv=0. La direzione scelta è quindi un autovettore e il valore di varianza corrisponde al suo autovalore. Poiché 400/3 è maggiore di 4/3, la prima componente è l’asse della prima coordinata, a meno di un segno che non cambia la proiezione ricostruita.

C v=λv v₁=(1,0)^T; z₁=Xv₁=(−10,−10,10,10)^T Retained fraction = (400/3)/[(400/3)+(4/3)] = 100/101

La percentuale conservata è circa 99,0099%. Il denominatore somma la varianza di entrambe le componenti, cioè la traccia di C; non contiene una misura di informazione sulle classi. La seconda coordinata ha meno dell’1% della varianza totale, pur definendo interamente l’etichetta. Non c’è incoerenza nel calcolo: la PCA ha trovato proprio la direzione richiesta dall’obiettivo. L’errore nascerebbe dal sostituire mentalmente la frase varianza conservata con percentuale di utilità predittiva conservata.

Perché la ricostruzione è davvero buona

La ricostruzione da una sola componente è X_hat=(Xv)vᵀ=Xvvᵀ. La matrice vvᵀ proietta ortogonalmente sulla direzione scelta. La parte ricostruita e il residuo sono ortogonali, perciò il quadrato della norma totale è la somma dei due quadrati: minimizzare il residuo equivale a massimizzare la parte proiettata. Usiamo la norma di Frobenius, che somma i quadrati di tutte le coordinate della matrice. Questa equivalenza spiega perché la PCA sia una soluzione sensata per comprimere minimizzando quel particolare errore.

||X−Xvv^T||_F²=||X||_F²−||Xv||₂² X_hat=[(−10,0),(−10,0),(10,0),(10,0)] MSE_per_point=(1/4)·Σ_i ||x_i−x_hat_i||₂²=1

Ogni punto perde soltanto la seconda coordinata±1, quindi ogni distanza quadratica residua vale 1 e la loro media vale 1. La somma originale dei quadrati è 404, di cui 400 rimangono: ritroviamo il rapporto 100/101. La varianza della seconda componente è invece 4/3 e non 1, perché la covarianza campionaria divide per n−1, mentre il nostro errore per punto divide per n. Dichiarare i denominatori evita una falsa contraddizione fra due numeri entrambi corretti. Non abbiamo chiamato errore medio per punto una media separata su ogni singola coordinata.

Un’informazione piccola che la proiezione elimina

Dopo la proiezione i primi due punti hanno entrambi z=−10, ma etichette 0 e 1. Lo stesso accade agli altri due con z=10. Una funzione deterministica g(z) deve restituire la stessa etichetta quando riceve lo stesso numero: per ogni coppia può concordare al massimo con un punto. In totale il limite è 2/4. Non abbiamo allenato un classificatore e osservato 50% su un test: abbiamo dimostrato che nessuna funzione di quel solo numero separa tutte le etichette del nostro insieme. Un identificativo di riga o altre caratteristiche cambierebbero il problema e non sono concessi in questo confronto.

Con entrambe le coordinate l’etichetta è leggibile dal segno della seconda per definizione. Il confronto non stima quanto generalizzi quella regola in un impianto reale, né quanto spesso la PCA perda segnali importanti nei dati aziendali. È un controesempio sufficiente per negare una garanzia universale. La bassa varianza può essere rumore in altri problemi; qui non lo è, perché il target è stato costruito proprio su quella caratteristica. È il legame col compito a decidere il significato, non la sola ampiezza.

Cambiare scala può cambiare la componente

Moltiplichiamo la prima coordinata per c, lasciando la seconda invariata. La covarianza diventa diagonale con 100 c²× 4/3 e 4/3. Con c=0,2 la prima direzione resta dominante ma conserva 80% della varianza; con c=0,05 domina la seconda, ancora con 80%. A c=0,1 gli autovalori coincidono: non c’è una prima direzione unica. Il risolutore numerico restituisce comunque una base, ma non dobbiamo interpretare una scelta arbitraria dentro quello spazio come scoperta di una direzione privilegiata.

cFrazione conservataDirezione
1100/101(1,0)
0.20.8(1,0)
0.10.5λ₁=λ₂
0.050.8(0,1)

Questo non dimostra che scegliere c=0,05 sia una strategia ottima generale: abbiamo usato la conoscenza del controesempio per costruire la variante. Mostra che la scala fa parte dell’ipotesi del metodo. Standardizzare ogni caratteristica modifica quella geometria; non garantisce automaticamente la direzione più predittiva e nel nostro caso bilanciato può proprio rendere uguali le varianze. Anche ridimensionare o sbiancare la sola componente già conservata non può ricreare la coordinata eliminata: due ingressi che hanno lo stesso z continuano a coincidere dopo qualunque funzione di z soltanto.

Sinistra: quattro punti colorati per etichetta e proiezioni nere suPC1; ogni proiezione coincide per due classi opposte. Destra:99,0099% di varianza conservata e massimo50% di accordo con le etichette usando soltantoPC1 su questo insieme. Non sono due metriche di test né risultati di un classificatore addestrato.
Sinistra: quattro punti colorati per etichetta e proiezioni nere suPC 1; ogni proiezione coincide per due classi opposte. Destra:99,0099% di varianza conservata e massimo 50% di accordo con le etichette usando soltantoPC 1 su questo insieme. Non sono due metriche di test né risultati di un classificatore addestrato.

Che cosa verificare in una pipeline reale

La documentazione ufficiale scikit-learn della PCA, versione consultata 1.9.1, specifica centratura, SVD e varianza spiegata: l’implementazione non scala automaticamente ogni caratteristica. Ne abbiamo letto definizioni e limiti dei risolutori; qui abbiamo eseguito NumPy 2.5.3, non scikit-learn. Per un predittore reale la dimensione compressa va valutata rispetto al compito, confrontando anche l’assenza della trasformazione. La pagina ufficiale sui problemi comuni ricorda che apprendere trasformazioni, PCA compresa, sui dati di test contamina la valutazione. Il nostro insieme di quattro punti non viene presentato come tale valutazione.

L’allegato conserva punti, etichette, covarianza, autovettori, ricostruzione e quattro riscalamenti. Le asserzioni verificano rapporto 100/101, errore per punto 1 e limite 2/4. Non c’è casualità; il segno degli autovettori può cambiare fra risolutori senza cambiare la proiezione ortogonale, e la degenerazione va riconosciuta a parte. Per matrici grandi una SVD troncata o randomizzata introduce altre scelte computazionali non eseguite qui. Non attribuiamo al piccolo esperimento tempi, risparmi di memoria o qualità di un sistema EL-AI.

Conservare il 99% della varianza può quindi conservare pochissimo di ciò che distingue le risposte richieste. Nel nostro caso il metodo ottimizza correttamente la ricostruzione, ma il target vive nella coordinata meno variabile che viene eliminata. Non è un invito a conservare sempre tutto: è una richiesta di allineare la metrica della compressione alla domanda finale. La percentuale spiega quanto bene rappresentiamo la variabilità secondo una geometria scelta; la capacità predittiva richiede una verifica distinta.

scikit-learn 1.9.1 PCA documentation, read 17 October 2026: centering, variance, SVD, scaling and solver caveats. NumPy, not scikit-learn, was executed..

scikit-learn 1.9.1 Common pitfalls,§12.2, read 17 October 2026. Real evaluation requires separation of fitting and testing; no test estimate claimed here..

from experiment import X
import numpy as np
print(np.cov(X,rowvar=False))
print(np.linalg.eigh(np.cov(X,rowvar=False)))

Codice, dati e istruzioni · JSON. Calcoli didattici eseguiti con Python 3.14.0; figure con Matplotlib 3.11.2. Analisi con assistenza AI, senza dichiarare peer review o revisione umana. Copertina originale ImageGen, illustrativa: non documenta persone, sedi o installazioni EL-AI. Fonti consultate il 17 ottobre 2026.