디지투스에서 개발한 추천엔진의 Gurufit 적용 사례

온라인 신상신발 셀렉트샵 Gurufit 에서는 추천엔진을 사용한 화면구성으로 사용자가 관심을 보일 확률이 높은 아이템을 미리 제공하려는 노력을 합니다. 이를 통해 사용자가 관심 있는 제품을 찾기 위해 감내해야 하는 불필요한 시간낭비를 줄이고 효율성을 높이고자 합니다.

Gurufit 에서 취급하는 각각의 아이템은 다양한 태그(속성)들을 가지고 있습니다. 태그는 기본적으로 관리자가 직접 기입하는 브랜드, 카테고리, 색 등이 있고, 또 관리자가 작성하는 아이템의 제목과 내용과 같은 상세정보에서 텍스트 분석을 통해 추출해낸 태그도 있습니다. 이러한 정형, 비정형 데이터 안에 존재하는 태그들을 이용하여 추천엔진을 구성합니다.

a. 추천엔진을 위한 학습

① 태그 가중치 생성

추천엔진을 만들기 위하여 먼저 태그들의 가중치를 만듭니다. 태그간 설명력의 차이가 존재하기 때문입니다. 더 많은 정보를 담고 있다고 판단되는 태그의 가중치가 높도록 가중치를 생성합니다. 태그 가중치는 정형 데이터, 비정형 데이터로 나누어 각각 다른 방식으로 생성합니다.

먼저 비정형 데이터에서 추출된 태그들은 TF/IDF 값을 계산하여 태그 가중치로 사용합니다. 여기서 TF(Term Frequency)는 해당 아이템의 상세정보 내에서 해당 태그가 얼마나 자주 등장하는지를 의미합니다. IDF(Inverse Document Frequency)는 DF의 역수로 DF는 해당 태그가 전체 비정형 데이터 집합 내에서 얼마나 자주 등장하는지를 의미합니다. TF/IDF를 이용하면 전체 상세정보에서 흔하게 등장하는 단어는 가중치가 낮게, 특정 상세정보에서만 등장하는 단어는 가중치가 높게 생성됩니다.

g-img1
Figure 1. 사용한 TF/IDF 계산

정형 데이터의 태그는 관리자가 직접 기입하였기 때문에 중요도가 높다고 판단하여 모든 가중치를 최대로 설정합니다.

g-img2Figure 2. 태그 출처에 따른 가중치 생성법

② 태그 품질 학습
정형 데이터와 비정형 데이터에서 추출된 태그 중에는 중복된 태그들도 존재합니다. 이를 통합하기 위하여 중복된 태그가 가지고 있는 가중치들을 합으로 처리합니다. 마지막으로 각각의 태그 가중치를 해당하는 아이템의 모든 태그 가중치의 합으로 나누기를 합니다. 이는 어떤 태그가 해당 아이템 안에서 얼마만큼의 비중을 갖는지를 나타낼 수 있는 품질점수를 의미합니다.

g-img3Figure 3. 품질점수 계산공식

이로써 Gurufit 에 존재하는 모든 태그들에 대한 품질점수(가중치)가 생성됩니다. 품질점수는 각 아이템과 태그가 얼마나 연관이 있는지 나타내는 점수이기도 합니다. 따라서 품질점수는 같은 태그라도 아이템에 따라서 다른 값을 가질 수 있습니다.

③ 태그 선호도 학습
앞서 품질점수를 만들 때 아이템의 속성만을 활용했습니다. 따라서 품질점수는 사용자의 구분 없는 동일한 점수이고, 사용자 개개인의 취향은 반영되지 않은 점수입니다. 이에 태그에 대한 사용자의 선호를 고려할 수 있는 선호도 점수를 새로 생성합니다. 사용자의 선호는 로그데이터를 이용하여 정의합니다. 특정 사용자가 특정 아이템의 상세페이지에 접속하거나 관심 상품으로 등록했을 경우 그 사용자가 그 아이템을 “선호한다” 라고 정의합니다.
품질점수를 조정하여 태그 선호도 점수를 만듭니다. 지수함수를 이용하여 품질점수에 가산점을 부여합니다. 지수함수를 취함으로써 높은 품질점수는 더 높은 점수를 갖게 조정합니다. 왜냐하면 태그에 대한 선호도를 산출하는 것이고, 품질점수는 태그와 해당 아이템 간의 연관성을 나타내기 때문입니다. 이후 표준화도 진행합니다.
그 다음으로 태그 선호도에 망각곡선을 적용하여 과거에 클릭한 아이템보다 최근에 클릭한 아이템이 가진 태그가 더 높은 선호도를 가지도록 합니다.

g-img5Figure 5. 시간 가중치 계산공식

정리하면, 선호도 점수는 같은 태그라도 사용자마다 다른 값을 가지며, 더 최근에 클릭할수록 점수가 높습니다. 또 사용자가 클릭(평가)하지 않았던 태그에 대해서는 생성되지 않습니다. 이를 통해 같은 태그라도 사용자별로 다른 선호도 점수를 갖게 되며, 이러한 선호도를 통해 사용자별 다른 상품들의 추천이 가능해 집니다.

지금까지 추천엔진을 만들기 위해 태그를 기반으로 가중치를 생성했습니다. 계산된 가중치를 이용해 아이템과 태그와 아이템의 연관성을 나타내는 품질점수, 사용자의 취향이 반영된 태그 선호도를 생성했습니다. 다음으로 품질점수를 이용한 연관 추천과 태그 선호도를 이용한 개인화 추천, 총 두 가지의 추천엔진을 소개하겠습니다.

b. 추천엔진1 ( 연관 추천 )

첫번째 추천 유형은 사용자가 관심을 보였던 아이템과 유사한 아이템들을 추천하는 연관 추천입니다. 유사한 아이템이란 특정 아이템과 다른 아이템이 가지고 있는 태그를 비교하여 계산한 유사도가 높은 아이템을 의미합니다.

① 유사도 측정
각 아이템마다 가지고 있는 태그가 다르기 때문에 공통된 태그만을 이용하여 유사도를 측정합니다. 각각의 태그들을 비교하는 과정에서 앞서 구했던 품질점수를 활용합니다. 유사도를 측정하는 다양한 방법이 존재하는데 그 중 디지투스의 추천엔진은 코사인 유사도를 사용합니다. 코사인 유사도는 쉽고, 평가가 효율적이며, 다차원 공간에서도 거리를 측정할 수 있기 때문에 가장 널리 사용되는 유사도 측정법입니다. 아이템을 벡터, 태그를 차원으로 놓고 보면 다차원 공간에서 거리를 측정하기 때문에 코사인 유사도를 사용합니다.

g-img3Figure 6. 유사도 측정 도식화

코사인 유사도는 원래 -1에서 1의 범위를 갖지만, 각 태그의 품질점수는 항상 0이상이기 때문에 계산된 코사인 유사도는 0에서 1까지의 범위를 갖습니다. 코사인 유사도가 1에 가까울수록 아이템끼리 유사하다고 말할 수 있습니다.

위와 같은 방법으로 모든 아이템 간에 유사도를 측정합니다. 이후 사용자가 선택한 아이템과 유사도가 높은 순서대로 순위를 매겨 연관성 있는 아이템을 사용자에게 노출합니다.

c. 추천엔진2 ( 개인화 추천 )

두번째 추천 유형은 사용자가 관심을 가질 확률이 높은 아이템을 추천해주는 개인화 추천입니다. 개인화 추천에서는 사용자의 선호를 반영해 생성한 태그 선호도 점수로 아이템의 평점을 예측합니다.

① 선호도 점수 보정
활동이 많은 사용자가 활동이 적은 사용자와 비교했을 때 태그 선호도가 전반적으로 높습니다. 이것을 보정하기 위하여 사용자의 평균 선호도 점수를 해당 사용자의 각 선호도 점수에서 차감합니다. 그리고 정규분포를 이용한 표준화 공식을 이용해 태그 선호도의 표준화까지 진행합니다.

② 평점 예측
사용자의 선호 아이템은 아이템의 예상 평점을 계산하여 판단합니다. 평점 예측에는 SVM(Support Vector Machine) 방법의 일종인 SVR(Support Vector Regression)을 사용합니다. SVR의 Input으로 아이템 선호 여부와 아이템이 가진 태그 선호도 리스트를 입력하여 사용자별 추천 모델을 생성하고 이를 이용하여 각 아이템의 평점을 계산합니다.

사용자별 Input 데이터
Figure 7. 사용자별 Input 데이터

예상 평점은 사용자마다 각각 다르고, 모든 아이템에 대하여 매겨지게 됩니다. 새로운 아이템이 추가되었을 때도 태그 선호도를 이용하기 때문에 예상 평점을 금방 계산할 수 있습니다. 이후 매겨진 예상 평점이 높은 순서대로 순위를 매겨 사용자에게 추천합니다. 이러한 방식으로 사용자별로 각기 다른 상품을 추천하는 개인화 추천이 가능합니다.

광고

WordPress.com에서 무료 웹사이트 또는 블로그 만들기.

위로 ↑