문서 간의 유사도를 계산할 때는 주로 코사인 유사도를 사용합니다. 자연어 외의 데이터 간 유사도를 계산할 때는 유클리드 거리, 해밍 거리 등을 사용합니다.
유사도 계산 방법이야 구글링하면 나오지만, 유사도를 어떻게 활용할지는 항상 고민이 되더라구요. 유사도가 높다/낮다를 구분할 수 있는 명확한 기준이 있는 것도 아니고 유사도가 높다고 해서 무조건 좋은 것도 아니기 때문에 분석 목적을 잘 고려해야 합니다.
제가 유사도를 활용했던 방법은 아래와 같습니다.
유사한 콘텐츠 추천
- 사용 데이터 : 문서(자연어)
사용자가 선택한 콘텐츠와 유사한 콘텐츠를 추천하였습니다. 추천에 사용하는 매트릭스 규모를 줄이기 위해서 콘텐츠 간의 유사도 매트릭스를 구한 뒤, 각 콘텐츠와 유사도가 가장 높은 10개 콘텐츠를 따로 저장하였습니다.
콘텐츠만의 특색 파악
- 사용 데이터 : 상품 정보
사용자에게 콘텐츠를 추천해주기에 앞서 콘텐츠 간 유사도를 계산하였습니다. 유사도의 기술통계량과 히스토그램을 이용하여 유사도가 전반적으로 높은 편임을 제시하였습니다. 유사도가 높다는 판단을 기반으로 상품 정보만으로는 콘텐츠 특색을 찾기 어렵다고 생각했습니다. 최종적으로 추천시스템의 성능을 높이기 위해서는 콘텐츠 간 유사도보다는 사용자의 행동을 고려해야 한다는 결론을 내렸습니다.
전반적인 유사도 분포 확인
- 사용 데이터 : 문서(자연어)
유사도를 히트맵으로 시각화하여 유사도가 높은 영역과 낮은 영역이 골고루 존재한다는 것을 파악했습니다. 대각선을 기준으로 대각선에 가까울수록 유사도가 높고, 그렇지 않은 경우 유사도가 낮았습니다.
같은 카테고리의 인덱스가 이어져있기 때문에 같은 카테고리 내의 콘텐츠는 유사도가 높고, 카테고리가 다른 콘텐츠 간의 유사도는 낮다고 판단했습니다. 이후 카테고리별 분석을 통해 각 카테고리의 특징을 도출하고자 하였습니다.
첫 번째와 두 번째 사례는 콘텐츠 기반 필터링 추천시스템과 연결됩니다. 콘텐츠 기반 필터링에서는 사용자가 이전에 좋아했던 콘텐츠와 유사한 콘텐츠를 추천해주기 때문에 유사도를 주로 계산하는 것 같아요. 세 번째 사례는 주어진 데이터의 컬럼이 많지 않은 상황이었기 때문에 데이터의 특징(정렬 기준 등)을 고려하여 인사이트를 도출하였습니다.
텍스트마이닝, 비지도학습을 공부할 때는 항상 데이터의 특징과 분석 목적을 고려하는 것이 우선이라는 사실을 알게 되는 것 같습니다.