유사상품 추천은 인터넷 사이트에서 흔히 사용되는 아주 효 과적인 방법이다. 음악스트리밍 사이트에서 베토벤 교향곡을 듣고 나면
다른 클래식 음악을 이어 들을 수 있고, 유튜브(Youtube)에서 어떤 동영상을 감상하고 나서 유사한 다른 동영상을 이어서 감상할 수 있다.
쿠팡이나 아마존(Amazon)과 같은 온라인 상거래 사이트에서 어떤 상품의 구매를 고려할 때 유사한 다른 상품들과 비교해 보는 것이 구매 결정에 도움이 된다.
유사상품을 어떻게 찾을까? 두 상품을 어떤 경우에 유사하다고 하고 어떤 경우에 유사하지 않다고 할까?
추천 시스템에서 구현하기 위해서 유사성의 정도를 수치화한다. 두 상품 A와 B가 있을 때,
유사함의 정도를 나타내는 어떤 함수 f(A,B)를 구체적으로 정함으로써 그 값이 높을 수록 상품간 유사성이 높다고 하는 것이다.
유사성 함수를 정의하고 나면 특정 상품에 대한 추천 유사상품을 찾을 때, 그 상품과 다른 상품들 간의 유사성 함수 f를 평가해 본 후,
결과가 가장 높은 상품들을 고른다.
유사성을 판단하기 위해 사용하는 정보를 크게 두 종류로 나눌 수 있다. 첫번째는 상품의 속성정보(metadata) 두번째는 상품의 이용정보이다.
속성정보의 이용
속성정보란 판매되는 상품의 속성을 말한다. 좋은서점닷컴에서 판매하는 서적의 예를 들면, 책의 저자, 출판년도, 출판사, 페이지수,
내용상의 분류기호 등이 속성정보에 해당한다. 두 서적 사이의 유사성을 책의 저자가 같은지, 출판년도가 비슷한지,
페이지 수가 비슷한지, 분류기호가 같은지 등으로 평가한다면 속성정보를 이용한 유사성 판단이 된다. 예를 들어 다음과 같은 세 서적이 있다고 생각해 보자.
| 서적1 | 서적2 | 서적3 |
|---|
| 저자 | 홍길동 | 홍길동 | 임꺽정 |
| 출판년도 | 2000 | 2010 | 2000 |
| 출판사 | 가나다 | 마바사 | 마바사 |
| 페이지수 | 100 | 1100 | 100 |
| 분류기호 | 문학 | 역사 | 문학 |
간단한 예로 한 가지 속성정보만을 바탕으로 하는 유사성 함수들을 가중평균하는 방법을 들 수 있다.
예를 들어 한 가지 속성정보만을 사용하는 함수들을 다음과 같이 생각하고,
f저자_유사성(A,B)f출판년도_유사성(A,B)f출판사_유사성(A,B)f페이지수_유사성(A,B)f분류기호_유사성(A,B)=A와 B가 동일한 저자의 책이면 1, 아니면 0=−log10A의 출판년도와 B의 출판년도 차이의 절대값=A와 B가 동일한 출판사의 책이면 1, 아니면 0=−log10A의 페이지수와 B의 페이지수 차이의 절대값=A와 B의 분류기호가 같으면 1, 아니면 0
유사성 함수를 이들의 가중평균으로 정의해 보자
f가중평균_유사성(A,B)=C1×f저자_유사성(A,B) +C2×f출판년도_유사성(A,B) +C3×f출판사_유사성(A,B) +C4×f페이지수_유사성(A,B) +C5×f분류기호_유사성(A,B)
여기서 C1, C2, …, C5 는 양의 (positive) 값을 갖는 매개변수들로 각 속성별 유사성의 중요도를 반영하여 결정한다.
가령, C1=10.0, C2=1.0, C3=1.0, C4=1.0, C5 =2.0 라고 정하고 서적1을 기준으로 유사성 함수 값을 계산해 보면 아래와 같다.
f가중평균_유사성(서적1,서적2)=C1×f저자_유사성(홍길동,홍길동) +C2×f출판년도_유사성(2000,2010) +C3×f출판사_유사성(가나다,마바사) +C4×f페이지수_유사성(100,1100) +C5×f분류기호_유사성(문학,역사)=10×1+1×(−1)+1×0+1×(−3)+2×0=10−1−3=6
f가중평균_유사성(서적1,서적3)=C1×f저자_유사성(홍길동,임꺽정) +C2×f출판년도_유사성(2000,2000) +C3×f출판사_유사성(가나다,마바사) +C4×f페이지수_유사성(100,100) +C5×f분류기호_유사성(문학,문학)=10×0+1×0+1×0+1×0+2×1=10+2=12
계산 결과에 따르면 서적1과 서적3의 유사함수 값이 서적1과 서적2의 유사함수 값보다 높다는 것을 알 수 있다.
가중평균법을 사용하기 위해서는 각 속성별 유사성 함수를 정의하고 가중평균 매개변수들(C1, C2, …, C5 )을 적절히 선택해야 한다.
피처벡터
가중평균보다 좀더 일반적인 방법은 각 상품을 피처벡터(feature vector)로 표현하는 방법이다. 피처벡터(feature vector)는
각 상품을 실수(real number)값의 벡터(vector)로 나타낸 것으로 다양한 기계학습(machine learning) 방법들의 기반이 된다.
서적1, 서적2, 서적3의 예를 들어 설명해 보자. 다섯가지 속성 가운데 저자, 출판년도와 페이지수는 숫자 정보 (numeric) 이고
저자, 출판사, 분류기호는 숫자가 아닌 (non-numeric) 정보이다. 먼저 숫자 정보만 사용하는 경우를 살펴보자.
출판년도와 페이지수 두 숫자 정보를 그대로 피처벡터로 사용하면 다음과 같다.
| 피처벡터 |
|---|
| 서적1 | (2000100) |
| 서적2 | (20101100) |
| 서적3 | (2000100) |
각 서적을 피처벡터로 표현했고 피처벡터의 차원(dimension)은 2이다. 두 벡터간의 거리(distance)를 이용해 유사성을 계산하는데,
흔히 사용되는 방법으로 내적(dot product)과 코사인(cosine) 계산법이 있다. 내적 값이 크거나 코사인 값이 클 수록 유사성이 높다고 판단한다.
내적을 사용하여 서적1을 기준으로 유사성을 계산해 보면,