[Recommendation System] 영화추천

Sion Park·2022년 6월 13일
0

안녕하세요! 최근 패스트 캠퍼스에서 추천시스템 강의(The RED : 현실 데이터를 활용한 추천시스템 구현)를 듣고 있어 이에 대한 내용을 간략하게 공유하고, 스스로도 정리해보고자 이 포스트를 게시하게 되었습니다.

현재 계속 수강중이며 내용은 계속해서 추가하겠습니다!

이전의 포스트를 나누어 게시한 게시물입니다.

2. 영화 추천

강의를 들으면서 Movielens 데이터를 이용해 실습하였지만, 실습 코드 없이 어떠한 방법으로 영화추천시스템을 구축할 수 있는지에 대해 알아보겠습니다.

2.1. CBF 기반 예측

CBF 기반 예측에서는 아이템 유사도를 이용합니다.

유사도를 이용한 예측평점은 다음과 같은 식을 이용해서 얻습니다.

r^u,i=jlusim(i,j)ru,jjlusim(i,j)\hspace{50mm} \hat{r}_{u,i} = \frac{\sum_{j \in l_u}sim(i,j)\cdot r_{u,j} }{\sum_{j \in l_u}sim(i,j)}

  • ru,jr_{u,j}: 사용자 uu의 아이템 jj에 대한 평점
  • lul_u: 사용자 uu가 평가한 아이템 집합
  • sim(i,j)sim(i,j): 아이템 ii와 아이템 jj의 유사도

즉, 위 식은 사용자 uu의 아이템 jj에 대한 측정되지 않은 평점을 예측하는 식입니다. 여기서 분모에서 유사도의 합으로 나누는 이유는 유사도에 따른 가중 평균을 구하기 위함입니다.

2.1.1 Similarity

여기서 sim(i,j)sim(i,j)는 여러가지 방법으로 구해볼 수 있는데요. 예를 들면 영화 장르를 이용해 영화들 간의 유사도를 측정할 수도 있고, 다른 특성들을 이용해 구해볼 수 있습니다. 또한 측정 measure에 따라 다른 값을 가질 수 있는데, 대표적으로 코사인 유사도, Jaccard 유사도 등이 있습니다.

Jaccard 유사도의 경우,

sim(i,j)=SiSjSiSj\hspace{55mm} sim(i,j) = \frac{|S_i \cap S_j|}{|S_i \cup S_j|}

로 얻을 수 있으며, 여기서 SiS_i는 아이템 ii의 특성 집합입니다. 즉, 얼마나 같은 특성을 많이 가지고 있냐에 대한 척도입니다.

코사인 유사도의 경우
sim(i,j)=xixjxi2xj2\hspace{54mm} sim(i,j) = \frac{x_i \cdot x_j}{||x_i||_2||x_j||_2}

로 얻을 수 있으며, 여기서 xix_i는 아이템 ii의 특성입니다. 즉, 특성의 벡터 방향이 얼마나 비슷하냐 에 대한 척도입니다.

  • 최근 연구에 따르면 "코사인 유사도를 이용하는 것이 일반적으로 가장 좋다" 라는 의견도 있고, 사실 "유사도 메져에 따라 큰 차이가 없다" 라는 의견도 있기때문에 유사도 측정에 있어 큰 신경을 안쓰셔도 될 것 같습니다!

코사인 유사도를 계산할 때, xix_i 값으로 영화의 장르에 대해 포함관계를 이진값을 갖는 변수를 사용할 수도 있지만, 텍스트분석에 자주 이용되는 tf-idf(Term Frequency - Inverse Document Frequency)를 이용할 수도 있습니다. (영화가 여러 장르에 포함될 수 있기때문에 이와 같은 방법을 적용하는 것으로 보입니다.)

tf-idf란 문서모음의 한 문서에서 단어가 얼마나 중요한지를 나타내는 통계량값으로 아래와 같은 값을 가집니다.

tfidf(t,d,D)=tf(t,d)idf(t,D)\hspace{43mm} tfidf(t,d,D) = tf(t,d)\cdot idf(t,D)

여기서 t는 단어, d는 문서, D는 문서의 집합을 나타냅니다.

tf값은 방식에 따라 여러가지 값을 이용할 수 있으며 다음과 같이 계산될 수 있습니다.

  • 단순 빈도 : f(t,d)f(t,d), 문서 내에서 단어의 출현 횟수로 계산

  • 불린 빈도 : 11 if tdt\in d else 00, 출현 여부만을 고려

  • 로그 스케일 빈도 : log(f(t,d)+1)log(f(t,d) +1), 출현 빈도를 기준으로 로그스케일로 증가, 너무 높은 값을 방지

  • 증가 빈도 : 0.5 + 0.5×f(t,d)max{f(w,d):wd}\frac{0.5 \times f(t,d)}{max\{f(w,d): w\in d\}}, 최빈 단어를 기준으로 빈도값을 정해진 스케일에서 계산

idf 값은

idf(t,d,D)=logD{dD  :  td}\hspace{46mm} idf(t,d,D) = log \frac{|D|}{|\{d \in D\;:\; t\in d\}|}

로 계산되며 분모가 0이 되는 것을 방지하고자 log1+D1+{dD  :  td}log \frac{1+|D|}{1+ |\{d \in D\;:\; t\in d\}|}로 사용하기도 합니다.

즉, tf는 문서내에서 단어의 출현에 대한 계산, idf는 문서 dd에 포함된 단어 tt가 전체 문서집합에서 얼마나 적게 나타났는지(적게 나타날수록 높은 값을 갖습니다)에 대한 측정 값입니다. 따라서, 두 값을 곱한 tf-idf값은 전체 문서내에서 해당 단어의 중요도를 나타 낼 수 있습니다.

2.2. CF기반 예측

CF방법은 사용자에 대한 item rating 정보를 바탕으로 예측이 가능합니다. 하지만 item 에 대한 각 유저들의 평점(item-based), 유저들에 대한 각 item 의 평점(user-based)이라는 두가지 측면으로 계산이 가능한데요. 하나씩 살펴보겠습니다!

2.2.1. Item-based CF

우선 각 아이템의 유사도를 얻습니다. 이때 유사도는 코사인 유사도, Pearson유사도를 통해 얻을 수 있습니다. CBF와 다른 점을 꼽자면 CBF는 아이템의 고유한 특성을 통해 유사도를 측정했다면, CF에서는 아이템에 대한 유저들의 평점을 이용해 유사도를 얻습니다.

즉, 유사도 계산시 특성이 각 유저들의 평점이라는 것입니다!

r^u,i=jlusim(i,j)ru,jjlusim(i,j)\hspace{54mm} \hat{r}_{u,i} = \frac{\sum_{j \in l_u}sim(i,j)\cdot r_{u,j} }{\sum_{j \in l_u}|sim(i,j)|}

여기서 lul_{u}는 사용자 uu가 평가한 모든 아이템 집합입니다.

Item-based CF의 장점과 단점을 비교해보면

  • 장점: 아이템 간의 유사도는 converge하는 경향이 있어 데이터가 추가로 수집되더라도 유사도가 크게 바뀌지 않음. (batch 주기를 길게 설정가능)
  • 단점: 일반적으로 더 낮은 정확도

2.2.2. User-based CF

Item-based CF와 같은 테이블을 이용합니다. 다만 유사도 측정방식의 coordinate가 다른데, 각 유저들의 유사도를 얻어 예측합니다.

User-based CF에서 특이한 점은 유저들의 레이팅 방식을 반영합니다. 즉, 평균적으로 높은 평점을 주는 사용자에게는 높은 평점으로 예측하며, 낮은 평점을 주는 사용자에게는 낮은 평점으로 예측합니다.

다음과 같은 식으로 예측합니다.

r^u,i=rˉu+vUisim(i,j)(rv,irˉv)vUisim(i,j)\hspace{46mm} \hat{r}_{u,i} = \bar{r}_u + \frac{\sum_{v \in U_i}sim(i,j)\cdot (r_{v,i} - \bar{r}_v) }{\sum_{v \in U_i}|sim(i,j)|}

여기서 UiU_{i}는 아이템ii를 평가한 모든 사용자 집합입니다.

User-based CF의 장점과 단점을 비교해보면

  • 장점: 일반적으로 더 높은 정확도
  • 단점: 보통 사용자수가 아이템 수보다 많기 때문에 유사도 계산에 어려움이 있음.

2.2.3. 추가 고려사항

  • Similarity 신뢰도: Similarity 계산에 사용되는 데이터가 적은 경우, 유사도에 대한 신뢰도가 크게 떨어집니다.

  • 모든 아이템, 모든 사용자들의 유사도를 계산하기보다 Top-K 아이템이나 threshold 설정을 통해 유사도가 높은 사용자나 아이템을 선정하여 Rating을 예측할 수 있다.
    -> 유사도 행렬의 저장 비용을 줄이는 방법이라고 합니다!

  • 유사도 측정방식 선정:

    • 2005년 Spertus 의 논문에서 코사인 유사도가 가장 좋은 결과를 보여준다.
    • 2008년 Lathia의 논문에서 유사도 측정방법의 선택은 큰 영향을 주지않는다
    • 2015년 Seth의 논문에서 유사도 측정방법의 선택은 큰 영향을 주지않는다.

    위와 같이 유사도 측정에 대한 연구가 존재하였습니다. 결론적으로, "유사도 측정방법에 너무 큰 신경을 쓰지 않아도 된다"라는 말을 해주는 것 같습니다.

profile
Statistician, Data Analyst

0개의 댓글