자카드 유사도(Jaccard Similarity) 개념 이해 및 Python 구현

    자카드 유사도(Jaccard Similarity)니, 자카드 계수(Jaccard Coefficient)니 자카드 지수(Jaccard Index)니 사실 다 같은 말이지만 여기서는 제목을 자카드 유사도로 지정하였고, 많은 사람들이 자카드 다음에 유사도를 더 많이 검색을 하는 것 같아서 본 포스팅은 자카드 유사도로 용어를 통일하도록 한다.

     

     

    유사도(Similairy)

    유사도란 A라는 아이템과 B라는 아이템이 얼마나 유사한가를 수치로 표현한 값이다. 유사도 측정 방법에는 유클리디안 거리, 맨하튼 거리, 피어슨 상관 계수, 코사인 유사도, 자카드 유사도, 타니모토 유사도 등이 있으며 가장 보편적으로 유클리디안, 자카드, 피어슨 상관 계수, 코사인 등을 활용하고 있다.

     

    사실 자카드 유사도라는 것을 설명해야 될 것인가? 애매할 정도로 우리는 모두 자카드 유사도를 다 알고 있다. 무슨 말이냐면 우리가 만약에 A와 B라는 아이템이 얼마나 유사한지 공식을 만들어보자라고 한다면 과반수 이상이 자카드 유사도와 동일한 공식을 만들거란 이야기이다.

     

     

     

    자카드 유사도 공식

    자카드 유사도 공식

     

    위에 있는 것처럼 보다시피 공식이 너무 쉽다. 한마디로 교집합을 합집합으로 나눈 것이며, 이를 데이터를 기반으로 이해를 하기 위해서 자세한 계산은 아래의 내용을 보면 이해가 잘 될 것이다.

     

    종목 유사도 데이터 예시

    보통 문서 유사도 같은 자연어 처리 관련으로 설명을 하는데 이해를 쉽게 돕기 위해서 주식 종목이 얼마나 유사한지를 측정해보도록 한다. 아래 주식 포트폴리오는 필자와 전혀 상관이 없다.

     

    A 유저의 주식 종목

    삼성전자, 테슬라, LG전자, 카카오, 펄어비스

     

    B 유저의 주식 종목

    삼성전자, 카카오, 넷마블, 현대자동차, 셀트리온

     

    A 유저와 B 유저의 비교를 원활하게 하기 위해서, 종목의 수는 동일하게 5개로 지정하였고, A와 B는 얼마나 유사한지를 체크해보도록 하겠다.

     

     

    종목 유사도 검증

    교집합

    - 삼성전자, 카카오 = 2개

    합집합

    - A유저(5) + B유저(5) - 2개(교집합) = 8개

    자카드 유사도 계산 

    - 2 / 8 = 0.25

     

    A와 B가 25% 유사하다고 계산이 되었다. 이 계산이 맞는지 자카드 유사도를 프로그램으로 구현해본다.

     

    파이썬으로 구현한 자카드 유사도

    def jaccard_similarity(list1, list2):
        s1 = set(list1)
        s2 = set(list2)
        return float(len(s1.intersection(s2)) / len(s1.union(s2)))
    
    list1 = ["삼성전자", "테슬라", "LG전자", "카카오", "펄어비스"]
    list2 = ["삼성전자", "카카오", "넷마블", "현대자동차", "셀트리온"]
    
    print('jaccard_similarity : ', jaccard_similarity(list1, list2))

    위 코드를 실행하면 아래와 같이 동일하게 0.25가 나온 것을 확인할 수 있다.

    jaccard_similarity : 0.25

     

    이처럼 자카드는 공식이 매우 간단하기 때문에 그만큼 속도도 보장이 되는 공식이다. 자카드가 최고의 공식이 아니지만, 많이 쓰는 이유는 현업에서 다른 공식들은 속도 이슈로 인해서 쓰지 못할 경우가 많기 때문이다. 

     

    연관 포스팅

    유클리디안 거리(Euclidean Distance) 개념과 구현해보기
    맨하탄 거리(Manhattan Distance) 개념과 구현해보기
    코사인 유사도(Cosine similarity) 이해 및 Java로 구현하기
    코사인 유사도 (Cosine Similarity) 개념과 Python으로 구현

    댓글

    Designed by JB FACTORY