Article image
Lino Meurer
Lino Meurer03/03/2026 11:45
Compartilhe

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:

    • 0 Significa nenhuma similaridade.
    • 1 Significa 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/
    Compartilhe
    Comentários (0)