Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Grupo 1 - 5º DGIIM
8 de diciembre de 2023
1
Índice
1. Introducción 3
2. Caso de estudio 1 5
2.1. Descripción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3. Caso de estudio 2 14
3.1. Descripción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4. Caso de estudio 3 26
4.1. Descripción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.2. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2
1. Introducción
La práctica consiste en aplicar y analizar técnicas de agrupamiento para descubrir grupos en dis-
tintos conjuntos de datos seleccionados. El trabajo se realizará empleando bibliotecas y paquetes de
Python, principalmente numpy, pandas, scikit-learn, matplotlib y seaborn.
Los datos consisten en 2000 respuestas y más de 50 variables que recogen datos demográficos, socio-
económicos, intención de voto, ideologı́a y opinión sobre temas de actualidad. Existen algunas variables
numéricas como la edad o la posición ideológica en una escala de 0 a 10, y otras que, al ser ordinales,
se pueden hacer numéricas. Sin embargo, algunas variables son nominales sin orden (por ejemplo, la
provincia de residencia) y no servirán para aplicar clustering. Pero sı́ se podrán emplear para definir
casos de uso o para comparar resultados entre distintos grupos. Además, los datos se acompañan con
una ponderación que determina el grado de representatividad de cada sujeto respecto a la población
general. Estos pesos se considerarán, siempre que sea posible, en la ejecución de los algoritmos y en
las visualizaciones para reflejar mejor la realidad.
Antes de aplicar cualquier algoritmo, aplicaremos una normalización a los datos e imputaremos los
valores desconocidos por vecinos más cercanos. Esto es necesario ya que para las distancias todas las
variables deben estar normalizadas y algunos algoritmos no funcionan con valores perdidos. También,
en cada caso de estudio indicaremos si hay que hacer algún tratamiento extra por si existieran valores
del tipo “no sabe” o “no contesta”.
K-Means: Es un estándar en clustering, que asigna cada punto de datos al clúster cuyo centroide
es el más cercano. Es eficiente y fácil de entender, siendo adecuado para conjuntos de datos
grandes. Además, permite tener en cuenta el peso de cada dato.
Mean-Shift: Este algoritmo no requiere la especificación a priori del número de clústeres y es
capaz de encontrar automáticamente el número óptimo. Funciona desplazando iterativamente
los centroides hacia las regiones de alta densidad de datos.
DBSCAN (Density-Based Spatial Clustering of Applications with Noise): Es capaz de descubrir
clústeres de forma arbitraria y es robusto frente a ruido y valores atı́picos. Se basa en la densidad
de los puntos en el espacio de caracterı́sticas. Al igual que K-Means, permite tener en cuenta las
ponderaciones de la muestra.
HDBSCAN (Hierarchical Density-Based Spatial Clustering of Applications with Noise): A dife-
rencia de DBSCAN, HDBSCAN incorpora un enfoque jerárquico que permite identificar clústeres
de diferentes escalas. Este algoritmo asigna automáticamente la densidad a diferentes niveles, lo
que le brinda flexibilidad para detectar clústeres de distintos tamaños y formas en el conjunto
de datos.
Agglomerative Clustering: Este enfoque es de tipo jerárquico, comenzando con muchos pequeños
clústeres y fusionándolos gradualmente en clústeres más grandes. Puede proporcionar una visión
jerárquica de la estructura de los datos.
Spectral Clustering: Utiliza la información espectral del grafo de similitud de datos para realizar el
agrupamiento. Es eficaz para identificar clústeres no convexos y puede funcionar bien en conjuntos
de datos de alta dimensionalidad.
3
Las métricas de rendimiento que utilizaremos para comparar los resultados de los algoritmos ante-
riores son [2]:
Coeficiente Silhouette: Mide qué tan similar es un objeto a su propio clúster en comparación
con otros clústeres. Toma valores en el rango [-1, 1], donde valores más altos indican una mejor
separación de clústeres.
Índice de Calinski-Harabasz : Evalúa la relación entre la dispersión intraclúster y la dispersión
interclúster. Valores más altos indican una mejor separación entre los clústeres.
Índice de Dunn: Busca clústeres compactos y bien separados. Se define como la mı́nima relación
entre la distancia mı́nima entre puntos de diferentes clústeres y la distancia máxima entre puntos
del mismo clúster. [3]
Índice de Davies-Bouldin: Cuanto más bajo sea el valor, mejor será la partición. Mide la “bondad”
de la partición al evaluar la similitud promedio entre cada clúster y su clúster más similar.
4
2. Caso de estudio 1
2.1. Descripción
En primer lugar, vamos a intentar estudiar cuál es el nivel de preocupación de la población por
el cambio climático. Para ello, seleccionamos las siguientes variables: edad, ideologı́a, educación y la
respuesta a la pregunta 8.1 (en qué grado siente como amenaza el cambio climático). A menudo se
argumenta que los jóvenes suelen reciclar más y muestran una mayor conciencia ambiental, en este
caso de estudio intentaremos probar si esto es cierto o no.
2.2. Resultados
A continuación, presentamos las tablas con los resultados obtenidos por los distintos algoritmos de
clústering empleados:
Hemos utilizado los siguientes parámetros: K-Means (k=3), Mean-Shift (bandwidth=0.5), DBS-
CAN (eps=0.25, min samples=15), HDBSCAN (min cluster size=300, min-samples=1), Agglomera-
tive (n clusters=3), Spectral (n clusters=3)
Calinski-Harabasz
K-Means
Mean-Shift
DBSCAN
HDBSCAN
Agglomerative
Spectral
Silhouette
Davies-Bouldin
Nº Clústers
Tiempo (s)
5
Observamos que Mean-Shift es el que mejores métricas tiene en general. No obstante, es importante
señalar que este algoritmo solo logra generar 2 clústeres y su tiempo de ejecución es más prolongado en
comparación con los demás. Sorprendentemente, DBSCAN es el que peores métricas obtiene, lo que
sugiere la posibilidad de que no se hayan ajustado adecuadamente sus parámetros. Entre los algoritmos
que generan 3 clústeres, el que ofrece mejores resultados es K-Means.
6
2.2.1. Estudio de parámetros
Evolución de Silhouette para distintos valores de k Evolución del Índice Calinski-Harabasz para distintos valores de k
0.30
900
0.28 800
Calinski-Harabasz Index
Silhouette Coefficient
700
0.26
600
0.24
500
0.22
400
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Número de Clusters (k) Número de Clusters (k)
Vemos que en K-Means el coeficiente de Silhouette es alto para k=2, 3, pero luego disminuye drásti-
camente. Para valores mayores de k, vuelve a aumentar pero si eligiésemos estudiar esos resultados,
serı́an muy difı́ciles de interpretar debido al gran número de clústers. Destacamos el decrecimiento del
ı́ndice de Calinski-Harabasz, por lo que conforme aumentamos el número de clústers formados, peor es
la separación entre ellos.
7
HDBSCAN Parameter Tuning Heatmap (Silhouette Score) HDBSCAN Parameter Tuning Heatmap (Calinski-Harabasz Index)
600
0.0052 -0.015 0.022 0.078 0.12 0.051 74.88877 67.67568 107.50845 151.58804 172.82532 164.96293
10
10
0.25
500
0.079 0.064 0.15 0.16 0.12 0.051 154.98439 171.47704 216.60910 221.81018 183.24690 164.96293
25
25
0.20
400
Calinski-Harabasz Index
0.2 0.2 0.19 0.16 0.11 0.051 326.61160 321.68093 298.09612 231.49757 185.54825 176.63094
50
50
0.15
min_cluster_size
min_cluster_size
Silhouette Score
0.18 0.18 0.17 0.14 0.09 0.076 344.74185 340.34112 319.81102 254.12177 257.08531 258.66441 300
100
100
0.10
0.032 0.031 0.029 0.25 0.15 0.14 232.09061 231.74665 229.55442 497.52330 315.28735 292.57641
200
200
0.05 200
0.28 0.28 0.27 0.25 0.15 0.14 623.99448 619.78611 589.03363 497.52330 315.28735 292.57641
300
300
0.00 100
1 2 5 10 15 20 1 2 5 10 15 20
min_samples min_samples
Por otro lado, vemos que la distribución de ambas medidas en HDBSCAN es muy similar. Las
dos son altas para min cluster size=50, 100, 300 y min samples=1, 2, 5, 10, 15, 20. Esto puede ser
debido a que para los valores bajos de mı́nimo tamaño de clúster y mı́nimas muestras, el algoritmo
tiende a identificar más clústers pequeños y ruidosos que no tienen un significado real. En cambio, al
forzar que los clústers estén formados por un mı́nimo de 300 puntos, aumentan las métricas. Además,
el parámetro min samples indica el número mı́nimo de vecinos que un punto debe tener para que
se le considere núcleo. Por lo que, a pesar de obtener mejores resultados con min cluster size=300 y
min samples=1, será “más fiable” estudiar los casos con mayor min samples.
Vamos a mostrar parte del código utilizado para crear los heatmaps previos:
1
2 def v i s u a l i z e _ h d b s c a n _ c o n f i g u r a t i o n s _ s i l h o u e t t e ( conf iguratio ns ) :
3 # Convert the confi guratio ns to a DataFrame
4 df = pd . DataFrame ( config uration s )
5
6 # Create a subplot for silhouette scores
7 plt . figure ( figsize =(18 , 8) )
8 plt . subplot (1 , 2 , 1)
9 h e a t m a p _ d a t a _ s i l h o u e t t e = df . pivot_table ( index = ’ m i n _ c l u s t e r _ s i z e ’ , columns = ’
min_samples ’ , values = ’ s i l ho u e t t e _ s c o r e ’)
10 sns . heatmap ( heatmap_data_silhouette , annot = True , cmap = " YlGnBu " , cbar_kws ={ ’ label ’:
’ Silhouette Score ’ })
11 plt . title ( ’ HDBSCAN Parameter Tuning Heatmap ( Silhouette Score ) ’)
Listing 2: Extracto del código para crear un heatmap para HDBSCAN
8
1 def m u l t i p l e _ h d b s c a n _ s i l h o u e t t e ( conj_dat , min_cluster_sizes , min_samples ,
cluster_selection_methods ):
2 s i l h o u e t t e _ s c o r e s = []
3
4 for m i n _ c l u s t e r _ s i z e in m i n _ c l u s t e r _ s i z e s :
5 for min_sample in min_samples :
6 h d b s c a n _ c l u s t e r e r = hdbscan . HDBSCAN (
7 m i n _ c l u s t e r _ s i z e = min_cluster_size ,
8 min_samples = min_sample ,
9 )
10
11 c lu st er _ pr ed ic t = h d b s c a n _ c l u s t e r e r . fit_predict ( conj_dat )
12
13 # Check the number of unique clusters before calculating silhouette score
14 u ni qu e_ c lu st er s = len ( np . unique ( c l us te r_ p re di ct ) )
15 if un iq u e_ cl us t er s > 1:
16 silho uette_a vg = s i l h o u e t t e _ s c o r e ( conj_dat , cl us t er _p r ed ic t )
17 s i l h o u e t t e _ s c o r e s . append ({
18 ’ m i n _ c l u s t e r _ s i z e ’: min_cluster_size ,
19 ’ min_samples ’: min_sample ,
20 ’ s i l h o u e t t e _ s c o r e ’: silhouette_avg ,
21 ’ num_clusters ’: un iq ue _ cl us te r s
22 })
23
24 # Visualize all c onfigura tions using a heatmap
25 visualize_hdbscan_configurations_silhouette ( silhouette_scores )
26
27 return s i l h o u e t t e _ s c o r e s
Listing 3: Extracto del código para ejecutar HDBSCAN con múltiples parámetros
Ejemplo de uso:
1
2 m i n _ c l u s t e r _ s i z e s = [10 , 25 , 50 , 100 , 200 , 300]
3 min_samples = [1 , 2 , 5 , 10 , 15 , 20]
4 c l u s t e r _ s e l e c t i o n _ m e t h o d s = [ ’ eom ’]
5
6 a l l _ c o n f i g u r a t i o n s _ s i l h o u e t t e = m u l t i p l e _ h d b s c a n _ s i l h o u e t t e ( X2_norm , min_cluster_sizes
, min_samples , c l u s t e r _ s e l e c t i o n _ m e t h o d s )
Listing 4: Extracto del código para ejecutar y mostrar HDBSCAN con múltiples parámetros
9
2.3. Interpretación de la segmentación
En este apartado nos basaremos en los resultados de los algoritmos que han obtenido un coeficiente
Silhouette mayor, en nuestro caso estudiaremos K-Means.
Comenzamos viendo los distintos valores del coeficiente para los clústers formados:
K-Means (K=3)
The silhouette plot.
2
Cluster label
Podemos destacar la diferencia de tamaño entre los agrupamientos. En primer lugar, tenemos el
clúster 1 con un 46.95 % de los individuos; luego el clúster 3 con un 37 % y por último el clúster 2
con 16.05 %. Este último grupo no está muy bien formado, ya que podemos ver que algunos de sus
individuos tienen un coeficiente muy bajo, incluso negativo.
Lo siguiente que vamos a visualizar será la distancia que hay entre los distintos clústers. Para ello,
haremos uso de Multi Dimensional Scaling reduciendo ası́ las dimensiones del problema a 2. Veremos
dos gráficos, el primero solamente con los centroides de cada grupo y luego otro con todos los puntos.
1.0
0.8
Dimensión 2 (MDS)
0.6
0.4
0.2
Cluster 1
Cluster 2
Cluster 3
0.0
0.36 0.38 0.40 0.42 0.44 0.46 0.48 0.50
Dimensión 1 (MDS)
Figura 5: Distancia relativa entre centroides de clústers (radio del cı́rculo proporcional a la suma de
los pesos de los objetos en cada clúster)
10
Visualización de Clusters después de MDS
Cluster 1
1.00 Cluster 2
Cluster 3
0.75
0.50
Dimensión 2 (MDS)
0.25
0.00
0.25
0.50
0.75
Figura 6: Distancia relativa entre todos los puntos (tamaño de cada punto proporcional a su pondera-
ción)
Tal y como muestran las gráficas previas, apreciamos que a pesar de que los centroides de los
clústers 2 y 3 están a una distancia pequeña, luego vemos que el clúster 2 se mezcla con ambos grupos.
Sin embargo, es clara la separación entre los clústers 1 y 3, que son los que mayor tamaño tienen.
Para ejecutar Multi Dimensional Scaling es tan simple como indicar el número de dimensiones y
el DataFrame:
1
2 from sklearn . manifold import MDS
3 import matplotlib . pyplot as plt
4
5 # Aplicar MDS a 2 dimensiones
6 mds = MDS ( n_components =2 , random_state =123456)
7 X_mds = mds . fit_transform ( X2_norm )
8
9 # Aniadir la columna de c lu st e r_ pr ed i ct y peso al DataFrame original
10 X 2 _ w i t h _ c l u s t e r s = X2 . copy ()
11 X 2 _ w i t h _ c l u s t e r s [ ’ cluster ’] = cl us t er _p re d ic t
12 X 2 _ w i t h _ c l u s t e r s [ ’ peso ’] = datos [ ’ ponde ’]
Listing 5: Extracto del código para ejecutar MDS
11
Ahora procederemos a representar visualmente la matriz de dispersión de los resultados obtenidos
mediante el algoritmo. Esta herramienta nos permitirá derivar conclusiones al graficar, en cada celda
de la matriz, un gráfico de dispersión de cada par de las variables seleccionadas para el estudio.