📌 자카드 유사도(Jaccard Similarity)
자카드 유사도는 모두들 다 알고 있는 개념이다.
내가 만약에 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% 유사하다고 계산이 되었다. 이 계산이 맞는지 자카드 유사도를 Python 코드를 이용하여 구현해 보자.
➤ Python으로 자카드 유사도 구현
def jacaard_similarity(listA, listB):
s1 = set(listA)
s2 = set(listB)
return float(len(s1.intersection(s2)) / len(s1.union(s2)))
listA = ["삼성전자", "테슬라", "LG전자", "카카오", "펄어비스"]
listB = ["삼성전자", "카카오", "넷마블", "현대자동차", "셀트리온"]
print(jacaard_similarity(listA, listB))
위 코드를 실행하면 0.25의 자카드 유사도가 나오는 것을 확인할 수 있다.
이처럼 자카드는 공식이 매우 간단하기 때문에 그만큼 속도도 보장이 되는 공식이다. 자카드가 최고의 공식이 아니지만, 많이 쓰는 이유는 현업에서 다른 공식들은 속도 이슈로 인해서 쓰지 못할 경우가 많기 때문이라고 한다.