Similarità, distanze e trasformazioni lineari
Metriche di similarità, spazi metrici e come le trasformazioni lineari plasmano i dati.
Cosa imparerai
- Comprendere il problema analitico e il contesto decisionale
- Applicare esempi, metriche e controlli a casi reali
Collegamenti
Similarità, distanze e trasformazioni lineari
Un team product ti chiede perché il nuovo sistema di raccomandazione propone articoli apparentemente strani. A occhio sembrano lontani dal gusto dell’utente. Dentro il modello, invece, condividono una direzione: ritmo di acquisto, categoria, fascia prezzo, ricorrenza e risposta alle offerte.
Le trasformazioni lineari servono a rendere visibile quella struttura. Prendono uno spazio difficile da leggere e lo ruotano, comprimono o proiettano finché il segnale diventa più interpretabile. Se capisci cosa fa una matrice, capisci anche cosa il modello sta scegliendo di conservare e cosa sta sacrificando.
Una scena da cui partire
Usa questa lezione come ponte tra algebra e sistemi reali: embedding, PCA, SVD, raccomandazioni e riduzione dimensionale sono modi diversi di manipolare spazi. La domanda non è solo “come si calcola?”, ma “quale informazione resta leggibile dopo la trasformazione?”.
- Contesto: quale spazio stai trasformando: utenti, prodotti, eventi o feature?
- Metodo: quale trasformazione riduce rumore senza cancellare segnale utile?
- Applicazione: come spiegheresti a un team perché due punti diventano vicini?
La Geometria del Comportamento: Spazi Vettoriali e Metriche di Distanza
Per analizzare i dati in modo quantitativo, dobbiamo prima tradurre entità del mondo reale — clienti, prodotti, transazioni — in un linguaggio matematico. Lo strumento per questa traduzione è il vettore. Un cliente di una piattaforma e-commerce può essere rappresentato come un vettore in uno “spazio delle caratteristiche” (feature space), dove ogni dimensione corrisponde a una metrica di comportamento. Ad esempio, il cliente C1 potrebbe essere descritto dal vettore v1 = [12, 85.50, 4], dove le componenti rappresentano rispettivamente acquisti_ultimo_mese, spesa_media_per_acquisto e categorie_diverse_visitate. Un secondo cliente, C2, potrebbe essere v2 = [13, 90.00, 4].
Una volta che i nostri dati vivono in questo spazio vettoriale, possiamo porre domande geometriche. “Quanto sono simili C1 e C2?” diventa “Quanto sono vicini i vettori v1 e v2?”. La risposta dipende interamente dalla metrica di distanza che scegliamo di imporre su questo spazio. La scelta più intuitiva è la distanza Euclidea, la lunghezza del segmento di linea retta che congiunge i due punti.
Per due vettori p e q in uno spazio a n dimensioni, è definita come:
d(p, q) = sqrt( (p1-q1)² + (p2-q2)² + ... + (pn-qn)² )
Nel nostro esempio, la distanza Euclidea tra C1 e C2 sarebbe sqrt( (12-13)² + (85.50-90.00)² + (4-4)² ) = sqrt( (-1)² + (-4.5)² + 0² ) = sqrt(1 + 20.25) ≈ 4.61. Questo numero, di per sé, ha poco significato, ma diventa potente quando lo usiamo per confrontare distanze relative. Se un terzo cliente C3 (v3 = [3, 25.00, 2]) si trova a una distanza Euclidea di 65.8 da C1, possiamo affermare con certezza che C1 è molto più “simile” a C2 che a C3.
Tuttavia, la distanza Euclidea ha un presupposto implicito: l’importanza della magnitudine. Consideriamo ora due utenti di un servizio di streaming video, rappresentati da vettori che indicano il tempo speso a guardare diversi generi:
Utente A = [10, 20, 5] (10 ore di Sci-Fi, 20 di Comedy, 5 di Documentari)
Utente B = [2, 4, 1] (2 ore di Sci-Fi, 4 di Comedy, 1 di Documentari)
La distanza Euclidea tra loro è significativa, perché l’Utente A è un consumatore molto più assiduo. Eppure, il loro pattern di consumo è identico: entrambi dedicano il doppio del tempo alla Comedy rispetto alla Sci-Fi, e la metà del tempo ai Documentari rispetto alla Sci-Fi. Hanno gli stessi gusti, ma volumi di visione diversi. Per catturare questa forma di similarità, ignorando la magnitudine, si utilizza la similarità Coseno. Questa metrica non misura la distanza tra le punte dei vettori, ma calcola il coseno dell’angolo tra di essi. Un angolo di 0° (coseno = 1) significa che i vettori puntano nella stessa identica direzione (gusti identici), mentre un angolo di 90° (coseno = 0) indica ortogonalità (nessuna somiglianza nel pattern). La formula è:
similarity(A, B) = (A · B) / (||A|| * ||B||)
Per i nostri utenti, la similarità coseno è 1, indicando un allineamento perfetto dei gusti. Questa metrica è il motore di innumerevoli sistemi di raccomandazione, dall’e-commerce (trovare clienti con pattern d’acquisto simili) all’analisi testuale (trovare documenti che parlano degli stessi argomenti, indipendentemente dalla loro lunghezza). La scelta tra Euclidea e Coseno non è tecnica, ma strategica: stiamo cercando vicinanza assoluta o allineamento di pattern?
Caso di Studio: La Personalizzazione di Netflix e la Maledizione della Dimensionalità
Agli albori dei sistemi di raccomandazione, Netflix si è scontrata con un problema che affligge chiunque lavori con dati ricchi di caratteristiche: la “maledizione della dimensionalità”. Immaginiamo di voler rappresentare ogni utente come un vettore. Una scelta ovvia è creare una dimensione per ogni film o serie TV nel catalogo. Se un utente ha valutato “Breaking Bad” con 5 stelle, la componente del vettore corrispondente a quel titolo sarà 5; se non l’ha visto, sarà 0. Con un catalogo di decine di migliaia di titoli, si ottiene uno spazio vettoriale con decine di migliaia di dimensioni.
In uno spazio a 2 o 3 dimensioni, la nostra intuizione geometrica funziona bene. La distanza Euclidea ha un significato chiaro. Ma quando le dimensioni diventano migliaia, questa intuizione crolla. Come dimostrato da Aggarwal et al. (2001), in spazi ad alta dimensionalità, la distanza tra un punto e il suo vicino più prossimo tende a diventare indistinguibile dalla distanza tra quello stesso punto e il suo vicino più lontano. In altre parole, tutti i punti diventano quasi equidistanti l’uno dall’altro. Questo fenomeno rende le metriche di distanza come quella Euclidea quasi inutili per compiti come il clustering o la ricerca di vicini (k-Nearest Neighbors), perché il concetto stesso di “vicinato” perde di significato.
Netflix ha compreso che il problema non era la metrica in sé, ma la rappresentazione dello spazio. I dati grezzi (utente-valutazione) erano troppo sparsi e dimensionali. La soluzione è stata abbandonare questo spazio originale per proiettare i dati in uno spazio latente a dimensionalità molto più bassa. Qui entrano in gioco le trasformazioni lineari, in particolare la Decomposizione ai Valori Singolari (SVD) e le sue varianti. Invece di avere 50.000 dimensioni che rappresentano film specifici, il sistema impara un numero molto più piccolo (es. 100-200) di “dimensioni latenti”. Queste dimensioni non hanno un’etichetta umana predefinita, ma il modello scopre che potrebbero rappresentare concetti astratti come “commedie dark con protagonisti antieroi” o “film d’azione con alta tensione psicologica”.
Ogni utente e ogni film viene quindi rappresentato da un vettore in questo nuovo spazio a 100 dimensioni. La valutazione che un utente darebbe a un film può essere stimata calcolando il prodotto scalare tra il vettore dell’utente e il vettore del film in questo spazio compresso. Questa tecnica, nota come matrix factorization, è stata il cuore della soluzione vincitrice del Netflix Prize da 1 milione di dollari. L’implementazione di questi algoritmi ha permesso a Netflix di migliorare la Root Mean Square Error (RMSE), una metrica di accuratezza della predizione, di oltre il 10%. A livello di business, questo si è tradotto in un’esperienza utente drasticamente migliore: raccomandazioni più pertinenti hanno portato a un aumento del tempo di visione per sessione del 15% nel biennio 2016-2018, contribuendo direttamente a una riduzione del tasso di abbandono (churn) e a un aumento del lifetime value del cliente.
Trasformazioni Lineari: Rimodellare i Dati per Estrarre Segnale
Una trasformazione lineare è un’operazione che sposta, ruota, scala o deforma i vettori in uno spazio in modo coerente. Matematicamente, è rappresentata dalla moltiplicazione di una matrice per un vettore: y = Ax, dove x è il vettore originale, A è la matrice di trasformazione e y è il nuovo vettore. Comprendere l’effetto geometrico di diverse matrici A è la chiave per manipolare i dati a nostro vantaggio.
-
Scalatura (Scaling): Una matrice diagonale (valori non nulli solo sulla diagonale principale) scala i dati lungo gli assi. Se
A = [[2, 0], [0, 0.5]], ogni vettorex = [x1, x2]viene trasformato iny = [2*x1, 0.5*x2]. Questo allunga lo spazio di un fattore 2 lungo l’asse x e lo comprime di un fattore 0.5 lungo l’asse y. Questa è l’operazione alla base della standardizzazione dei dati: se una feature (es. reddito in euro) ha una varianza molto più grande di un’altra (es. età in anni), dominerà il calcolo della distanza Euclidea. Scalando le feature per avere media 0 e deviazione standard 1, ci assicuriamo che ogni dimensione contribuisca equamente alla metrica di distanza. -
Rotazione (Rotation): Una matrice ortogonale (una matrice quadrata
Atale cheA^T * A = I, doveA^Tè la trasposta eIè la matrice identità) ruota lo spazio. Queste trasformazioni preservano le lunghezze dei vettori e gli angoli tra di essi. Non alterano la struttura intrinseca dei dati, ma cambiano il sistema di coordinate. Questo è utile per allineare i dati con direzioni più “interessanti”. -
Proiezione (Projection): Una proiezione “schiaccia” i dati su un sottospazio a dimensionalità inferiore. Immaginate di proiettare l’ombra di un oggetto 3D su un muro 2D. Si perde informazione (la profondità), ma si ottiene una rappresentazione più semplice. Matematicamente, una matrice di proiezione non è invertibile (non si può tornare indietro dall’ombra all’oggetto originale senza informazioni aggiuntive). L’Analisi delle Componenti Principali (PCA) è una tecnica che trova la migliore proiezione possibile, quella che preserva la massima varianza dei dati originali.
La Decomposizione ai Valori Singolari (SVD) è forse il teorema più potente dell’algebra lineare applicata. Afferma che qualsiasi matrice A può essere fattorizzata in tre matrici: A = UΣV^T.
UeVsono matrici ortogonali (rotazioni).Σ(Sigma) è una matrice diagonale i cui valori (i valori singolari) rappresentano fattori di scalatura.
La SVD ci dice che qualsiasi trasformazione lineare, non importa quanto complessa, può essere scomposta in una sequenza di tre operazioni geometriche fondamentali: una rotazione (V^T), una scalatura lungo i nuovi assi (Σ), e un’altra rotazione (U). Questa decomposizione è il motore dietro a PCA, sistemi di raccomandazione, compressione di immagini e topic modeling (come Latent Semantic Analysis), perché permette di isolare le “direzioni” e le “magnitudini” più importanti di una trasformazione o di un dataset.
Dalla Teoria alla Pratica: Collaborative Filtering con Spotify
Torniamo al caso di Spotify. La piattaforma può costruire un’enorme matrice R dove le righe rappresentano gli utenti e le colonne le canzoni. L’elemento R(i, j) potrebbe essere il numero di volte che l’utente i ha ascoltato la canzone j. Questa matrice, come quella di Netflix, è gigantesca e molto sparsa (la maggior parte degli utenti ha ascoltato solo una minuscola frazione del catalogo).
Applicare la SVD a questa matrice (R ≈ UΣV^T) ci permette di decomporla in componenti che hanno un’interpretazione potente:
- Le righe della matrice
U(moltiplicata per le radici dei valori singolari) possono essere viste come i vettori latenti degli utenti. Ogni utente è ora descritto da un vettore denso in uno spazio a dimensionalità ridotta (es. 100 dimensioni invece di 30 milioni). - Le colonne della matrice
V(moltiplicata per le radici dei valori singolari) sono i vettori latenti delle canzoni. Ogni canzone è descritta nello stesso spazio a 100 dimensioni.
In questo nuovo “spazio dei gusti”, la vicinanza ha di nuovo un significato. Se i vettori di due utenti sono vicini (usando la similarità coseno), significa che i loro gusti sono simili, e possiamo raccomandare loro canzoni a vicenda. Se i vettori di due canzoni sono vicini, significa che tendono ad essere ascoltate dagli stessi tipi di utenti, anche se i loro metadati (genere, artista) sono completamente diversi. Questo è il principio del collaborative filtering: le raccomandazioni emergono dalle interazioni collettive della base utenti, non da regole manuali.
Per predire se all’utente i piacerà la canzone j (cioè per riempire un valore mancante nella matrice R), è sufficiente calcolare il prodotto scalare tra il vettore latente dell’utente i e il vettore latente della canzone j. Un valore alto suggerisce una forte affinità.
Ecco un esempio concettuale in Python che mostra come la SVD può essere usata per ricostruire una matrice di rating e fare predizioni, usando numpy per l’algebra lineare.
import numpy as np
# Matrice Utente-Canzone (valori = numero di ascolti, 0 = non ascoltata)
# Utenti: Alice, Bob, Carol
# Canzoni: Song1, Song2, Song3, Song4
R = np.array([
[5, 3, 0, 1],
[4, 0, 0, 1],
[1, 1, 0, 5],
[1, 0, 0, 4],
[0, 1, 5, 4],
])
# Normalizziamo i dati sottraendo la media per utente (un passo comune)
user_ratings_mean = np.mean(R, axis=1)
R_demeaned = R - user_ratings_mean.reshape(-1, 1)
# Applichiamo la SVD
# U: vettori singolari sinistri (legati agli utenti)
# sigma: valori singolari (importanza delle dimensioni latenti)
# Vt: vettori singolari destri (legati alle canzoni)
U, sigma, Vt = np.linalg.svd(R_demeaned, full_matrices=False)
# Ricostruiamo la matrice usando solo le prime k=2 componenti principali
k = 2
R_reconstructed = np.dot(U[:, :k], np.dot(np.diag(sigma[:k]), Vt[:k, :])) + user_ratings_mean.reshape(-1, 1)
# Stampiamo la matrice ricostruita
# I valori non-zero dove prima c'era zero sono le nostre predizioni
print("Matrice originale:")
print(R)
print("\nMatrice ricostruita (con predizioni):")
print(np.round(R_reconstructed, 2))
# Esempio di predizione: la valutazione predetta di Bob (utente 1) per la canzone 2 (che non aveva ascoltato)
predicted_rating = R_reconstructed[1, 2]
print(f"\nValutazione predetta per Bob (utente 1) sulla Canzone 3: {predicted_rating:.2f}")
Questa metodologia ha permesso a Spotify di ottenere risultati di business straordinari. L’affinamento continuo di questi modelli di collaborative filtering ha portato a un miglioramento del Click-Through Rate (CTR) sulle raccomandazioni personalizzate (come Discover Weekly) di oltre il 30% e ha contribuito a un aumento della metrica di engagement “giorni attivi al mese” di 2 giorni in media per gli utenti più assidui.
Laboratorio Analitico: Dall’E-commerce alla Segmentazione Clienti
Ora mettiamo in pratica questi concetti. Immaginiamo di essere analisti per una piattaforma e-commerce e di avere un piccolo dataset sui comportamenti di cinque clienti. Il nostro obiettivo è capire come segmentarli. I dati, rappresentati in un DataFrame pandas, sono i seguenti: spesa_totale (in €), numero_ordini, giorni_dall_ultimo_acquisto e prodotti_distinti_acquistati.
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import seaborn as sns
data = {
'cliente_id': ['A', 'B', 'C', 'D', 'E'],
'spesa_totale': [1500, 1600, 200, 250, 5000],
'numero_ordini': [15, 16, 2, 3, 50],
'giorni_ultimo_acquisto': [10, 12, 90, 85, 5],
'prodotti_distinti': [30, 32, 5, 6, 100]
}
df = pd.DataFrame(data).set_index('cliente_id')
features = df.columns
X = df.values
Esercizio 1: Scelta della Metrica
Osservando i dati grezzi, i clienti A e B sembrano molto simili, così come C e D. Il cliente E è un outlier, un “whale”. Calcoliamo la distanza Euclidea e la similarità Coseno tra A e E.
- Euclidea: La distanza sarà molto grande, dominata dalla differenza in
spesa_totaleenumero_ordini. Questo ci dice che sono clienti di “taglia” molto diversa. - Coseno: I loro pattern sono simili? A ha un rapporto
spesa/ordinidi
Laboratorio ed esercizi
Metti in pratica quanto appreso con esercizi a difficoltà crescente. Lavora su un dataset reale — se non hai accesso al tuo data warehouse aziendale, usa dataset pubblici come Google Analytics Sample su BigQuery o il dataset E-Commerce di Kaggle.
Esercizio 1 — Implementazione base. Riproduci la query o il modello descritto nella lezione, adattandolo al tuo dataset. Verifica che i risultati siano coerenti con le metriche attese: se il totale non quadra con una query di controllo, c’è un problema di grain.
Esercizio 2 — Estensione. Aggiungi una dimensione di analisi non coperta nella lezione: segmenta per paese, per device, per fascia oraria o per coorte. Dove emergono pattern inattesi? Cosa implicano per le decisioni operative?
Esercizio 3 — Automazione. Trasforma la query in una vista o in un modello dbt con test di integrità (unique, not_null) e documenta le colonne. Se il tuo stack lo permette, configura un alert che notifichi quando la metrica esce da 2 deviazioni standard dalla media mobile.
Errori frequenti e come evitarli
Anche gli analisti esperti cadono in trappole prevedibili quando lavorano con questo tipo di analisi. Conoscerle in anticipo riduce il tempo di debugging e aumenta la fiducia nei risultati.
Errore 1 — Confondere correlazione e causalità. Solo perché due metriche si muovono insieme non significa che una causi l’altra. Un A/B test o un’analisi controfattuale sono l’unico modo per stabilire causalità. Qualsiasi dashboard di correlazione va presentata con un disclaimer esplicito.
Errore 2 — Ignorare la stagionalità. Confrontare novembre con dicembre senza correggere per l’effetto festività produce insight fuorvianti. Usa sempre un confronto anno-su-anno o una media mobile destagionalizzata quando la metrica ha componenti stagionali note.
Errore 3 — Non validare il grain della query. La causa più comune di risultati errati è un grain sbagliato: un JOIN che duplica righe, un filtro applicato troppo tardi, una finestra definita sul dataset sbagliato. Prima di interpretare qualsiasi numero, verifica il conteggio delle righe a ogni step della query.
Problema reale
Nel dominio di matematica per analisi dati, Similarità, distanze e trasformazioni lineari serve a risolvere questo problema: usare concetti matematici per capire incertezza, struttura e limiti delle analisi. La lezione non va trattata come teoria isolata, ma come un modo per migliorare una scelta concreta con dati, assunzioni esplicite e controlli minimi.
Obiettivo operativo: Comprendere il problema analitico e il contesto decisionale; Applicare esempi, metriche e controlli a casi reali. Se alla fine non sai indicare quale decisione cambia, quale dato osservi e quale errore vuoi evitare, la lezione non è ancora diventata competenza applicata.
Modello concettuale
| Fase | Cosa chiarire | Output |
|---|---|---|
| Domanda | Quale scelta reale deve migliorare? | Decisione da prendere |
| Misura | Quale segnale osservabile rappresenta il problema? | Metrica o dato sorgente |
| Controllo | Quale baseline rende il risultato interpretabile? | Confronto credibile |
| Azione | Che cosa cambia dopo l’analisi? | Prossimo passo operativo |
Il modello concettuale è intenzionalmente semplice: decisione, dato, controllo, azione. Ogni approfondimento tecnico deve rafforzare almeno uno di questi quattro punti.
Formalizzazione rigorosa
Per rendere Similarità, distanze e trasformazioni lineari analizzabile, definisci prima l’unità di lavoro: variabile, vettore, distribuzione, funzione, campione o matrice. Poi collega questa unità a una metrica osservabile: errore, distanza, varianza, stabilità, sensibilità e interpretabilità. Infine dichiara la decisione attesa: formalizzazione, controllo di assunzione, calcolo o interpretazione geometrica.
| Elemento | Specifica richiesta |
|---|---|
| Unità di analisi | variabile, vettore, distribuzione, funzione, campione o matrice |
| Segnale principale | errore, distanza, varianza, stabilità, sensibilità e interpretabilità |
| Baseline | Periodo precedente, gruppo comparabile, benchmark o scenario controfattuale |
| Decisione | formalizzazione, controllo di assunzione, calcolo o interpretazione geometrica |
| Rischio | Scambiare un numero disponibile per una prova sufficiente |
La formalizzazione e solida quando un altro analista può riprodurre la logica, criticare le assunzioni e ottenere la stessa decisione partendo dagli stessi dati.
Esempio o caso studio
Due utenti sembrano simili perché comprano gli stessi prodotti, ma diventano lontani se pesi frequenza, margine o recenza. Similarità e trasformazioni lineari servono a controllare lo spazio in cui confronti i dati, non solo a calcolare una distanza.
| Evidenza osservata | Lettura prudente | Azione consigliata |
|---|---|---|
| Il numero migliora | Potrebbe essere effetto reale o variazione normale | Cercare confronto e segmento |
| Un segmento cambia più degli altri | La media aggregata nasconde una differenza | Separare coorti o casi d’uso |
| Il costo cresce insieme al risultato | L’impatto va letto sul margine | Stimare trade-off e sostenibilità |
Lab / esercizio
Livello base
Scrivi una scheda di una pagina per Similarità, distanze e trasformazioni lineari: decisione da supportare, metrica primaria, baseline, rischio principale e azione se il segnale e confermato.
Livello intermedio
Costruisci una tabella con tre segmenti, periodi o scenari. Per ciascuno indica cosa cambia, quale spiegazione alternativa e plausibile e quale controllo useresti prima di raccomandare un azione.
Livello research-grade
Prepara un decision memo: ipotesi, dati richiesti, criteri di esclusione, controlli di qualità, soglia decisionale, rischio residuo e piano di monitoraggio dopo la decisione.
Dataset e materiali consigliati
Usa dataset numerici, simulazioni, matrici, campioni, notebook e problemi guidati. Se non hai accesso a dati reali, crea un dataset sintetico con almeno 200 righe, una dimensione temporale, una dimensione segmento e una metrica di outcome.
Errore tipico da evitare
L’errore più comune e usare Similarità, distanze e trasformazioni lineari come etichetta invece che come processo. Succede quando il team mostra un grafico senza decisione, una metrica senza baseline, o una conclusione senza indicare quale assunzione potrebbe invalidarla.
La domanda di controllo è: se questo risultato fosse instabile, quale scelta sbaglierei? Se la risposta non è concreta, manca ancora il collegamento tra analisi e azione.
Quiz o checkpoint
- Quale decisione concreta dovrebbe migliorare questa lezione?
- Quale unità di analisi rende il problema misurabile?
- Quale baseline useresti per evitare una lettura ingenua?
- Quale errore tipico potrebbe cambiare la conclusione?
- Quale output consegneresti a uno stakeholder non tecnico?
Riepilogo operativo
Similarità, distanze e trasformazioni lineari diventa utile quando produce una decisione più chiara, non quando aggiunge terminologia. Usa il framework problema, modello, formalizzazione, esempio, lab e checkpoint per trasformare la lezione in pratica verificabile. Categoria: Tecnico. Difficoltà: advanced. Tempo stimato: 22 min.
Percorso collegato
Lezioni da leggere insieme
Questi collegamenti portano la lezione dentro il resto del corso: basi da riprendere, passaggi successivi e connessioni tematiche tra moduli.