본문 바로가기

카테고리 없음

추천시스템

1. 컨텐츠 기반 필터링(Contents-based Filtering)

 

아이템에 대한 프로필 데이터를 이용해 과거에 사용자가 좋아했던 아이템과 비슷한 유형의 아이템을 추천하는 시스템을 컨텐츠 기반 필터링이라고 합니다. 핵심은 사용자가 이전에 높은 평점을 주었던(좋았다고 평가했던) 아이템 A와 유사한 아이템 A'를 찾는 것이죠. 물론 이 아이템 A'는 사용자가 과거에 경험하지 않았던 아이템이어야 합니다.

예를 들어, 사용자가 영화 캡틴마블을 재밌게 보았다면 캡틴 마블에 대한 설명을 바탕으로 성격이 유사한 영화 블랙 위도우를 추천하는 것이죠.

 

 

 

2. 컨텐츠 기반 필터링의 분석 절차

 

1. 이미지, 음성, 태그, 상품 설명서, 리뷰 등과 같은 아이템의 설명으로부터 아이템의 특징을 추출합니다.

  • 이때 아이템의 설명을 알고리즘(모델)이 이해할 수 있는 형태인 벡터로 변환합니다.

2. 알고리즘을 이용하여 과거에 좋게 평가했던 아이템 A와 유사한 아이템들을 선별합니다.

  • 만약 군집화 알고리즘 이용한다면, 아이템들을 몇 종류의 군집으로 나눈 후 아이템 A와 동일한 군집에 있는 아이템 A', B, C, D를 추천할 아이템 후보로 선정하는 것이죠.
  • 여기서 아이템 사이의 유사성을 무엇으로 파악하고(어떤 특징을 사용할 것인지), 어떻게 계산할지가 컨텐츠 기반 필터링의 핵심이라고 할 수 있습니다.

3. (사용할 수 있는 데이터에 평점이 있는 경우) 추천할 아이템 후보 중에서도 평점이 높을 것으로 예상되는 일부 아이템 A'과 B를 우선적으로 추천합니다.

 

 

3. 컨텐츠 기반 필터링의 장단점

3.1.  

3.2. 장점

  • 다른 사용자들의 데이터가 없어도 추천이 가능
    • 추천을 제공받는 사용자의 컨텐츠 이용내역만 있으면 됩니다.
  • 새로 추가된 아이템, 평점이 없는 유명하지 않은 아이템도 추천이 가능
    • 아이템의 설명만 있다면 다양한 아이템이 후보군이 될 수 있습니다.
  • 추천을 하는 근거를 설명할 수 있음
    • 아이템의 설명(feature)을 이용해 아이템간의 유사성을 계산하기 때문에 어떤 특징이 유사성의 근거가 되는지 파악할 수 있습니다.

 

3.3. 단점

  • 아이템의 설명을 구성하는 과정에서 주관성이 개입될 수 있음
    • 사용자 A는 영화 X를 흥미진진하다, 박진감 넘친다고 평가할 수 있지만, 반대로 사용자 B는 동일한 영화를 두고 폭력적이라고 평가할 수 있습니다.
  • 사용자가 과거에 좋아했던 아이템을 제공하지 않으면 추천이 어려움
    • 때문에 몇몇 동영상서비스 플랫폼에서는 사용자가 서비스를 이용하기 전, 이전에 보았던 영상에 대한 평가를 받습니다.
    • 이 과정이 어렵다면 사용자의 단순 프로필(성별, 나이, 지역 등)을 이용하여 비차별적인 매스마케팅식으로 아이템을 제공하고, 이후에 사용이력이 쌓이면 그때부터 개인화 추천을 시도할 수도 있습니다.
  • 아이템 속성 정보 간의 연관성을 바탕으로 하기 때문에 사용자가 이미 알고 있거나, 알고 있는 것과 유사한 아이템만을 주로 추천하는 문제점
    • 지나치게 특정된 아이템들 만을 추천하여 사용자의 다양한 취향을 반영할 수 없습니다.
    • 필터 버블(Filter bubble): 개인화 추천으로 생긴 정보편식 현상으로, 사용자가 제한된 주제와 관점을 가진 정보만을 접하게 되는 것을 말합니다. 필터링된 정보만을 취득하여 다양한 생각들을 알 수 없게 되고 스스로 가치판단을 할 수 없게 된다는 문제가 있습니다.

 

 

4. 유사 컨텐츠를 찾는 방법

 

앞서 컨텐츠 기반 필터링의 분석 절차에서 유사성을 무엇으로 파악하고 어떻게 계산하는지가 핵심이라고 짚었는데요,  다양한 아이템들 사이에서 유사한 아이템을 찾기 위해 벡터간 유사도 계산을 이용할 수 있습니다.

출처: https://intellifysolutions.com/blog/similarity-distance-measures-2/

  • 코사인 유사도(Cosine Similarity): 두 점 사이의 각도를 측정한 지표로, 값이 작으면 두 데이터가 가까이 있다 = 유사하다는 의미입니다.
  • 유클리드 거리(Euclidean Distance): 두 점 사이의 거리를 측정한 지표로, 값이 작으면 두 데이터가 가까이 있다 = 유사하다는 의미입니다.
  • 맨하탄 거리(Manhattan Distance): 두 점 사이의 거리를 측정하되, 수평-수직으로만 이동하는 거리를 구합니다.

2. 협업필터링(Collaborative Filtering)

 

 '특정 상품에 대한 선호도가 유사한 고객들은 다른 상품에 대해서도 선호도가 비슷할 것이다’ 라는 가정하에 사용자의 아이템 평가 데이터를 이용해 비슷한 선호도를 갖는 다른 사용자가 선택한 아이템을 추천하는 방식을 협업 필터링이라고 합니다.

예를 들어 영화 겨울왕국1에 대한 평가가 유사한 두 사람에게, 어느 한쪽이 아직 시청하지 않았지만 다른 사림이 좋은 평가를 내린 영화 겨울왕국2를 추천하는 식입니다. 

 

협업 필터링은 잠재적인 고객 선호도를 추정하여 다양한 상품을 추천할 수 있게 합니다. 사용자가 본인도 몰랐던 새로운 취향을 발견할 수 있겠죠. 하지만 사용자나 아이템의 특징을 사용하지 않기 때문에 사용자와 아이템의 interaction 데이터가 충분히 갖춰져야 시도할 수 있습니다. 새로운 상품이나 고객이 추가되면 관련 정보가 없기 때문에 추천이 불가능한 cold-start 문제도 갖고 있고, 고객 수나 아이템 수가 너무 많으면 아이템을 구매한 고객 비율이 매우 적어져 추정된 선호도가 정확하지 않을 수도 있다는 단점도 있습니다.

 

 

2. 이웃기반 협업필터링(Neighbor based Collaborative Filtering)

 

이웃기반 협업필터링은 사용자가 아이템에 대하여 남긴 평점 데이터를 이용하여 아직 평점을 남기지 않은 아이템들에 대해 예측을 수행하고, 예측 평점이 높은 N개의 아이템을 추천하는 방식입니다. 평점 데이터는 아래 그림과 같이 행은 사용자 인덱스, 열은 아이템 인덱스를 갖는 행렬로 구성할 수 있겠습니다. 사용자가 과거에 경험한 아이템에 대해 평가를 하고, 경험하지 않은 아이템은 빈 값으로 두는 것이죠. 이 빈 값을 채워서 예상 평점을 높게 받은 아이템을 추천합니다. 몇 개의 아이템을 추천할지는 추천 시스템을 적용할 플랫폼의 환경을 고려하여 결정하거나 혹은 비즈니스 관점에서 결정할 수 있겠죠.

 

이웃기반 협업필터링은 어떤 것끼리 유사도를 계산할 것인가?를 기준으로 사용자 기반(User-based) 협업필터링 아이템 기반(Item-based) 협업필터링으로 나눌 수 있습니다.

 

2.1. (A) 사용자 기반 협업 필터링(User-based Collaborative Filtering)

사용자 기반 협업 필터링은 우선 사용자간 유사도를 계산합니다. 사용자간 유사도를 추정해보니 사용자 B와 사용자 D가 유사한 사용자로 판명이 났어요. 그럼 사용자 B가 사용했지만 사용자 D는 사용하지 않은 아이템 7번을 사용자 D에게 추천해주는 것입니다.

 

2.2. (B) 아이템 기반 협업 필터링(Item-based Collaborative Filtering)

아이템 기반 협업 필터링은 아이템간 유사도를 계산합니다. 아이템간 유사도를 추정해보니 아이템 2번과 아이템 4번이 유사하다고 나타난 거죠. 그럼 아직 아이템 4번을 사용하지 않은 사용자 E에게 아이템 4번을 추천해주는 것입니다.

 

 

3. 사용자 기반 협업 필터링 계산 예시

 

  아이템 1번 아이템 2번 아이템 3번 아이템 4번 아이템 5번
사용자 A 5 4 4 3  
사용자 B 1 0 1   4
사용자 C 4 4   5 3
사용자 D   2 1 4 3
사용자 E 4   4 4 2
사용자 F 4 2 3   1

사용자가 아이템에 대해 평가한 데이터가 위와 같이 주어져 있다고 하겠습니다. 사용자 A ~ F가 아이템 1번 ~ 5번에 대해 0점에서 5점 사이의 점수를 주었습니다. 평가하지 않은 아이템은 빈 값으로 두었구요.

먼저, 사용자간 유사도를 계산합니다. 예를 들어 사용자 B와 사용자 D가 얼마나 유사한지를 코사인 유사도를 사용하여 계산하면 아래와 같이 계산이 되겠죠.

사용자 B와 사용자 D가 함께 평가한 아이템 2번, 3번 그리고 5번의 평점만을 이용하여 유사도를 계산한 결과, 0.84로 매우 유사하다고 나타났습니다. 이렇게 모든 사용자들끼리의 유사도를 계산하여 사용자 유사도 행렬을 완성합니다.

 

  사용자 A 사용자 B 사용자 C 사용자 D 사용자 E 사용자 F
사용자 A 1.00 0.84 0.96 0.82 0.98 0.98
사용자 B 0.84 1.00 0.61 0.84 0.63 0.47
사용자 C 0.96 0.61 1.00 0.97 0.99 0.92
사용자 D 0.82 0.84 0.97 1.00 0.85 0.71
사용자 E 0.98 0.63 0.99 0.85 1.00 0.98
사용자 F 0.98 0.47 0.92 0.71 0.98 1.00

전체 사용자 간의 유사도를 계산하면 위와 같이 사용자 유사도 행렬을 얻을 수 있습니다. 자기 자신과의 유사도는 1.0이고, 행과 열의 인덱스가 동일하기 때문에 대각원소를 기준으로 대칭인 것을 확인할 수 있습니다.

이제 이 사용자 유사도 행렬을 바탕으로 사용자 B가 아이템 4번에 내릴 평점을 예측해보겠습니다. 점수를 예측하는 방식에도 여러 방법이 있는데, 여기서는 모든 사용자의 점수를 이용해 가중합을 구하는 방식으로 계산해보겠습니다. 아이템 4번에 평가를 내렸던 사용자 A, C, D, E의 평점과 사용자 B와 A, C, D, E의 유사도를 이용하여 가중합을 구하면 아래와 같습니다. 사용자 F는 아이템 4번에 평가하지 않았기 때문에 계산에 이용하지 않습니다.

사용자 B는 아이템 4번에 대해서 3.92점을 줄 것으로 예측되었습니다. 5점이 최고점인 것을 생각하면 나름 높은 점수를 줄 것으로 예상한 거죠. 

이런 방식으로 사용자-아이템 평가 행렬을 채우고, 높은 점수를 받은 아이템들을 선별하여 사용자에게 추천합니다. 높은 점수를 받은 아이템 중 사용자가 이미 경험했던 아이템은 제외하고 추천할 아이템을 줄세우기하여 사용자에게 제공하면 추천 시스템이 완성됩니다.