1.1 주요 용어와 개념

여기에서는 여기에서 다루는 전통적인 추천 기법인 협업 필터링과 콘텐츠 기반 필터링을 이해하는 데 필요한 주요 용어 및 개념에 대해 살펴봅니다.

1.1.1 사용자 선호도

추천 시스템에서 특정 아이템에 대한 사용자의 선호도(Preference)는 아이템에 평점을 부여하거나 "좋아요" 또는 "싫어요" 버튼으로 투표를 통해 자신의 선호나 취향을 확실하게 표현하는 명시적인 피드백(Explicit Feedback)과 아이템을 여러 번 클릭하여 살펴보는 것과 같이 사용자가 은연중에 관심을 표현하는 묵시적인 피드백(Implicit Feedback)의 두 가지 유형이 있습니다.

  • 명시적(Explicit) 피드백
  • 암시적(Implicit) 피드백

명시적 피드백은 예를 들어 영화 평점이나 상품 구매 만족도 평가와 같은 아이템에 대한 사용자의 선호도를 직접적으로 알 수 있는 데이터입니다. 이처럼 사용자가 직접 평가하여야 하므로 보통 높은 수치는 높은 선호도를 나타내며 데이터의 품질과 수집의 난이도는 높고 데이터셋의 크기가 보통 작습니다. 암시적 피드백은 서비스에서 아이템을 클릭한 기록과 같이 시스템에서의 사용자 행위를 기록한 데이터입니다.

이러한 클릭 기록으로는 아이템에 대한 사용자의 선호나 취향을 간접적으로 알 수 있어 높은 수치가 꼭 높은 선호도를 의미하지는 않으며 사용자가 개인정보 제공에 동의만 한다면 자동으로 수집되기 때문에 데이터의 품질과 수집의 난이도는 낮으나 데이터셋의 크기는 명시적 피드백과 비교가 안 될 만큼 큽니다.

데이터가 의미하는 바도 선호도보다는 관찰 값에 대한 신뢰도를 의미합니다. 이러한 이유로 최신 추천 시스템은 명시적 피드백 데이터를 활용하여 추천하는 방향으로 발전하고 있습니다. 여기에서는 사용자가 아이템에 매긴 명시적 피드백인 평점 데이터를 주로 다룹니다. 여기에서 다루지 않는 암시적 피드백을 사용하는 추천 기법에 대한 자세한 내용은 다른 서적이나 자료를 참고하여 주세요.

1.1.2 평점 데이터

평점 데이터는 사용자가 아이템에 매긴 명시적인 피드백인 평점들의 집합입니다. 이러한 평점 데이터의 대표적인 예로 네이버나 다음과 같은 포털 사이트의 영화 평점이 있습니다. 포털 사이트의 영화 평점은 보통 기자나 평론가가 남기는 전문가 평점과 관람객이 남기는 네티즌 평점을 나뉩니다.

보통 전문가보다는 네티즌의 평점이 후한 편인데 매겨지는 평점에 따라 영화의 흥행을 좌우할 정도로 영향력이 큽니다. 반대급부로 영화의 작품성과 재미를 가늠하는 영화 평점의 신뢰도는 때때로 낮을 수도 있습니다. 이는 영화의 관람 여부와 상관없이 고의로 낮은 평점을 주는 "평점 테러"나 괴작 혹은 망작에 지나치게 높은 점수를 부여하는 "평점 낚시"와 같은 현상도 있기 때문입니다.

이와 같이 사용자의 평점 기준과 성향에 따라 어떤 사용자는 평점을 다른 이보다 더 후하게 주는 반면에 다른 사용자는 까다로운 기준을 가지고 있어 인색하게 줄 수 있습니다. 또한 사용자의 평점 기준이 동일하더라도 성향에 따라 어떤 아이템에 한해 특히 높거나 낮은 점수를 주는 경우가 있습니다. 이처럼 평점은 사용자나 아이템에 따른 고유 특성들이 두드러지게 나타나는 경우가 있습니다. 이러한 평점의 기준과 성향에 대하여는 이 정도 소개하는 선에서 마무리 짓고, 평점 성향의 차이를 조정하는 방법에 대해서는 이후에 다시 자세히 다루도록 하겠습니다.

명시적인 피드백인 사용자가 아이템들에 매긴 평점이나 아이템마다 매겨진 사용자들의 평점인 평점 데이터는 다음과 같은 속성들이 있습니다.

  • 사용자(User)
  • 아이템(Item)
  • 평점(Rating)

또한, 사용자 속성의 원소들은 다양한 사용자 특성을 포함하거나 사용자 ID 같은 단일 요소만 가지는 아주 간단한 형태의 프로필(Profile)로 정의될 수 있습니다. 마찬가지로 아이템 속성도 일련의 특성들을 가질 수 있습니다.

평점 데이터의 사용자 속성과 아이템 속성은 각각과 연관된 다양한 특성을 포함하거나, 고유 식별자로 사용되는 사용자 ID나 아이템 ID와 같은 단일 요소만 가지는 아주 간단한 형태의 프로필(Profile)로 정의될 수 있지만 평점 속성은 다음과 같은 다양한 데이터 유형을 가질 수 있습니다.

  • 등간형(Interval) 평점
  • 연속형(Continuous) 평점
  • 서수형(Ordinal) 평점
  • 이진(Binary)형 평점
  • 단항(Unary)형 평점

등간형 평점은 정수 형태의 수치형 데이터로 평점의 척도나 크기를 측정할 수 있게 동일한 간격을 부여한 값을 가집니다. 예를 들면 미네소타 대학의 Group Lens 연구 그룹에서 운영하는 영화 추천 시스템인 MovieLens(https://movielens.org)에서 사용되는 별 하나가 1점을 가지는 5성 평점(Five-Star Rating)으로 사용되는 평점은 0.5점 단위의 동일한 간격으로 낮은 선호도(0.5점) 에서 높은 선호도(5점) 중 하나의 값을 가집니다.

연속형 평점은 실수 형태의 수치형 데이터로 연속적인 값을 가집니다. 예를 들면 추천 시스템과 협업 필터링 연구를 위해 캘리포니아 대학교의 버클리 캠퍼스에서 만든 유머 추천 시스템인 Jester(http://eigentaste.berkeley.edu)에서 사용되는 평점은 -10.00에서 +10.00 사이의 어떤 값을 가집니다.

서수형 평점은 순서가 있는 명목형 데이터로 평점의 상대적 크기 비교가 가능한 값을 가집니다. 예를 들면 쇼핑 사이트의 구매 만족도 평가에서 평점은 "잘 모르겠어요", "만족해요", "아주 좋아요" 중 하나의 값을 가집니다.

이진형 평점은 긍정과 부정 중 하나의 값 만을 가지는 명목형 데이터입니다. 예를 들면 OTT(Over the Top) 서비스인 Netflix에서 "좋아요", "맘에 안 들어요" 버튼으로 동영상을 평가하는데 사용되는 평점은 긍정이나 부정 중 하나의 값을 가지지만 사용자의 선호가 긍정이나 부정이 아닌 중립의 경우 평점을 매기지 않을 때가 종종 있습니다.

단항형 평점은 이진형 평점과 달리 긍정인 하나 값 만을 가집니다. 예를 들면 소셜 미디어인 페이스북에서는 "좋아요" 버튼만으로 콘텐츠를 평가하는데 "좋아요" 버튼을 누르지 않았더라도 부정적임을 나타내지는 않습니다. 이는 평점의 특수한 경우로 사용자에게 명시적인 평점의 선택이 아닌 간접적으로 긍정에 대한 선호로 암시적 피드백입니다.

이처럼 추천에 사용되는 평점 속성은 추천 엔진이 적용된 시스템에서 어떤 사용자 선호에 대한 피드백을 사용하는지에 따라 다양한 데이터 유형을 가집니다. 여기에서는 등간형 평점과 이진형 평점 데이터를 주로 다룹니다. 여기에서 다루지 않는 양적 데이터(Quantitative Data)와 질적 데이터(Qualitative Data) 같은 데이터 유형에 대한 자세한 내용은 다른 서적이나 자료를 참고하여 주세요.

1.1.3 평점 행렬

평점 행렬(Ratings Matrix)은 평점 데이터를 다음과 같은 $m \times n$ 행렬인 사용자-아이템 평점 행렬로 나타낸 것입니다.

사용자-아이템 평점 행렬

$i_1$ $i_2$ $\cdots$ ${i_n}$
$u_1$ ${r_{11}}$ ${r_{12}}$ $\cdots$ ${r_{1n}}$
$u_2$ ${r_{21}}$ ${r_{22}}$ $\cdots$ ${r_{2n}}$
$\cdots$ $\cdots$ $\cdots$ $\cdots$ $\cdots$
${u_m}$ ${r_{m1}}$ ${r_{m2}}$ $\cdots$ ${r_{mn}}$

평점 행렬 $R = U \times I$는 $m$명(행)의 사용자 집합 $U = { u_1, u_2, \cdots, u_m } $과 $n$개(열)의 아이템 집합 $I = { i_1, i_2, \cdots, i_n }$ 그리고 사용자 $u$가 아이템 $i$에 매긴 평점 $r_{ui}$로 구성됩니다. ${I_u}$는 사용자 $u$가 평가한 아이템 집합(사용자 $u$에 해당하는 행 데이터)으로 ${r_u}$는 사용자 $u$가 평가한 아이템의 평점이며 사용자 $u$가 평가하지 않은 아이템들은 $I - {I_u}$가 됩니다. 마찬가지로 ${U_i}$는 아이템 $i$를 평가한 사용자 집합(아이템 $i$에 해당하는 열 데이터)으로 ${r_{i}}$는 아이템 $i$를 평가한 사용자의 평점으로 아이템 $i$를 평가하지 않은 사용자들은 $U - {U_i}$가 됩니다.

예를 들어 별 하나가 1점을 가지는 5성 평점(5-Star Rating)을 평점 행렬로 표현하면 다음과 같습니다.

사용자-아이템 평점 행렬 예시

$i_1$ $i_2$ $i_3$ $i_4$ $i_5$ $i_6$ $i_7$ $i_8$ $i_9$ $i_{10}$
$u_1$ 0.5 5 1 3 3.5 5 2.5
$u_2$ 3 2 3.5 2 4 4 1
$u_3$ 3.5 1 3.5 4 1 3.5
$u_4$ 3 5 0.5 3.5 3.5 4.5
$u_5$ 3 4 2.5 4

예시의 평점 행렬은 5명의 사용자가 10개의 아이템에 대하여 0.5와 5점 사이의 별 평점을 부여한 데이터를 나타내고 있습니다. 보통 평점은 모든 사용자가 모든 아이템에 대하여 평점을 부여하지는 않기 때문에 행렬 안의 값들이 대부분 "알 수 없음(Unknown)" 상태인 희소 행렬(Sparse Matrix)로 나타납니다.

1.1.4 평점 예측과 아이템 추천

평점 행렬은 때때로 선호도 행렬(Preference Matrix) 또는 효용 행렬(Utility Matrix)이라고 지칭되기도 합니다. 추천 시스템에서 사용자가 어떤 아이템으로부터 얻는 만족 수준(가치)을 나타내는 수치인 효용은 대부분의 경우 사용자의 선호도를 의미하는 평점을 통해 나타나지만 선호에 대한 유무(선호 또는 비선호)로 나타날 수도 있습니다.

다음 식은 새로운 아이템 $i$가 사용자 $u$에 얼마나 유용한지를 추정하는 효용 함수(Utility Function)인 $f$에 대한 정의를 나타낸 것입니다.

$$ \begin{flalign} f:U \times I \to S \end{flalign} $$

여기에서 $U$는 시스템에 소속되어 있는 사용자 집합, $I$는 추천 가능한 아이템 집합, $S$는 전순서 집합(Totally Ordered Set)입니다. 여기에서 $S$는 $S$에 속하는 원소의 모든 쌍이 비교 가능(Comparable)한 특정 범위 내의 음이 아닌 정수 또는 실수로 추정된 효용(사용자의 주관적인 가치인 선호)의 크기인 예측 평점입니다. 이러한 효용 함수 $f(u,i)$를 사용하면 임의의 사용자 $u$에게 사용자의 효용(Utility)을 최대화하는 아이템 ${i^*} \in I$를 추천해줄 수 있습니다.

$$ \begin{flalign} \forall u \in U,{\rm{ }}{i^*} & =\mathop {\arg \max f(u,i)}\limits_{i \in I} \ \end{flalign} $$

전통적인 추천 문제(Recommendation Problem)는 시스템에 저장되어 있는 사용자와 아이템에 대한 평점 데이터를 바탕으로 사용자가 경험하지 못한 아이템(서비스나 상품)에 대한 평점을 예측(효용의 크기를 추정)하고 예측된 평점(효용의 크기)이 높은 순으로 정렬된 상위 N개(Top-N)의 아이템을 추천(Recommendation)하기 위한 순위(Ranking) 문제입니다.

시스템에서 사용자가 어떤 아이템으로부터 얻는 만족 수준(가치)을 나타내는 수치인 효용은 사용자의 선호도를 의미하는 평점(Rating)을 통해 나타내는 것이 일반적이지만, 경우에 따라서는 선호의 유무만으로도 나타낼 수 있습니다. 여기에서 다루지 않는 경제학에서의 효용이론에 대한 자세한 내용은 다른 서적이나 자료를 참고하여 주세요.

  • 평점 예측(Rating Prediction)

아이템에 대한 사용자의 주관적인 가치를 예측하는 효용 함수(Utility Function)로 효용을 추정

  • 아이템 추천(Item Recommendation)

사용자의 효용을 최대화하는 아이템 집합을 추천

이처럼 평점 행렬을 활용한 추천은 사용자가 아직 평점을 부여하지 않은 아이템들에 대한 평점을 예측하고, 높은 예측 평점을 가진 순으로 사용자에게 아이템들을 추천해줄 수 있어야 합니다.

한글:3256 영어:791 숫자:116

추천 시스템: 워크북

Comments

Do you have a problem, want to share feedback, or discuss further ideas? Feel free to leave a comment here! Please follow Rust's code of conduct. This comment thread directly maps to a discussion on GitHub, so you can also comment there if you prefer.

Instead of authenticating the giscus application, you can also comment directly on GitHub.