$ cd ../
GraphSAGE + GAT -- link prediction desde cero — bash

user@devops:~$ cat README.md

GraphSAGE + GAT -- link prediction desde cero

# Descripción

GraphSAGE (Hamilton 2017) y GAT (Velickovic 2018) implementados desde cero en PyTorch, sin PyTorch Geometric. Parte 1: SBM 4x80 nodos, p_in=0.10, p_out=0.012, 1.732 aristas (71.9% intra), features 16d (8 senal de comunidad + 8 ruido), seed 42. Parte 2: split de aristas 70/10/20 (train 1.213 / val 173 / test 346) y muestreo negativo 1:1; el modelo solo ve el grafo residual (grado medio 7.58). Parte 3: heuristicos topologicos sobre A_train -- Common Neighbors AUC 0.5267, Adamic-Adar 0.5273, Preferential Attachment 0.5100. Parte 4: MLP de features 1.600 params (sin grafo) AUC 0.7251; GraphSAGE mean 2 capas 3.200 params, early-stop epoca 18, test AUC 0.7407 / AP 0.7196 / Hits@10 0.399. Parte 5: GAT 4 heads x 8d + 1 head x 32d, 1.664 params, atencion densa enmascarada, early-stop epoca 14, test AUC 0.7213. Parte 6: Hits@K con 80 negativos por positivo. Hallazgo: al ocultar el 30% de aristas los vecinos comunes desaparecen y CN/AA colapsan; la senal de comunidad en X ya da 0.725 al MLP y el message passing de SAGE suma +1.6 pp (+21 pp vs Adamic-Adar). GAT no supera a SAGE en este grafo pequeno y homofilo. CPU 21.2s. 7 visualizaciones.

# Características principales

$ SBM 4 comunidades x 80 nodos, 1.732 aristas, 71.9% intra-bloque, features 16d

$ Holdout de aristas 70/10/20: el encoder solo ve el grafo residual (grado 7.58)

$ Heuristicos: Common Neighbors 0.527, Adamic-Adar 0.527, Pref. Attachment 0.510

$ MLP de features (sin grafo) 1.600 params, AUC 0.725 -- la comunidad vive en X

$ GraphSAGE mean aggregator 3.200 params, AUC 0.741 / AP 0.720 / Hits@10 0.399

$ GAT multi-head (4x8 -> 1x32) 1.664 params, atencion densa enmascarada, AUC 0.721

$ Hallazgo: con 30% de aristas ocultas CN/AA caen a azar; SAGE +21 pp vs Adamic-Adar

$ 7 visualizaciones: overview, bloques, curvas, ROC/PR, t-SNE, atencion, metricas

# Galería

Terminal del proyecto
GraphSAGE + GAT -- link prediction desde cero - Terminal del proyecto
SBM 4 bloques train vs holdout
GraphSAGE + GAT -- link prediction desde cero - SBM 4 bloques train vs holdout
Adyacencia en bloques y grados
GraphSAGE + GAT -- link prediction desde cero - Adyacencia en bloques y grados
BCE y val AUC MLP/SAGE/GAT
GraphSAGE + GAT -- link prediction desde cero - BCE y val AUC MLP/SAGE/GAT
ROC y PR de 6 metodos
GraphSAGE + GAT -- link prediction desde cero - ROC y PR de 6 metodos
t-SNE embeddings SAGE vs GAT
GraphSAGE + GAT -- link prediction desde cero - t-SNE embeddings SAGE vs GAT
Atencion GAT por comunidad
GraphSAGE + GAT -- link prediction desde cero - Atencion GAT por comunidad
AUC AP Hits@10
GraphSAGE + GAT -- link prediction desde cero - AUC AP Hits@10

# Tecnologías utilizadas

Python PyTorch NumPy Pandas scikit-learn Matplotlib