Enunciado
Dadas as trajetórias de check-in de usuários do Foursquare em Nova York, decida quais pares de usuários são amigos. Não existe rótulo de amizade no treino. O sinal vem só de onde, quando e em que tipo de lugar cada pessoa esteve.
O repositório replica Aspect-oriented unsupervised social link inference on user trajectory data (Byun, Choi e Kim, Information Sciences, vol. 626, 2023) em cerca de 2.400 linhas de Python, divididas em 8 módulos.
Entrada
Check-ins com usuário, POI, horário, categoria e coordenadas. O horário vira um de 168 slots semanais (dia da semana × hora), com o fuso corrigido pelo offset em minutos.
168 slots = 7 dias × 24 horas. Destacado: um slot, segunda às 19h.
Saída
Para cada par de usuários, amigo ou não. A avaliação usa os recortes NYC_20, NYC_40, NYC_60, NYC_80 e NYC_100, cada um com pares verdadeiros e falsos separados em treino, validação e teste.
Observações
- Cinco tabelas de embedding independentes, 128 dimensões cada: usuário, POI, tempo, categoria e geografia. Variantes no código:
ANES, ANES_GEO, ANES_GEO_YELP, ANES_GEO_Others e LBGC_v4.
- Cada check-in vira uma tripla aspecto-orientada, projetada no estilo TransH, TransR e TransD, a família de embeddings de grafo de conhecimento.
- A perda soma três termos: margin loss, orthogonal loss (mantém o vetor de relação ortogonal ao hiperplano) e norm loss.
- A amostragem negativa faz busca binária sobre a CDF da distribuição: O(log n) por amostra em vez de varrer tudo.
- Treino com lr 1e-4, distância L1 e 1000 iterações. t-SNE para olhar o espaço aprendido.
Arquivos da solução
replication-ANES/
├── preprocessing.py
├── ANES.py treino
├── model.py 776 linhas
├── data.py
├── loss.py margin · orthogonal · norm
├── projection.py TransH/R/D
├── graphutils.py
└── utils.py
Veredito
Accepted8 testes
- #1PyTorch, 8 módulosok
- #2embeddings 5 × 128ok
- #3projeção TransH/R/Dok
- #4margin lossok
- #5orthogonal + norm lossok
- #6negativos via CDF, O(log n)ok
- #7168 slots com fusook
- #8t-SNE do espaçook