9 Modelo FANNY

Objetivos del capítulo

Al finalizar este capítulo, el lector estará en capacidad de:

  • Explicar en sus propias palabras la lógica detrás de la construcción de un clúster empleando el algoritmo FANNY.
  • Construir en R clústeres empleando el algoritmo FANNY.

9.1 Introducción

En los capítulos anteriores hemos estudiado diferentes filosofías para armar clústeres. Ya son siete métodos los que hemos estudiado:

  • Dos algoritmos jerárquicos: AGNES y DIANA
  • Tres algoritmos particionados basados en centroides: k-means, PAM y CLARA
  • Un algoritmo particionado basado en densidad: DBSCAN
  • Un algoritmo particionado basado en distribución o modelos: GMM

En este capítulo estudiaremos un método de clústering que es una combinación de filosofías: FANNY (por el termino en inglés fuzzy73 analysis).

Los modelos fuzzy de clústering son una extensión de los métodos de clústering tradicionales, que permiten que los individuos pertenezcan a múltiples grupos con diferentes grados de membrecía. A diferencia de los métodos de clústering convencionales, FANNY genera asignaciones de clúster suave (Soft Clustering) como lo hace el GMM.

Los modelos fuzzy de clústering se basan en la teoría de conjuntos difusos propuesta por Zadeh (1965), donde un elemento puede pertenecer a un conjunto con diferentes grados de pertenencia. En el contexto del clústering, esto significa que un punto de datos puede pertenecer a varios conglomerados simultáneamente, cada uno con un grado de pertenencia específico.

FANNY modifica los algoritmos basados en centroides incluyendo la posibilidad de un clústering suave. Es decir, en FANNY cada clúster se caracteriza por un centroide y cada individuo tiene un grado de pertenencia a cada clúster. En FANNY los individuos cercanos al centro de un grupo tienen un mayor grado de membrecía que aquellos en el borde de un clúster.

FANNY se emplea en una gran gama de áreas que van, desde la segmentación de imágenes en la que se agrupan píxeles con características similares, hasta las finanzas donde se emplean para agrupar activos financieros con características similares; pasando por aplicaciones tan variadas como en la medicina para agrupar pacientes con enfermedades similares y en la ingeniería para agrupar piezas o componentes con características similares.

9.2 El algoritmo FANNY

Uno de los algoritmos más comunes para el FANNY es el Fuzzy C-Means (Kaufman & Rousseeuw, 2009) al cual nos seguiremos refiriendo como FANNY. Este algoritmo asigna a cada individuo un vector de pertenencia, donde cada elemento del vector representa la membrecía del punto a un grupo específico. El objetivo de FANNY es minimizar la distancia entre los puntos y los centroides de los clústeres ponderados por las membrecías.

Como lo hecho anteriormente, veamos los pasos del algoritmo FANNY para entender cómo funciona. Para un número de clústeres previamente establecido (\(k\)), los pasos de FANNY son los siguientes:

  1. Seleccionar aleatoriamente \(k\) centroides iniciales de los clústeres y asignar a cada individuo una membresía inicial.

  2. Calcular las nuevas membrecías de los individuos basadas en la distancia a los centroides y los grados de pertenencia actuales.

  3. Calcular los nuevos centroides de los clústeres basados en las membrecías de los individuos.

  4. Repetir los pasos 2 y 3 hasta que se alcance un criterio de convergencia, como la estabilidad de los centroides o un número máximo de iteraciones.

En la siguiente sección estudiaremos cómo implementar este algoritmo en R.

9.3 Implementación de FANNY en R

FANNY se puede implementar en R empleando el paquete cluster (Maechler et al., 2022) con la función fanny() . El parámetro fundamental para implementar el algoritmo FANNY es el número de conglomerados (\(k\)). Para encontrar el número de clústeres óptimo (\(q\)) podemos emplear las estrategias discutidas en la Sección 2.4. Si queremos emplear la batería de 30 índices podemos emplear la función n_clusters() del paquete parameters (Lüdecke et al., 2020).

Como lo discutimos en el Capítulo 6, podríamos emplear las funciones n_clusters_elbow() y n_clusters_gap() si se desea solo emplear el método del codo o el índice GAP (Ver Sección 2.4 para una discusión de estos métodos), respectivamente.

Como lo hemos realizado a lo largo del libro74, empleemos la función n_clusters_silhouette() para encontrar el número óptimo de clústeres empleando la silueta promedio.

Procedamos a emplear esta “infraestructura” que nos brinda el paquete parameters para implementar FANNY en los datos que hemos venido trabajando en los capítulos anteriores. Carga el espacio de trabajo que guardaste en el Capítulo 8.

El código para encontrar el número óptimo de conglomerados empleando los datos estandarizados (datos_est), la distancia euclidiana (distance_method = “euclidean”) y FANNY (clustering_function= cluster::fanny) es:

# Fijar la semilla aleatoria
set.seed(12345)

res_FANNY_Sil <- n_clusters_silhouette(datos_est,
                            standardize = FALSE, 
                            distance_method = "euclidean",
                            clustering_function= cluster::fanny,
                            n_max = 20)

Puedes ver rápidamente que el número de clústeres óptimo en este caso es 7. La silueta promedio corresponde a 0.5159. Silueta que no es superior a la alcanzada con otros métodos ya evaluados. En el Cuadro 9.1 se reportan el número de clústeres y la silueta promedio encontrada para cada método estudiado.

Cuadro 9.1: Siluetas y número de clústeres óptimos para diferentes aproximaciones de clústering (distancia euclidiana)
Método de aglomeración Silueta promedio Número óptimo de clústeres
Enlace único 0.3758 3
Enlace completo 0.5703 2
Enlace promedio 0.5703 2
Enlace mediano 0.3022 6
Centroide 0.5703 2
Ward.D 0.5157 3
Ward.D2 0.5148 3
McQuitty 0.5703 2
k-means 0.5157 3
PAM 0.5158 3
CLARA 0.5139 3
DBSCAN -0.0906 16
GMM 0.2173 6
FANNY 0.5159 7
Fuente: cálculos propios.



Si bien en este caso FANNY no parece una buena aproximación para particionar los datos, veamos cómo se puede implementar el algoritmo para el número óptimo de clústeres encontrado.

En general, después de conocer el número óptimo de clústeres, podemos aplicar el respectivo algoritmo para continuar con nuestro análisis similar a lo que presentamos en las Secciones 4.7 y 5.4.3. Es importante recordar que esto solo se haría si esta aproximación fuese la mejor forma de particionar los datos.

Para implementar el algoritmo FANNY, la función que usaremos es fanny() del paquete cluster (Maechler et al., 2022). Esta función requiere en su forma más simple, un objeto de clase data.frame con los datos (x), el número de clústeres que queremos formar (k) y la medida de distancia (metric). Es decir, el código será:

# Fijar la semilla aleatoria
set.seed(12345)
# calculamos los clústeres para k = 7
cluster_FANNY <- fanny(x = datos_est, k = 7, 
                     stand = FALSE, metric = "euclidean")
# Mirar todos los comportamientos del objeto creado
attributes(cluster_FANNY)
## $names
##  [1] "membership"  "coeff"       "memb.exp"    "clustering"  "k.crisp"    
##  [6] "objective"   "convergence" "diss"        "call"        "silinfo"    
## [11] "data"       
## 
## $class
## [1] "fanny"     "partition"

El objeto que creamos (cluster_FANNY) tiene varios compartimientos (slots) entre los cuales podemos destacar clustering que contiene las membrecías de cada uno de los clientes (la que tiene la mayor probabilidad) y en el slot membership se encontrará la probabilidad de que cada individuo (fila) pertenezca a cada uno de los clústeres (columna). Por ejemplo, las membrecías de todos los clientes las podemos extraer fácilmente de la siguiente manera:

# Calcular membrecias
cluster_FANNY$clustering

9.4 Comentarios finales

En este capítulo estudiamos el modelo FANNY que es una extensión de los métodos tradicionales de clústering particionados basados en centroides. FANNY permite una representación más flexible de la estructura de los datos al permitir un clústering suave. Esto permite una mayor flexibilidad en la representación de la estructura de los datos.

FANNY también se caracteriza por tener una robustez mayor frente al ruido en los datos que los métodos basados en centroides.

Por otro lado, similar a k-means y PAM, FANNY es sensible a la inicialización de los centroides y a la elección del número de clústeres. Este método implica una mayor complejidad computacional debido a la actualización de las membrecías y los centroides en cada iteración.

Con el estudio de FANNY terminamos la introducción a los principales modelos de clústering disponibles. La lista de modelos disponibles no para allí. Existen muchos más modelos, como por ejemplo hk-means (Hierarchical k-means), HDBSCAN (Hierarchical DBSCAN), clústering de afinidad y propagación (Affinity Propagation Clustering), SOM (Self Organizing Map) y muchos más.

También existen técnicas para combinar los resultados de diferentes metodologías llamado clústering por consenso (Consensus clustering en inglés). Esta es una técnica empleada para combinar los resultados de múltiples algoritmos de agrupamiento o incluso múltiples ejecuciones del mismo algoritmo para crear una solución de agrupamiento única y más consistente.

La investigación en el campo de métodos de clústering es grande y muy dinámica. La diversidad de enfoques y algoritmos utilizados en el clústering refleja la complejidad y amplitud de este campo de estudio. No obstante, las bases para los desarrollos actuales en esta área son los modelos que hemos estudiado en este libro. Esperamos que este libro te permita iniciar en el estudio de esta área y empezar a llenar tu caja de herramientas para realizar esta tarea del Business Analytics. Y recuerda, “en el mundo del Business Analytics la imaginación es el límite”.



Referencias

Kaufman, L., & Rousseeuw, P. J. (2009). Finding groups in data: An introduction to cluster analysis (Vol. 344). John Wiley & Sons.
Lüdecke, D., Ben-Shachar, M. S., Patil, I., & Makowski, D. (2020). Extracting, computing and exploring the parameters of statistical models using R. Journal of Open Source Software, 5(53), 2445. https://doi.org/10.21105/joss.02445
Maechler, M., Rousseeuw, P., Struyf, A., Hubert, M., & Hornik, K. (2022). Cluster: Cluster analysis basics and extensions. https://CRAN.R-project.org/package=cluster
Zadeh, L. A. (1965). Fuzzy sets. Information and Control, 8(3), 338–353. https://doi.org/https://doi.org/10.1016/S0019-9958(65)90241-X

  1. La traducción del termino fuzzy es difuso. En este contexto el término se refiere al análisis difuso o lógica difusa. La lógica difusa es un enfoque que permite manejar la incertidumbre y la imprecisión en los procesos de toma de decisiones. Se basa en el concepto de que las cosas pueden ser verdaderas solo en cierto grado, en lugar de simplemente verdaderas o falsas. Este enfoque ha encontrado aplicaciones en campos como la inteligencia artificial, el control de sistemas y la toma de decisiones en situaciones complejas donde la precisión absoluta puede ser difícil de lograr. Y más recientemente en los modelos de inteligencia artificial generativa como los Large Lenguage Models (LLM) detrás de herramientas como ChatGPT. Esta idea fue inicialmente propuesta por Zadeh (1965).↩︎

  2. La excepción son los algoritmos DBSCAN y GMM en los cuáles no es necesario fijar \(k\).↩︎