Algoritmo de co-ocorrência para encontrar itens similares via 2-hop.
Dado um item semente (ex: professor), encontra outros itens que compartilham usuários em comum, ponderando pela sobreposição de audiência.
Fluxo (2-hop)
- Partindo do item semente, coleta todos os usuários que interagiram (neighbors_in)
- Para cada usuário, coleta os outros itens com que interagiu (neighbors_out)
- Conta co-ocorrências: quantos usuários em comum cada item tem com o semente
- Normaliza pelo grau do item (Jaccard-like) para não favorecer itens populares demais
- Retorna top-K itens rankeados por similaridade
Parâmetros (via opts)
:top_k- número de resultados a retornar (padrão: 20):min_overlap- mínimo de usuários em comum para considerar (padrão: 1):normalize-:jaccard|:cosine|:raw(padrão::jaccard)
Exemplo
Num grafo bipartido profile → professor:
professor:silva ←── [profile:42, profile:99, profile:77]
↓ ↓ ↓
professor:costa professor:oliveira professor:costa
Co-ocorrências com professor:silva:
professor:costa → 2 usuários em comum (profile:42, profile:77)
professor:oliveira → 1 usuário em comum (profile:99)