상위 목록: 하위 목록: 작성 날짜: 읽는 데 8 분 소요

추천 시스템(Recommender System)

쇼핑몰에는 수백만 개의 상품이 있고, 동영상 서비스에는 매일 수십만 개의 영상이 올라오며, 음악 서비스에는 수천만 곡의 노래가 있습니다. 사용자가 이 모든 항목을 직접 살펴보는 것은 불가능합니다. 선택지가 사람이 처리할 수 있는 양을 넘어서면 오히려 원하는 것을 찾기 어려워지는데, 이를 정보 과부하(Information Overload)라 합니다.

추천 시스템(Recommender System)은 사용자가 관심을 가질 만한 항목을 골라 먼저 보여 주는 시스템입니다. 사용자가 무엇을 찾는지 명확히 알고 질문을 입력하는 검색(Search)과 달리, 추천은 사용자가 질문을 입력하지 않아도 과거의 행동과 맥락으로부터 원할 만한 것을 예측합니다. 검색이 “끌어오는(Pull)” 방식이라면 추천은 “밀어 주는(Push)” 방식이라 할 수 있습니다.

쇼핑몰의 “이 상품을 본 고객이 함께 본 상품”, 동영상 서비스의 홈 화면, 음악 서비스의 자동 재생 목록, 소셜 미디어의 피드는 모두 추천 시스템이 만든 결과입니다. 대형 서비스에서는 사용자가 소비하는 콘텐츠의 상당 부분이 검색이 아니라 추천을 통해 발견되므로, 추천 시스템의 품질은 곧 서비스의 매출과 체류 시간으로 이어집니다.

추천 시스템은 인공 지능이란?에서 다룬 머신러닝의 응용 분야이지만, 이미지나 텍스트처럼 입력이 정해진 데이터가 아니라 사람과 항목 사이의 상호작용을 다룬다는 점에서 고유한 문제들을 가지고 있습니다.



사용자와 아이템

추천 시스템에서 추천을 받는 대상을 사용자(User), 추천되는 대상을 아이템(Item)이라 합니다. 아이템은 상품, 영화, 노래, 뉴스 기사, 광고처럼 서비스에 따라 달라지며, 경우에 따라서는 친구 추천처럼 사용자가 다시 아이템이 되기도 합니다.

사용자가 아이템에 남긴 흔적을 상호작용(Interaction)이라 합니다. 평점을 매기거나, 클릭하거나, 구매하거나, 끝까지 시청한 기록이 모두 상호작용입니다. 추천 시스템이 학습하는 데이터의 핵심은 바로 이 상호작용 기록입니다.

상호작용은 행이 사용자이고 열이 아이템인 표로 정리할 수 있으며, 이를 사용자-아이템 행렬(User-Item Matrix)이라 합니다. 사용자가 \(m\)명, 아이템이 \(n\)개라면 크기가 \(m \times n\)인 행렬 \(R\)이 되고, \(r_{ui}\)는 사용자 \(u\)가 아이템 \(i\)에 남긴 값을 나타냅니다. 다음은 네 명의 사용자가 다섯 편의 영화에 1점부터 5점까지의 평점을 남긴 예입니다.

사용자 영화 1 영화 2 영화 3 영화 4 영화 5
사용자 A 5 3 ? 1 ?
사용자 B 4 ? ? 1 ?
사용자 C ? 1 ? 5 4
사용자 D ? ? 5 4 ?


?로 표시된 칸은 사용자가 아직 평가하지 않은 아이템입니다. 추천 시스템의 가장 기본적인 문제는 이 빈칸의 값을 예측하는 것입니다. 빈칸을 채울 수 있다면, 사용자마다 예측 값이 높은 아이템을 골라 추천하면 됩니다. 이처럼 추천을 행렬의 빈칸을 채우는 문제로 보는 관점을 행렬 완성(Matrix Completion)이라 합니다.

  • Tip : 실제 서비스에서는 빈칸을 정확히 채우는 것보다 상위 몇 개를 올바른 순서로 고르는 것이 더 중요합니다. 사용자는 수백만 개의 예측 값이 아니라 화면에 보이는 열 개 남짓한 아이템만 보기 때문입니다. 이처럼 추천을 순위 문제로 보는 관점을 Top-K 추천(Top-K Recommendation)이라 합니다.



피드백의 종류

사용자-아이템 행렬을 채우는 상호작용은 사용자가 의도를 직접 표현했는지에 따라 두 가지로 나뉩니다.

명시적 피드백(Explicit Feedback)은 사용자가 아이템에 대한 선호를 직접 밝힌 기록입니다. 별점, 좋아요와 싫어요, 리뷰가 여기에 속합니다. 선호의 방향과 강도가 분명하고, 싫어한다는 정보도 얻을 수 있습니다. 그러나 사용자가 일부러 시간을 들여야 하므로 양이 매우 적고, 평점을 남기는 사용자가 전체 사용자를 대표하지 않을 수 있습니다.

암시적 피드백(Implicit Feedback)은 사용자의 행동에서 선호를 간접적으로 추정하는 기록입니다. 클릭, 구매, 장바구니 담기, 시청 시간, 재생 횟수가 여기에 속합니다. 사용자가 서비스를 이용하기만 하면 자동으로 쌓이므로 양이 압도적으로 많습니다. 대신 클릭했다고 해서 좋아한다는 보장이 없고, 클릭하지 않은 아이템이 싫어서인지 단지 보지 못해서인지 구분할 수 없습니다.

구분 명시적 피드백 암시적 피드백
예시 별점, 좋아요, 리뷰 클릭, 구매, 시청 시간
데이터 양 적음 매우 많음
선호의 방향 긍정과 부정을 모두 표현 대부분 긍정만 관측됨
신뢰도 사용자의 의도가 분명함 행동에 잡음이 많음
수집 비용 사용자의 노력이 필요함 서비스 이용만으로 수집됨


초기의 추천 시스템 연구는 주로 별점 데이터를 다루었지만, 오늘날 대부분의 서비스는 암시적 피드백을 중심으로 추천 시스템을 만듭니다. 두 피드백은 문제의 성격이 상당히 다르므로, 이 강좌에서는 명시적 피드백으로 기본 개념을 익힌 뒤 암시적 피드백(Implicit Feedback)에서 그 차이를 따로 다룹니다.



희소성과 롱테일

사용자-아이템 행렬은 대부분의 칸이 비어 있습니다. 사용자 1,000만 명과 아이템 100만 개가 있는 서비스라면 행렬의 칸은 \(10^{13}\)개입니다. 사용자 한 명이 평균 100개의 아이템과 상호작용했다고 해도 채워진 칸은 \(10^{9}\)개로, 전체의 0.01%에 불과합니다. 이처럼 관측된 값이 극히 적은 성질을 희소성(Sparsity)이라 합니다.

희소성은 추천 시스템의 거의 모든 어려움의 출발점입니다. 두 사용자가 함께 평가한 아이템이 거의 없으므로 취향이 비슷한지 판단하기 어렵고, 상호작용이 몇 개뿐인 아이템은 어떤 사람이 좋아하는지 알기 어렵습니다. 특히 새로 가입한 사용자나 새로 등록된 아이템은 상호작용이 하나도 없으므로 추천의 근거가 전혀 없는데, 이를 콜드 스타트(Cold Start) 문제라 합니다.

상호작용은 아이템마다 고르게 퍼져 있지도 않습니다. 아이템을 인기순으로 줄 세우면 소수의 인기 아이템이 상호작용의 대부분을 차지하고, 나머지 대다수의 아이템은 각각 아주 적은 상호작용만 가집니다. 그래프로 그리면 머리 부분은 높고 꼬리 부분은 낮게 길게 늘어지는 모양이 되므로, 이 분포를 롱테일(Long Tail)이라 부릅니다.

롱테일은 추천 시스템에 두 가지 의미를 가집니다. 하나는 꼬리에 있는 아이템들이 개별적으로는 작지만 합치면 무시할 수 없는 규모라는 점입니다. 오프라인 매장은 진열 공간이 한정되어 인기 상품만 놓을 수 있지만, 온라인 서비스는 꼬리의 아이템까지 사용자에게 연결할 수 있고, 이를 가능하게 하는 것이 추천입니다. 다른 하나는 데이터가 머리에 몰려 있으므로 학습된 모델이 인기 아이템을 과도하게 추천하는 경향을 갖는다는 점입니다. 이를 인기도 편향(Popularity Bias)이라 합니다.

  • Tip : 가장 단순한 추천은 모든 사용자에게 가장 인기 있는 아이템을 보여 주는 것입니다. 개인화가 전혀 없지만 생각보다 성능이 높아서, 새로운 추천 모델을 만들면 반드시 인기 기반 추천과 먼저 비교해야 합니다. 복잡한 모델이 인기 기반 추천을 넘지 못하는 경우도 드물지 않습니다.



추천 방식의 분류

추천 시스템은 무엇을 근거로 사용자의 선호를 예측하느냐에 따라 크게 세 가지로 나뉩니다.


콘텐츠 기반 필터링(Content-based Filtering)

콘텐츠 기반 필터링(Content-based Filtering)은 아이템이 가진 속성을 근거로 추천합니다. 영화라면 장르, 감독, 배우, 줄거리가 속성이 되고, 상품이라면 카테고리, 브랜드, 가격, 상품 설명이 속성이 됩니다. 사용자가 과거에 좋아한 아이템들의 속성을 모아 취향을 만들고, 그 취향과 속성이 비슷한 아이템을 추천합니다. SF 영화를 즐겨 본 사용자에게 다른 SF 영화를 추천하는 방식입니다.


협업 필터링(Collaborative Filtering)

협업 필터링(Collaborative Filtering)은 아이템의 속성을 전혀 보지 않고, 다른 사용자들의 행동만을 근거로 추천합니다. 나와 비슷한 아이템을 좋아한 사용자들이 좋아한 다른 아이템을 추천하거나, 함께 소비되는 경향이 있는 아이템을 묶어 추천합니다. “이 상품을 구매한 고객이 함께 구매한 상품”이 대표적인 예입니다. 많은 사람의 선택이 모여 추천을 만든다는 뜻에서 “협업”이라는 이름이 붙었습니다.


하이브리드 추천(Hybrid Recommendation)

두 방식은 서로의 약점을 보완합니다. 콘텐츠 기반 필터링은 상호작용이 없는 새 아이템도 속성만 있으면 추천할 수 있지만, 속성으로 드러나지 않는 취향은 잡아내지 못합니다. 협업 필터링은 속성으로 설명할 수 없는 미묘한 취향까지 잡아내지만, 상호작용이 없는 아이템은 추천하지 못합니다. 그래서 실제 서비스는 두 방식을 결합한 하이브리드 추천(Hybrid Recommendation)을 주로 사용합니다.

오늘날의 딥러닝 기반 추천 모델은 사용자의 상호작용 기록과 아이템의 속성, 그리고 시간이나 기기 같은 맥락 정보를 하나의 모델에 함께 입력하므로, 대부분 하이브리드 추천에 속한다고 볼 수 있습니다.



추천 시스템의 발전

1992년 제록스 팔로알토 연구소(Xerox PARC)의 메일 필터링 시스템 Tapestry는 다른 사용자들이 이메일에 남긴 반응을 이용해 메일을 걸러 냈으며, 이때 협업 필터링이라는 용어가 처음 사용되었습니다. 1994년 미네소타 대학교의 GroupLens는 뉴스 그룹의 글에 대한 사용자 평점을 모아 비슷한 사용자의 평점으로 예측하는 방식을 자동화했고, 이 연구진이 이후 공개한 영화 평점 데이터 MovieLens는 지금도 추천 시스템 연구의 표준 데이터로 쓰입니다.

2003년 아마존은 사용자 대신 아이템 사이의 유사도를 미리 계산해 두는 아이템 기반 협업 필터링을 발표했습니다. 수천만 명의 고객과 수백만 개의 상품에도 실시간으로 동작하는 방식으로, 대규모 서비스에서 추천 시스템이 실용화되는 계기가 되었습니다.

2006년 넷플릭스는 자사 추천 알고리즘의 평점 예측 오차를 10% 줄이는 팀에게 100만 달러를 주는 넷플릭스 프라이즈(Netflix Prize)를 열었습니다. 약 48만 명의 사용자가 1만 7천여 편의 영화에 남긴 1억 개의 평점이 공개되었고, 3년에 걸친 경쟁 끝에 2009년 여러 팀이 연합한 BellKor’s Pragmatic Chaos가 상금을 받았습니다. 이 대회에서 크게 주목받은 것이 사용자와 아이템을 저차원 벡터로 표현하는 행렬 분해(Matrix Factorization)였으며, 이후 추천 시스템 연구의 중심이 되었습니다.

2016년 전후로는 딥러닝이 추천 시스템에 본격적으로 도입되었습니다. 구글은 앱 추천에 선형 모델과 신경망을 결합한 Wide & Deep을 발표했고, 유튜브는 수백만 개의 동영상에서 후보를 먼저 고르고 그다음 순위를 매기는 두 단계의 신경망 구조를 공개했습니다. 이후 사용자의 행동 순서를 트랜스포머로 모델링하는 순차 추천과, 대규모 언어 모델을 추천에 활용하는 연구로 이어지고 있습니다.



추천 시스템의 구조

아이템이 수백만 개라면, 사용자가 화면을 열 때마다 모든 아이템의 점수를 정교한 모델로 계산할 수는 없습니다. 그래서 대규모 추천 시스템은 보통 여러 단계의 깔때기 구조로 만들어집니다. 앞 단계일수록 많은 아이템을 빠르고 거칠게 거르고, 뒤 단계일수록 적은 아이템을 느리지만 정교하게 평가합니다.

단계 입력 → 출력 목적 대표 방법
후보 생성 수백만 → 수백~수천 관련 있을 만한 아이템을 빠르게 추림 협업 필터링, 임베딩 검색
랭킹 수백~수천 → 수십 후보 하나하나의 점수를 정밀하게 계산 클릭률 예측 모델, 신경망
재정렬 수십 → 화면에 보일 목록 다양성, 중복 제거, 정책 반영 규칙, 다양화 알고리즘


후보 생성(Candidate Generation)은 리트리벌(Retrieval)이라고도 하며, 전체 아이템 중에서 사용자와 관련 있을 만한 아이템을 빠르게 걸러 냅니다. 이 단계에서는 정확도보다 놓치지 않는 것이 중요합니다. 여기서 빠진 아이템은 뒤 단계에서 아무리 좋은 모델을 써도 살아날 수 없기 때문입니다. 사용자와 아이템을 벡터로 바꾸어 가까운 벡터를 찾는 방식이 널리 쓰이며, 이는 검색 증강 생성(Retrieval-Augmented Generation)에서 다룬 근사 최근접 이웃 검색과 같은 기술입니다.

랭킹(Ranking)은 후보로 추려진 아이템마다 사용자가 클릭하거나 구매할 확률을 정밀하게 예측하고, 그 점수로 순서를 매깁니다. 후보가 수백 개뿐이므로 사용자의 상세한 특성, 아이템의 속성, 시간과 기기 같은 맥락까지 많은 정보를 넣은 무거운 모델을 쓸 수 있습니다.

재정렬(Re-ranking)은 점수만으로 정한 순서를 최종 화면에 맞게 다듬습니다. 비슷한 아이템이 연달아 나오지 않도록 섞고, 이미 구매한 상품을 빼고, 신규 아이템이나 광고를 정해진 위치에 넣는 등 모델의 점수로 표현되지 않는 요구 사항을 반영합니다.

  • Tip : 이 구조는 검색 증강 생성에서 다룬 바이 인코더와 크로스 인코더의 관계와 같습니다. 빠르지만 거친 방법으로 후보를 추리고, 느리지만 정확한 방법으로 순서를 정한다는 원리는 검색과 추천에 공통으로 적용됩니다.



좋은 추천이란

추천의 품질을 평가하는 가장 기본적인 기준은 정확도입니다. 사용자가 실제로 클릭하거나 구매한 아이템을 얼마나 상위에 놓았는지를 측정합니다. 그러나 정확도만 높은 추천이 좋은 추천은 아닙니다.

어떤 사용자가 특정 가수의 노래를 즐겨 듣는다면, 그 가수의 노래만 계속 추천해도 정확도는 높게 나올 것입니다. 그러나 사용자는 금세 지루함을 느끼고, 이미 알고 있는 노래만 추천받는 것은 추천 시스템이 없어도 할 수 있는 일입니다. 그래서 추천 시스템은 정확도 외에도 다음과 같은 기준을 함께 고려합니다.

  • 다양성(Diversity) : 추천 목록 안의 아이템들이 서로 얼마나 다른가
  • 새로움(Novelty) : 사용자가 아직 모르는 아이템을 얼마나 보여 주는가
  • 의외성(Serendipity) : 예상하지 못했지만 만족스러운 아이템을 얼마나 발견하게 하는가
  • 커버리지(Coverage) : 전체 아이템 중 실제로 추천되는 아이템이 얼마나 되는가


이 기준들은 정확도와 서로 충돌하는 경우가 많습니다. 낯선 아이템을 섞으면 다양성과 새로움은 올라가지만 당장의 클릭률은 내려갈 수 있습니다. 반대로 인기 아이템과 익숙한 아이템만 추천하면 당장의 지표는 좋아도 사용자는 점점 좁은 범위의 아이템에 갇히게 되며, 이를 필터 버블(Filter Bubble)이라 합니다.

또한 과거 데이터로 측정하는 오프라인 평가(Offline Evaluation)의 결과가 실제 서비스에서의 성과와 일치하지 않는 경우도 많습니다. 과거 데이터에는 당시 추천 시스템이 보여 준 아이템에 대한 반응만 기록되어 있기 때문입니다. 그래서 최종 판단은 실제 사용자를 두 집단으로 나누어 비교하는 온라인 실험(Online Experiment), 흔히 A/B 테스트로 내립니다.



  • Writer by : 윤대희

댓글 남기기