Jaccard vs Cosine Similarity: Entendendo as Diferenças na Análise de Grafos
Introdução
Durante o curso de Análise de Grafos da Neo4J, me deparei com um conceito fundamental para quem trabalha com dados: as métricas de similaridade. Mais especificamente, aprendi sobre duas abordagens amplamente utilizadas — a Similaridade de Jaccard e a Similaridade de Cosseno — e como cada uma se comporta de forma distinta dependendo do tipo de dado e do objetivo da análise.
Neste artigo, estarei compartilhando um pouco do que aprendi, comparando essas duas métricas com exemplos práticos e quando escolher uma ou outra.
O que é similaridade?
Antes de mergulhar nas diferenças, vale entender o conceito base: similaridade é uma medida que indica o quão parecidos dois objetos são entre si. Em grafos, ela é usada para conectar nós com características em comum.
Ambas as métricas retornam valores entre 0 e 1, onde:
0Significa nenhuma similaridade.1Significa similaridade perfeita (ou idênticos).
Similaridade de Jaccard
A Similaridade de Jaccard foi proposta originalmente para comparar conjuntos. Ela funciona dividindo a interseção dos dois conjuntos pela união deles.
Fórmula
J = A11 / (A01 + A10 + A11)
Onde:
- A11 = número de atributos binários em que ambos os vetores têm valor 1
- A01 = primeiro vetor tem valor 0 e o segundo tem valor 1
- A10 = primeiro vetor tem valor 1 e o segundo tem valor 0
Como funciona na prática?
Imagine dois documentos com as seguintes palavras-chave após o pré-processamento:
- Documento A:
{sistema, informação, web, komputer} - Documento B:
{media, aprendizagem, web, berbasis}
A interseção é {web} (1 elemento) e a união é {sistema, informação, web, komputer, media, aprendizagem, berbasis} (7 elementos).
J(A, B) = 1 / 7 ≈ 0.14
Características do Jaccard
✅ Ideal para dados binários (presença ou ausência de atributos)
✅ Muito usado em sistemas de recomendação e detecção de duplicatas
✅ Simples e intuitivo de interpretar
⚠️ Não considera a frequência dos termos, apenas sua existência
⚠️ Tende a retornar valores menores que o Cosine para textos curtos
Similaridade de Cosseno
A Similaridade de Cosseno mede o ângulo entre dois vetores em um espaço multidimensional. Quanto menor o ângulo, mais similares são os vetores. Se o ângulo for zero, a similaridade é 1.
Fórmula
sim(xa, xb) = cos(θ) = (xa · xb) / (||xa|| × ||xb||)
Em termos práticos:
Similarity = Σ(xa_i × xb_i) / (√Σ(xa_i²) × √Σ(xb_i²))
Como funciona na prática?
Usando os mesmos documentos do exemplo anterior, representados como vetores TF (Term Frequency):
- Documento 1:
[1, 1, 1, 1, 1, 1](6 termos únicos) - Documento 2:
[1, 1, 1, 1, 1, 1](6 termos únicos com 1 em comum
Similarity(1, 2) = (1.0+1.0+1.0+1.0+1.1+1.1+0.1+0.1+0.1+0.1) /
(√1²+1²+1²+1²+1²+1² × √1²+1²+1²+1²+1²+1²) ≈ 0.33
Características do Cosine
✅ Ideal para vetores densos e textos de comprimentos variados
✅ Independente do tamanho do vetor — foca na direção, não na magnitude
✅ Muito utilizado em NLP, busca semântica e recomendação de conteúdo
✅ Lida bem com altas dimensionalidades (espaços vetoriais grandes)
⚠️ Pode ser sensível à qualidade do pré-processamento dos textos
Comparação Direta: Jaccard × Cosine
A Similaridade de Cosseno retornou os maiores valores de proximidade em todos os casos, tornando-se a métrica mais sensível para identificar documentos.
E a Combinação das Duas?
O estudo também testou uma métrica combinada, calculando a média aritmética entre os valores de Jaccard e Cosine:
Combined = (Cosine + Jaccard) / 2
Embora o valor combinado seja superior ao Jaccard isolado, ele não supera o Cosine puro. Portanto, para aplicações de agrupamento de textos, o Cosine isolado apresenta melhor desempenho.
Aplicação em Grafos com Neo4J
No curso de Análise de Grafos da Neo4J, essas métricas ganham uma nova dimensão. O Neo4J possui funções nativas na biblioteca Graph Data Science (GDS) para calcular similaridade diretamente entre nós de um grafo.
Exemplo com Jaccard no Neo4J (Cypher)
cypher
MATCH (p1:Produto)-[:TEM_TAG]->(t:Tag)<-[:TEM_TAG]-(p2:Produto)
WHERE p1 <> p2
WITH p1, p2, COUNT(t) AS intersecao
MATCH (p1)-[:TEM_TAG]->(tag1)
WITH p1, p2, intersecao, COUNT(tag1) AS total_p1
MATCH (p2)-[:TEM_TAG]->(tag2)
WITH p1, p2, intersecao, total_p1, COUNT(tag2) AS total_p2
RETURN p1.nome, p2.nome,
toFloat(intersecao) / (total_p1 + total_p2 - intersecao) AS jaccard
ORDER BY jaccard DESC
Exemplo com Cosine usando GDS
cypher
CALL gds.nodeSimilarity.stream('meu-grafo', {
similarityCutoff: 0.1,
topK: 5
})
YIELD node1, node2, similarity
RETURN gds.util.asNode(node1).nome AS Produto1,
gds.util.asNode(node2).nome AS Produto2,
similarity
ORDER BY similarity DESC
Na GDS, o algoritmo nodeSimilarity utiliza a Similaridade de Jaccard por padrão para comparar vizinhanças de nós — algo extremamente útil para construir grafos de recomendação!
Quando Usar Cada Uma?
Use Jaccard quando:
- Trabalhar com dados binários (tags, categorias, atributos de presença/ausência)
- Precisar comparar vizinhanças de nós em grafos (padrão no Neo4J GDS)
- Construir sistemas de recomendação baseados em itens
Use Cosine quando:
- Comparar textos ou documentos de comprimentos variados
- Trabalhar com espaços vetoriais de alta dimensão
- Aplicar busca semântica ou processar linguagem natural (NLP)
Conclusão
Compreender as diferenças entre Jaccard e Cosine Similarity é essencial para qualquer profissional que trabalhe com dados, seja em Text Mining, Machine Learning ou Análise de Grafos.
O curso de Análise de Grafos da Neo4J foi fundamental para contextualizar essas métricas no universo dos grafos, mostrando como elas podem ser aplicadas diretamente em consultas Cypher e algoritmos da Graph Data Science. Mais do que fórmulas matemáticas, aprendi a escolher a ferramenta certa para cada problema.
Se você ainda não explorou o universo de análise de grafos, recomendo fortemente os cursos gratuitos disponíveis no Neo4J GraphAcademy e o curso de Analise de Grafos aquida DIO que é Sensacional! Vale muito a pena.
Referências
- ZAHROTUN, Lisna. Comparison Jaccard Similarity, Cosine Similarity and Combined Both of the Data Clustering With Shared Nearest Neighbor Method. Computer Engineering and Applications, Vol. 5, No. 1, 2016.
- MANNING, C. D.; RAGHAVAN, P.; SCHUTZE, H. Introduction to Information Retrieval. Cambridge University Press, 2008.
- Neo4J Graph Data Science Library — https://neo4j.com/docs/graph-data-science/
- Neo4J GraphAcademy — https://graphacademy.neo4j.com/



