
Cluster analysis: tecniche e applicazioni
Tecniche avanzate di clustering: hierarchical, DBSCAN e Gaussian Mixture Models per segmentazione.
Cosa imparerai
- Comprendere il problema analitico e il contesto decisionale
- Applicare esempi, metriche e controlli a casi reali
Collegamenti
import matplotlib.pyplot as plt
Cluster analysis: tecniche e applicazioni
Questa è una lezione tecnica, quindi il punto non è elencare algoritmi ma capire quale decisione di marketing cambia quando i segmenti diventano più affidabili. Un algoritmo trova cinque cluster di clienti, ma nessuno sa se rappresentano comportamenti stabili o solo artefatti di scala, feature e normalizzazione. Il lavoro consiste nel trasformare segmenti matematici in gruppi interpretabili, attivabili e abbastanza robusti da guidare le campagne.
Il problema reale
Un clustering produce gruppi che a prima vista sembrano distinti, ma la geometria può ingannare. Capita che un cluster nasca quasi solo dal reddito, un altro dalla frequenza di acquisto e un terzo dai dati mancanti. Il cluster utile non è quello più bello in un grafico: è quello che descrive una differenza reale e suggerisce un trattamento diverso. Per questo la lezione è un controllo continuo tra geometria e business.
Il problema vero non è conoscere il clustering in astratto. È decidere cosa fare quando i dati sono incompleti, le metriche ambigue o i vincoli tecnici rendono fragile la lettura. Una buona analisi separa il segnale dal rumore, dichiara la baseline e indica quale segmento merita un’azione e quale va scartato perché non è azionabile.
Come impostare il ragionamento
Usa questa sequenza come mappa di lavoro. Ogni passaggio deve rendere più chiaro il costo di una decisione sbagliata.
| Passaggio | Domanda da fare | Output atteso |
|---|---|---|
| Decisione | Che cosa cambia se capiamo meglio i segmenti? | Scelta esplicita |
| Segnale | Quale dato osservabile riduce l’incertezza? | Metrica o evento |
| Baseline | Rispetto a cosa interpretiamo il risultato? | Confronto credibile |
| Vincolo | Che cosa può falsare la lettura? | Assunzione da dichiarare |
| Azione | Quale passo operativo segue? | Raccomandazione controllabile |
La domanda di targeting che apre tutto è semplice: quale decisione richiede davvero segmenti non supervisionati, e quale controllo verifica che siano stabili e interpretabili?
Come formalizzare il problema
Formalizzare non serve a complicare. Serve a rendere visibili le assunzioni, così un altro analista può riprodurre la logica, criticarla e arrivare alla stessa decisione partendo dagli stessi dati.
| Elemento | Definizione operativa | Controllo minimo |
|---|---|---|
| Unità di analisi | Oggetto su cui misuri il fenomeno | Utente, account, evento, ordine o periodo |
| Variabile osservata | Segnale che rappresenta il comportamento | Definizione stabile e tracciabile |
| Baseline | Stato contro cui confronti il segnale | Periodo, segmento, controllo o benchmark |
| Soglia decisionale | Punto in cui cambia l’azione | Criterio scritto prima della lettura |
| Rischio residuo | Errore che può restare anche dopo l’analisi | Sensitivity check o revisione qualitativa |
Il rischio principale resta scambiare un numero disponibile per una prova sufficiente.
Hierarchical clustering
Il clustering gerarchico non richiede di fissare K a priori. Produce un dendrogramma che mostra visivamente la struttura gerarchica dei cluster.
from scipy.cluster.hierarchy import dendrogram, linkage, fcluster
from sklearn.preprocessing import StandardScaler
X_scaled = StandardScaler().fit_transform(df[features])
Z = linkage(X_scaled, method='ward') # minimizza varianza intra-cluster
# Dendrogramma
plt.figure(figsize=(14, 7))
dendrogram(Z, truncate_mode='level', p=5)
plt.title('Customer Segmentation Dendrogram')
plt.show()
# Taglia a 5 cluster
clusters = fcluster(Z, t=5, criterion='maxclust')
Il dendrogramma è un buon strumento esplorativo. Vedere a quale altezza i cluster si uniscono dà intuizioni sulla struttura dei dati che i numeri da soli non offrono, e puoi tagliare l’albero a diverse altezze per ottenere più o meno granularità.
DBSCAN: cluster di forma arbitraria
DBSCAN non assume cluster sferici e gestisce automaticamente gli outlier, classificandoli come rumore nel cluster -1.
from sklearn.cluster import DBSCAN
dbscan = DBSCAN(eps=0.8, min_samples=15)
clusters = dbscan.fit_predict(X_scaled)
n_clusters = len(set(clusters)) - (1 if -1 in clusters else 0)
n_outliers = list(clusters).count(-1)
print(f"Cluster: {n_clusters}, Outliers: {n_outliers} ({n_outliers/len(clusters)*100:.1f}%)")
Conviene quando i dati hanno cluster di densità variabile, per esempio comportamenti di acquisto con pattern non lineari, quando ci sono outlier significativi e quando non hai idea di quanti cluster aspettarti. Il parametro più critico è eps. Per sceglierlo usa il metodo k-distance: plotta la distanza al k-esimo vicino per ogni punto in ordine decrescente, e cerca il gomito della curva.
from sklearn.neighbors import NearestNeighbors
neigh = NearestNeighbors(n_neighbors=15)
nbrs = neigh.fit(X_scaled)
distances, _ = nbrs.kneighbors(X_scaled)
distances = np.sort(distances[:, -1])
plt.plot(distances)
# Cerca il punto di massima curvatura → eps ottimale
Gaussian Mixture Models (GMM)
I GMM assegnano una probabilità di appartenenza soft invece di etichette rigide.
from sklearn.mixture import GaussianMixture
gmm = GaussianMixture(n_components=5, covariance_type='full', random_state=42)
gmm.fit(X_scaled)
probs = gmm.predict_proba(X_scaled) # shape: (n_samples, n_components)
labels = gmm.predict(X_scaled)
Per il marketing è comodo: un cliente può essere “60% Deal Hunter, 30% Power Shopper, 10% Window Shopper”. Puoi targetizzare le campagne sui pesi di appartenenza invece che su etichette binarie. Un cliente al 60% Deal Hunter vede soprattutto offerte, ma ogni tanto anche raccomandazioni premium pensate per il 30% Power Shopper.
Scegliere il numero di cluster
Nessuna metrica decide da sola quanti cluster servono. Conviene incrociare gli indici quantitativi con il significato di business.
| Metrica | Range | Target | Interpretazione |
|---|---|---|---|
| Silhouette Score | [-1, 1] | Più alto = meglio, >0.5 buono | Coesione intra-cluster vs separazione inter-cluster |
| Davies-Bouldin Index | [0, ∞) | Più basso = meglio | Similarità media tra ogni cluster e il suo più simile |
| Calinski-Harabasz | [0, ∞) | Più alto = meglio | Rapporto varianza between/within cluster |
| Business interpretability | Qualitativo | Segmenti con significato marketing | Se non sai spiegare il cluster in 1 frase, non serve |
In pratica testa K da 2 a 10 con tutte e tre le metriche, cerca il punto dove iniziano a peggiorare marginalmente, poi scegli il K con il miglior significato di business anche se non è l’ottimo matematico puro.
Checklist per un clustering di successo
Un clustering è pronto quando hai feature normalizzate (StandardScaler o MinMaxScaler), hai provato almeno tre metodi tra K-means, hierarchical, DBSCAN o GMM, e hai fissato il numero di cluster usando le metriche insieme al business sense. Ogni cluster deve avere un nome memorabile e un profilo interpretabile, e deve restare stabile: rifacendo il clustering su un subset, le assegnazioni non cambiano radicalmente. L’ultimo controllo è il più severo: il clustering deve portare a un’azione di marketing diversa per segmento. Se tratti tutti i segmenti allo stesso modo, non serve.
Controllo di qualità e interpretazione per segmenti
Prima di usare i cluster in una decisione, controlla sempre completezza, duplicati, timezone, definizioni cambiate e segmenti esclusi. Molte analisi apparentemente sofisticate falliscono perché il dato di partenza misura un comportamento diverso da quello che il team crede di osservare.
La media aggregata è solo il punto di partenza. Segmenta per canale, coorte, piano, paese, device e maturità dell’utente: se due segmenti si muovono in direzioni opposte, la media non rappresenta nessuno dei due e può portare a una scelta sbagliata.
Lab ed esercizi
Comincia da una scheda di una pagina: decisione da supportare, metrica primaria, baseline, rischio principale e azione se il segnale è confermato. Al livello intermedio costruisci una tabella con tre segmenti o scenari, indicando per ciascuno cosa cambia, quale spiegazione alternativa è plausibile e quale controllo useresti prima di raccomandare un’azione. Al livello research-grade prepara un decision memo completo con ipotesi, dati richiesti, criteri di esclusione, controlli di qualità, soglia decisionale, rischio residuo e piano di monitoraggio. Se non hai dati reali, costruisci un dataset sintetico con almeno 200 righe, una dimensione temporale, una dimensione segmento e una metrica di outcome.
L’errore più comune è usare il clustering come etichetta invece che come processo: un grafico senza decisione, una metrica senza baseline, una conclusione senza l’assunzione che potrebbe invalidarla. La domanda di controllo: se questo risultato fosse instabile, quale scelta sbaglierei?
Quiz e checkpoint
Per verificare di aver collegato analisi e azione, rispondi a cinque domande. Quale decisione concreta dovrebbe migliorare la segmentazione? Quale unità di analisi rende il problema misurabile? Quale baseline useresti per evitare una lettura ingenua? Quale errore tipico potrebbe cambiare la conclusione? E quale output consegneresti a uno stakeholder non tecnico?
Riepilogo
La cluster analysis diventa utile quando produce una decisione più chiara, non quando aggiunge terminologia. Un segmento conta solo se è stabile, interpretabile in una frase e traducibile in un trattamento diverso dagli altri. La forma corretta del ragionamento resta sempre la stessa: decisione, segnale, baseline, rischio e azione. Categoria Tecnico, difficoltà advanced, tempo stimato 22 minuti.
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.