Sei sulla pagina 1di 40

A.A.

2016 / 2017

Laboratorio
del corso di
STATISTICA
Donata Bonino

Corso di Laurea in Pianificazione Territoriale, Urbanistica e


Paesaggistico-Ambientale
Cluster Analysis
con il SAS

➢ Cluster Analysis: cos'è e a cosa serve


➢ Tipi di dati, pretrattamento
➢ Tipi di clustering
➢ Cluster Analysis con SAS: procedure cluster e fastclus
➢ Procedure di supporto: stdize, tree, sgplot

2
Cluster Analysis
Clustering (~ raggruppamenti) è un insieme di tecniche statistiche il cui scopo
è quello di trovare una o più strutture all'interno di dati non organizzati.
Si cerca quindi di raggruppare i dati in gruppi i cui membri siano “simili”
secondo una qualche legge, e in modo che i gruppi siano “diversi” tra di loro.
Graficamente, possiamo facilmente intuire il concetto di raggruppamento:

From SAS OnLineDoc V8. Copyright (c) 1999


SAS Institute Inc., Cary, NC, USA. All rights
reserved. 3
Cluster Analysis

La suddivisione dei dati in gruppi può avere diversi scopi:


➢ trovare nei dati strutture “naturali” ma nascoste, e
descriverne le proprietà
➢ cercare nei dati se esistono strutture “utili” ai fini del proprio
lavoro
➢ trovare se esistono dati “diversi” dagli altri (outlier)

Non esiste un raggruppamento dei dati ideale, ovvero indipendente dallo


scopo finale dell'analisi.

!! E' sempre l'analizzatore che deve interpretare i gruppi che ha ottenuto, e


decidere della loro bontà o utilità!!

4
Cluster Analysis

5
Cluster Analysis
Gli ambiti di utilizzo sono in costante crescita:
- finanza, assicurazioni: trovare gruppi omogenei di consumatori è utile per la
previsione delle strategie future, ma anche per scoprire eventuali bachi
(prodotti non competitivi, ma anche truffe!)
- biologia: possibilità di classificare piante, animali... utilizzando le loro
caratteristiche classiche o cercandone di nuove meno evidenti
Studi coinvolgenti grandi masse di dati di cui non si conoscono le
caratteristiche. Es: caratterizzazione del genoma umano
- pianificazione territoriale: studio del territorio e pianificazione studiando
contemporaneamente la moltitudine di caratteristiche di un'area geografica: la
popolazione (età, sesso, titolo di studio...), l'urbanizzazione (quantità di case,
tipi di case, di utilizzo, valore economico, localizzazione geografica...), il
paesaggio (aree agricole vs. industriali o residenziali, presenza di corsi d'acqua
o situazioni particolari – montagna, difficoltà di accesso...) e molti altri ancora!
- analisi del web: il web è caratterizzato da una quantità abnorme di dati
eterogenei. Servono allora tecniche per la classificazione di documenti, per lo
studio degli utenti, delle loro preferenze...
-… 6
Cluster Analysis: requisiti

Le tecniche di clustering devono avere diversi requisiti utili:


- capacità di lavorare con diversi tipi di variabili (continue, categoriche...) e con
un grande numero di variabili
- capacità di lavorare con dati rumorosi e con outlier
- capacità di riconoscere cluster con forme e numerosità arbitrarie, anche
senza informazioni a priori
- insensibilità all'ordine delle osservazioni
- interpretabilità dei gruppi
-…

7
Cluster Analysis: problemi

A tutt'oggi le diverse tecniche di clustering hanno ancora dei problemi:


- difficoltà a soddisfare tutti i requisiti in modo soddisfacente
- la definizione di distanza tra elementi/gruppi non è univoca, ma dipende
dall'ambito da cui provengono i dati e dalle loro proprietà. Soprattutto nel caso
multivariato la definizione di distanza non è semplice
- metodi differenti possono dare cluster diversi: scegliere tra questi non è facile
- i gruppi ottenuti possono sovente essere interpretati in modo diverso
- lavorare con molti dati è un problema, soprattutto per il costo computazionale
e di tempo.

8
Cluster Analysis: note
Controllo della qualità dei dati.
Un aspetto importante dell'analisi cluster è l'ispezione dei dati, della loro
qualità.
Qualità dei dati:
- errori, rumori, outlier (dati validi ma molto diversi)
- dati mancanti, duplicati di osservazione

Pretrattamento dei dati.


A seconda del problema rilevato, si possono applicare correzioni diverse.
- rumori: è possibile smussare dati molto rumorosi, per esempio sostituendoli
con la retta di regressione lineare
- outlier: dall'analisi cluster possono risultare outlier, che vanno eliminati
- dati mancanti: possono essere ignorati, oppure sostituiti. In questo ultimo
caso è necessario prestare attenzione alle conseguenze della sostituzione!
- duplicati di osservazione: possono dare problemi a seconda del tipo di analisi,
e possono essere sottratti.
9
Cluster Analysis: note

Pretrattamento dei dati.


Se si lavora con molte variabili, è necessario prestare attenzione al tipo di valori
che possono assumere. Per esempio, se si ha l'altezza in m e il peso in kg, le
scale di valori sono molto diverse, e quindi anche media e varianza. Lavorare
sulle variabilità diventa difficile.
Conviene in questo caso operare una trasformazione delle variabili:
- conversione tra scale di valori (per esempio, variabili in euro e dollari:
conversione tra valute)
- standardizzazione delle variabili, per avere lo stesso range di variazione.
Nel caso in cui si abbiano molte variabili, è possibile cercare di ridurre la loro
dimensionalità, cercando di ottenere nuove variabili tra loro scorrelate. Un
esempio può essere la costruzione delle componenti principali.

10
Cluster Analysis: algoritmi

Gli algoritmi di clustering possono essere suddivisi in base alla tipologia di


cluster a cui danno origine, per esempio:
- clustering esclusivo (disgiunto): ogni dato appartiene ad un certo cluster, e
non può appartenere anche ad un altro
- clustering sovrapposto: ogni punto può appartenere a due o più cluster.
Deve allora esistere una legge che definisca il grado di appartenenza del punto
ad ogni cluster

… oppure in base all'algoritmo che li genera:


- clustering gerarchico: basato sull'unione tra i due cluster più vicini.
- clustering partitivo: i dati vengono ripartiti su un certo numero di gruppi
(cluster), per esempio: k-means
- clustering probabilistico: basato su un approccio probabilistico.

11
Cluster Analysis: criteri di valutazione
R2
Un buon clustering è tale da massimizzare le differenze tra cluster, ma
minimizzare le differenze tra punti all'interno dello stesso cluster. In altre
parole, la variabilità all'interno dei singoli cluster deve essere più bassa
possibile, mentre quella tra cluster deve essere massimizzata.
L'indice R2 mette a confronto la somma delle variabilità all'interno dei singoli
cluster con la variabilità totale dei dati:
K 2
 x x
j 1 iC j
i j

R  1
2
n 2
 x x
i 1
i

dove n è il numero totale dei dati, K il numero dei cluster Cj, xj è la media del
cluster Cj e x è la media dei dati.

Se R2 tende a 0: buona parte della varianza dei dati è nei cluster


Se R2 tende a 1: la varianza nei cluster → 0: buon raggruppamento!
12
Cluster Analysis: criteri di valutazione
Cubic clustering criterion (ccc)
Questo indice è stato ricavato a partire da R2, sotto l'ipotesi nulla che i dati
siano distribuiti uniformemente, e non in cluster.
E' funzione del numero di cluster: ccc = ccc(K)
Valori negativi indicano la presenza di possibili outlier, valori tra 0 e 2 indicano
la possibile presenza di cluster, valori > 2 indicano un buon raggruppamento.
Nell'esempio, il numero ottimale di cluster è 8.

13
Cluster Analysis: alcuni algoritmi

Ci concentriamo ora su due tipi di algoritmi esclusivi:

a) algoritmo k-means: decidiamo il numero k di gruppi in cui suddividere i


dati e riempiamo questi gruppi grazie ad un algoritmo “k-means”.

b) algoritmo gerarchico: costruiamo un albero di raggruppamenti, in cui


partendo dalla base (1 dato = 1 gruppo), ad ogni livello uniamo i due gruppi
più “vicini” del livello precedente. Decidiamo a che livello fermarci in base ai
criteri di valutazione visti prima.

14
Cluster Analysis: k-means
Questo metodo iterativo assume di scegliere un certo numero K di cluster a
priori. Per ognuno viene scelto un “centroide” c. Ogni punto viene quindi
associato al centroide più vicino, creando un primo set di K cluster. Dopo di
che, in ogni cluster viene ricalcolato il baricentro (momento primo), basandosi
sui dati in esso presente. Con questo nuovo set di centroidi, ogni punto viene
nuovamente associato al centroide a lui più vicino.
Questo processo può essere iterato fino a quando i centroidi non cambiano più,
permettendo di minimizzare la funzione obiettivo:
nj 2
K
J   xi  c j
j 1 i 1

Problemi: la scelta dei centroidi non è banale, e da questa dipende il risultato


finale. Una scelta comune è quella di scegliere casualmente i centroidi.

15
Cluster Analysis: algoritmi gerarchici
Questo algoritmo parte assegnando ad ogni punto un cluster (N cluster). Dopo
di che, si cercano i due punti più vicini e li si uniscono in un solo cluster. A
questo punto si hanno N-1 cluster. Questo processo viene iterato fino ad
arrivare ad un unico cluster che contiene tutti gli N punti.
Ogni algoritmo per la classificazione gerarchica definisce una sua propria
distanza, in base alla quale raggruppare i dati. Possibili scelte sono:
- single-linkage: si definisce la distanza tra cluster come la minima distanza tra
i membri dei due cluster.
- complete-linkage: la distanza è la massima distanza tra i punti dei due
cluster.
- average-linkage: la distanza è la media delle distanze tra i punti dei due
cluster.
- mediana: la distanza è la media delle distanze tra i punti dei due cluster (più
resistente agli outlier).
- centroidi: la distanza è la distanza tra le medie dei due cluster.
- Ward: versione più robusta dell'algoritmo dei centroidi ...
16
Cluster Analysis: algoritmi gerarchici
Il risultato della classificazione può essere rappresentato graficamente con un
dendogramma:

From SAS OnLineDoc V8. Copyright (c) 1999


SAS Institute Inc., Cary, NC, USA. All rights
reserved.

Si può scegliere il numero K di cluster dopo il raggruppamento, troncando


l'albero all'altezza desiderata.

17
Cluster Analysis: algoritmi gerarchici

Un problema per gli algoritmi gerarchici è la presenza di tie (letteralmente:


connessioni).
Ad ogni passo, l'algoritmo deve unire il cluster del passo precedente con il
punto a distanza minima. Se al passo h ci sono due o più punti alla stessa
distanza dal cluster Ch-1, è necessario operare una scelta, che darà origine a
una certa classificazione. Scelte diverse daranno origine a clustering diversi.
Il SAS, in presenza di tie, sceglie l'osservazione con numero identificativo
minore. Da quel livello in poi, però, la classificazione non è più univoca
(dipende dall'ordine delle osservazioni!!).
Per valutare l'effetto della presenza di tie, è necessario ripetere più volte
l'analisi permutando la posizione delle osservazioni, e studiare le differenze tra
le classificazioni prodotte.

18
Cluster Analysis con SAS

Il SAS mette a disposizione diverse procedure per eseguire analisi cluster


e per visualizzarne i risultati. Tra le altre abbiamo:
- proc fastclus: permette di fare clustering disgiunto con un algoritmo k-
means
- proc cluster: permette di fare clustering gerarchico con 11 algoritmi
diversi
- proc tree: permette di visualizzare la gerarchia di cluster utilizzando gli
output delle procedure cluster e fastclus

19
Cluster Analysis con SAS
Esercizio
Il dataset food contiene 27 osservazioni di cibi diversi, contrassegnati da un
indice (id_food). Per ogni cibo, vengono riportati i contenuti calorici, di
proteine, di grassi, di calcio e di ferro.
E' possibile raggruppare i dati in gruppi?

20
Preprocessamento dei dati
Le variabili che ci possono permettere una classificazione sono:
cal protein fat calcium iron
La variabile id_food, invece, serve per tenere traccia di quali cibi finiranno
nei vari cluster. Notiamo che le scale di valori delle variabili classificatrici
sono diverse. Dobbiamo quindi procedere ad un primo trattamento,
richiedendo la standardizzazione classica (portandole tutte a media nulla e
varianza 1) e salvando i risultati in un nuovo dataset.

proc stdize data=lib.food method=std out=lib.stan;


var cal protein fat calcium iron;
run;

21
Preprocessamento dei dati
Nota: la procedura stdize mette a disposizione diversi metodi di
standardizzazione (method= ...), in cui varia la quantità sottratta (location) e il
denominatore (scale). Ci sono anche metodi che sono particolarmente indicati
per il clustering. A questo livello dell'analisi, però, noi non abbiamo ancora
alcuna indicazione sui risultati (per es, il numero di cluster) che ci permetta di
discriminare tra i metodi.

22
Preprocessamento dei dati
Ecco il dataset stan:

23
Procedura cluster
Procediamo ora ad una prima analisi cluster sui dati standardizzati,
richiedendo una classificazione gerarchica. In questo modo non dobbiamo
scegliere un numero di cluster a priori.
Chiediamo che l'output (la classificazione e i principali indici di controllo)
sia salvato in un nuovo dataset: lib.tree

proc cluster data=lib.stan method=average ccc out=lib.tree


plots(maxclus=10)=den(height=rsq);
var cal protein fat calcium iron;
id id_food;
run;

24
Procedura cluster

algoritmo di
variabili classificazione
standardizzate

proc cluster data=lib.stan method=average ccc out=lib.tree


plots(maxclus=10)=den(height=rsq);
var cal protein fat calcium iron;
id id_food;
run;

richiede il
generiche opzioni di plot:
calcolo di ccc
voglio al massimo 10
clusters richiede un
dendogramma
Var: le variabili per la classificazione avente come
Id: ogni punto è contraddistinto dal valore ordinata l'indice R2
della variabile id, e non da un valore di multiplo
default 25
Procedura cluster

26
Procedura cluster: output

R2 multiplo: 6 cluster
storia delle rappresentano l'82.6% Non ci sono
unioni tra della varianza totale tie!
cluster dei dati 27
Procedura cluster: output
Per valutare il numero di cluster, oltre l'R2, possiamo controllare il criterio di
clustering cubico (ccc). Il ccc sale per K>4. Non avendo altre informazioni,
possiamo pensare a K=5 o K=6. Per K<5, valori negativi possono far
sospettare la presenza di outlier.

28
Procedura cluster: output
Il dendogramma rappresenta la gerarchia di cluster. Avendo richiesto l'R2 come
altezza dei cluster, possiamo valutare quanta proporzione di varianza spiegano i
cluster che scegliamo.

Notiamo come ci siano 3 cluster molto piccoli, che giustifica il ccc negativo per
29
K<5.
Procedura cluster
Possiamo richiedere altre visualizzazioni. Dobbiamo prima di tutto
decidere il numero di cluster (nclusters=6), e richiedere che i dati vengano
correttamente associati al cluster corrispondente. Questo si può fare con
la procedura tree. L'output verrà messo in un nuovo dataset, lib.clust.
Chiediamo anche che nel nuovo data set vengano copiate le variabili di
origine, e che i dati vengano identificati grazie alla variabile id_food
(opzione id).

proc tree data=lib.tree out=lib.clust nclusters=6 noprint;


height _rsq_;
copy cal protein fat calcium iron;
id id_food;
run;

Ora con questo nuovo dataset possiamo chiedere nuovi plot. Dato che
abbiamo 5 variabili, non possiamo avere una rappresentazione d'insieme.
Conviene ridurre la dimensionalità dei dati, costruendo una
rappresentazione canonica (concettualmente simile alle componenti
principali, ma in cui si condensa la variabilità tra classi e non tra dati)...
30
Procedura cluster
La procedura candisc produce un'analisi delle componenti canoniche,
usando come variabile di raggruppamento la variabile automatica cluster
prodotta dalla procedura tree e contenuta nel dataset lib.clust.
I dati prodotti vengono salvati nel nuovo dataset lib.can, che utilizzeremo
nella procedura di plot, sgplot (procedura che permette di creare più grafici
e di sovrapporli):

proc candisc data=lib.clust out=lib.can;


var cal protein fat calcium iron;
class cluster;
run;
proc sgplot data=lib.can;
scatter y=can2 x=can1 /group=cluster;
run;

Nota: can1 e can2 sono due variabili automatiche che contengono le


prime due componenti canoniche, quelle che raccolgono la maggior
variabilità tra i gruppi.
31
Procedura cluster

Ritroviamo i 2 due gruppi con frequenza 1 e quello con frequenza 2. Gli


altri tre gruppi si dividono il nucleo centrale di dati.
32
Procedura fastclus
Procediamo ora ad una analisi cluster sui dati standardizzati utilizzando
l'algoritmo k-means. Dobbiamo scegliere il numero di cluster a priori.
Dall'analisi precedente, sappiamo che n=6 cluster può essere una buona
base di partenza.
Con questo tipo di algoritmo, il numero di cluster è fissato in tutta l'analisi.
Nuovamente chiediamo che l'output (la classificazione e i principali indici
di controllo) sia salvato in un nuovo dataset: lib.clust_k

proc fastclus data=lib.stan out=lib.clust_k maxclusters=6;


var cal protein fat calcium iron;
id id_food;
run;

33
Procedura fastclus: output
La prima tabella riporta la scelta dei semi iniziali, ovvero dei centroidi dei K
cluster. Nelle varie iterazioni, i centroidi verranno aggiornati.

Viene riportata la descrizione dei cluster. Richiediamo nuovamente il plot:


proc candisc data=lib.clust_k out=lib.can_k;
…; run;
proc sgplot data=lib.can_k;
scatter y=can2 x=can1 /group=cluster;
run;
34
Procedura fastclus: output

I cluster sono diversi rispetto al caso precedente!


35
Procedura fastclus: output
Per valutare la bontà del raggruppamento, possiamo utilizzare la tabella
delle statistiche:

L'R2 complessivo ci dice che con 6 cluster riusciamo a descrivere circa


l'83% della variabilità tra gruppi.
Possiamo richiedere di vedere quali dati rientrano nei vari gruppi:

36
Procedura fastclus: output
Possiamo richiedere di vedere quali dati rientrano nei vari gruppi:

proc sort data=lib.clust_k;


by cluster;
run;
proc print data=lib.clust_k;
by cluster;
var id_food cal protein fat
calcium iron;
run;

La valutazione di quale dei due raggruppamenti sia migliore non può


essere decisa da regole astratte, bensì dall'utente!
37
Procedura fastclus: outlier
Dato che ci sono cluster con 1 o 2 punti, lontani dagli altri, possiamo
ripetere la nostra indagine senza questi punti.
proc sgplot data=lib.can_k;
scatter y=can2 x=can1 /markerchar=cluster;
run;

38
Procedura fastclus: outlier
Selezioniamo solo i dati che non appartengono ai due cluster, salviamoli in
un nuovo dataset, lib.clust_noOut e ripetiamo l'analisi cluster:

data lib.clust_noOut;
set lib.clust;
if cluster ~= 4 and cluster ~= 6 then output;
run;
proc fastclus data=lib.clust_noOut out=lib.clust_kno maxclusters=4;
var cal protein fat calcium iron;
id id_food;
run;
proc candisc data=lib.clust_kno out=lib.can_kno;
var cal protein fat calcium iron;
class cluster;
run;
proc sgplot data=lib.can_kno;
scatter y=can2 x=can1 / group=cluster;
run;

39
Procedura fastclus: outlier

Un cluster isola il nuovo outlier (prima era in un gruppo con un altro dato), il
nucleo centrale dei dati si riparte tra tre gruppi principali.
Esercizio: ripetere ancora l'analisi escludendo il punto isolato, confrontare i
cluster ottenuti con gli originali. 40

Potrebbero piacerti anche