network

community

Descripción

La acción `community` del conjunto de acciones `network` se utiliza para detectar comunidades en un grafo. La detección de comunidades es una técnica fundamental en el análisis de redes para identificar grupos de nodos que están densamente conectados internamente y escasamente conectados con otros grupos. Esta acción implementa dos algoritmos principales: Louvain y Propagación de Etiquetas (Label Propagation), permitiendo a los analistas descubrir la estructura modular de redes complejas.

network.community { algorithm="LOUVAIN" | "LABELPROPAGATION", deterministic=TRUE | FALSE, direction="DIRECTED" | "UNDIRECTED", display={...}, distributed=TRUE | FALSE, fix="variable-name", graph=integer, indexOffset=integer, labelUpdateMode="ASYNCHRONOUS" | "SYNCHRONOUS", linkRemovalRatio=integer, links={...}, linksVar={...}, logFreqTime=integer, logLevel="AGGRESSIVE" | "BASIC" | "MODERATE" | "NONE", maxIters=integer, multiLinks=TRUE | FALSE, nodes={...}, nodesVar={...}, nThreads=integer, outCommLinks={...}, outCommunity={...}, outGraphList={...}, outLevel={...}, outLinks={...}, outNodes={...}, outOverlap={...}, outputTables={...}, recursive={...}, resolutionList={double-1, double-2, ...}, selfLinks=TRUE | FALSE, standardizedLabels=TRUE | FALSE, standardizedLabelsOut=TRUE | FALSE, tolerance=double, warmStart="variable-name" }
Parámetros
ParámetroDescripción
algorithm Especifica el algoritmo a utilizar para la detección de comunidades. 'LOUVAIN' es un método popular basado en la optimización de la modularidad. 'LABELPROPAGATION' es un algoritmo rápido que propaga etiquetas a través de la red.
deterministic Cuando se establece en True, asegura que cada ejecución (con la misma configuración de máquina y parámetros) produzca el mismo resultado final, garantizando la reproducibilidad.
direction Especifica si se debe considerar el grafo de entrada como dirigido ('DIRECTED') o no dirigido ('UNDIRECTED').
display Especifica una lista de tablas de resultados para enviar al cliente para su visualización.
distributed Cuando se establece en True, utiliza un grafo distribuido, lo que permite el procesamiento en paralelo en múltiples nodos para grafos muy grandes.
fix Especifica la variable que define grupos de nodos que deben permanecer juntos en la misma comunidad durante la detección.
graph Especifica el grafo en memoria a utilizar. Este es un identificador numérico para un grafo previamente cargado.
indexOffset Especifica el desplazamiento del índice para los identificadores en el log y las tablas de resultados. Por defecto es 0.
labelUpdateMode Especifica si los nodos actualizan sus etiquetas según las etiquetas de sus vecinos en la iteración actual ('ASYNCHRONOUS') o en la iteración anterior ('SYNCHRONOUS').
linkRemovalRatio Especifica el porcentaje de enlaces de bajo peso que se eliminarán alrededor de la vecindad de cada nodo para acelerar el cálculo.
links Especifica la tabla de datos de entrada que contiene la información de los enlaces del grafo.
linksVar Especifica los nombres de las variables de datos para la tabla de enlaces.
logFreqTime Controla la frecuencia (en segundos) para mostrar los logs de iteración para algoritmos computacionalmente intensivos.
logLevel Controla la cantidad de información que se muestra en el log de SAS (NONE, BASIC, MODERATE, AGGRESSIVE).
maxIters Especifica el número máximo de iteraciones que el algoritmo puede ejecutar.
multiLinks Cuando se establece en True, incluye múltiples enlaces entre los mismos dos nodos si existen en el grafo de entrada.
nodes Especifica la tabla de datos de entrada que contiene la información de los nodos del grafo.
nodesVar Especifica los nombres de las variables de datos para la tabla de nodos.
nThreads Especifica el número máximo de hilos a utilizar para el procesamiento multihilo.
outCommLinks Especifica la tabla de datos de salida para describir los enlaces entre cada comunidad.
outCommunity Especifica la tabla de datos de salida que contendrá las propiedades de cada comunidad (por ejemplo, número de nodos, densidad).
outGraphList Especifica la tabla de datos de salida que contendrá información de resumen sobre los grafos en memoria.
outLevel Especifica la tabla de datos de salida que contendrá la información de la comunidad en diferentes niveles de resolución.
outLinks Especifica la tabla de datos de salida que contendrá la información de los enlaces del grafo junto con los resultados de los algoritmos.
outNodes Especifica la tabla de datos de salida que contendrá la información de los nodos del grafo junto con los resultados de los algoritmos.
outOverlap Especifica la tabla de datos de salida para describir la intensidad de la pertenencia de cada nodo a múltiples comunidades.
outputTables Lista los nombres de las tablas de resultados para guardar como tablas CAS en el servidor.
recursive Descompone las comunidades grandes en otras más pequeñas hasta que se cumplan las condiciones especificadas (maxCommSize, maxDiameter).
resolutionList Especifica una lista de valores de resolución para el algoritmo de Louvain, lo que permite la detección de comunidades a diferentes escalas.
selfLinks Cuando se establece en True, incluye los auto-enlaces (un enlace de un nodo a sí mismo) al leer un grafo de entrada.
standardizedLabels Cuando se establece en True, especifica que los datos del grafo de entrada están en un formato estandarizado.
standardizedLabelsOut Cuando se establece en True, solicita que los datos del grafo de salida incluyan un formato estandarizado.
tolerance Especifica el valor de tolerancia para detener las iteraciones. El algoritmo se detiene cuando la mejora de la modularidad o el cambio de etiquetas es menor que este valor.
warmStart Especifica la variable que define los identificadores de comunidad iniciales para iniciar la detección de comunidades desde un estado predefinido.
Creación de Datos de Muestra

Este código crea una tabla de enlaces ('myLinks') que representa un grafo simple. Los nodos están etiquetados de 'A' a 'L', y los pesos de los enlaces indican la fuerza de la conexión entre ellos.

¡Copiado!
1DATA mycas.myLinks;
2 INFILE DATALINES delimiter=',';
3 INPUT from $ to $ weight;
4 DATALINES;
5A,B,1
6A,C,1
7A,D,1
8B,C,1
9B,D,1
10C,D,1
11E,F,1
12E,G,1
13F,G,1
14H,I,1
15H,J,1
16H,K,1
17H,L,1
18I,J,1
19I,K,1
20I,L,1
21J,K,1
22J,L,1
23K,L,1
24A,H,0.1
25;
26RUN;

Ejemplos

Este ejemplo ejecuta la detección de comunidades en el grafo definido en 'mycas.myLinks' utilizando el algoritmo de Louvain. Los resultados, que asignan cada nodo a una comunidad, se guardan en la tabla 'mycas.myNodesOut'.

Código SAS® / CAS Código en espera de validación por la comunidad
¡Copiado!
1PROC CAS;
2 LOADACTIONSET 'network';
3 ACTION network.community /
4 links={name='myLinks'}
5 outNodes={name='myNodesOut', replace=true};
6RUN;
7QUIT;
Resultado :
Una tabla 'mycas.myNodesOut' que contiene los nodos del grafo y una nueva columna 'community' que indica el ID de la comunidad a la que pertenece cada nodo. Se espera que los nodos A-D y H-L formen comunidades distintas.

Este ejemplo utiliza el algoritmo de propagación de etiquetas ('LABELPROPAGATION') y explora diferentes granularidades de comunidad especificando una lista de resoluciones. Las tablas de salida 'mycas.myCommLinks' y 'mycas.myComm' describen los enlaces entre comunidades y las propiedades de cada comunidad, respectivamente.

Código SAS® / CAS Código en espera de validación por la comunidad
¡Copiado!
1PROC CAS;
2 LOADACTIONSET 'network';
3 ACTION network.community /
4 links={name='myLinks'}
5 algorithm='LABELPROPAGATION'
6 resolutionList={0.5, 1.0, 1.5}
7 outNodes={name='myNodesOut_lp', replace=true}
8 outCommLinks={name='myCommLinks', replace=true}
9 outCommunity={name='myComm', replace=true}
10 outLevel={name='myLevel', replace=true};
11RUN;
12QUIT;
Resultado :
Se generan múltiples tablas de salida. 'myNodesOut_lp' contiene las asignaciones de comunidad para cada nodo. 'myCommLinks' muestra los enlaces agregados entre las comunidades detectadas. 'myComm' proporciona estadísticas para cada comunidad (número de nodos, densidad, etc.). 'myLevel' muestra los resultados para cada nivel de resolución especificado, permitiendo un análisis multinivel de la estructura de la comunidad.

FAQ

¿Cuál es el propósito de la acción `community` en el conjunto de acciones `network`?
¿Qué algoritmos de detección de comunidades soporta la acción `community`?
¿Cómo se puede especificar si el grafo es dirigido o no dirigido?
¿Qué hace el parámetro `resolutionList`?
¿Es posible ejecutar la detección de comunidades de forma distribuida?
¿Cuáles son las tablas de salida principales que genera la acción `community`?

Escenarios asociados

Caso de uso
Detección de Anillos de Lavado de Dinero (AML)

Una institución financiera necesita identificar grupos de cuentas sospechosas que realizan transferencias cíclicas entre sí para ocultar el origen de los fondos. El objetivo es ...

Caso de uso
Segmentación Masiva de Redes Sociales (Prueba de Rendimiento)

Un equipo de marketing digital desea segmentar millones de usuarios de una red social basándose en sus interacciones para campañas dirigidas. Se requiere probar la capacidad de ...

Caso de uso
Optimización de Infraestructura de Red (Análisis Multi-Resolución)

Una empresa de telecomunicaciones analiza la topología de su red de fibra óptica. Necesitan identificar clústeres locales (barrios) y regionales (ciudades) simultáneamente para ...