Machine & Deep learning

[ML] 추천시스템 파헤치기 : 알고리즘 종류 및 기본 개념 정리

cherie-ssom 2025. 2. 16. 22:39

오늘은 추천시스템에 대해서 정리해보고자 한다. 

 

추천시스템이란 사용자에게 선호할만한 아이템을 자동으로 추천하는 시스템을 말한다.
그 기본적인 아이디어는 다양한 데이터 소스를 활용해 고객의 관심을 추론하는 것이다. 따라서 과거의 관심사와 성향이 미래의 선택에 대한 방향성을 제시해주고 있기 때문에, 추천 결과는 과거의 상호작용에 기반할 수 있다.

 

예를 들어, 공통된 관심사를 가진 유저에게 비슷한 아이템을 추천해 줄 수도 있고, 유저가 기존에 구매했던 비슷한 물건을 찾아 추천해 줄 수도 있다. 이는 아주 단순한 추천 알고리즘에 기초해서도 만들 수 있다. 물론 더욱 많은 데이터들을 활용해서 더 고도화된 모델들을 만들 수도 있다. 

 

어쨌든 이제부터, 간단한 알고리즘부터 다양하게 추천시스템 알고리즘들의 기본 개념들을 간략하게 정리해보고자 한다.

 

1. 추천시스템의 방법론

추천시스템의 학습에 활용될 데이터는 (1) 평점이나 구매 행동과 같은 사용자-아이템 상호작용(User-Item Interaction), (2) 텍스트로 된 프로파일 혹은 관련 키워드와 같은 사용자와 아이템에 관련한 속성 정보와 같이 두 종류의 데이터로 구성된다. 

 

이러한 큰 두 가지의 데이터를 활용한 추천시스템의 모델은 크게 3가지 갈래로 나뉠 수 있다.

 

그림 1 추천시스템의 기본 분류 (출처 : https://wikidocs.net/150826)

 

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

콘텐츠 기반 필터링의 핵심 아이디어는 유저/아이템의 속성 정보를 기반으로 추천하는 방법을 말한다. 

사용자가 과거에 좋아했던 아이템 자체의 "속성"을 분석해서 그와 유사한 아이템을 추천하는 방식이다.

개발자의 관점에선 해당 속성이 아이템에 대한 메타 데이터 즉, feature들이 된다.

 

예를 들어, "이 사람이 이 책을 좋아했으면, 비슷한 장르나 작가의 책을 추천하자"라는 원리로 작동한다. 

 

이러한 콘텐츠 기반 필터링은 구현하기 위해서 아이템들에 대한 feature를 벡터화를 진행하게 된다.

즉, 아이템에 대한 feature를 잘 추출하기 위한 TF-IDF나 Word2Vec과 같은 feature extraction 방법론이 사용된다.

이후, 이렇게 벡터화된 아이템들의 feature간의 유사도를 측정해서 사용자가 선호했던 아이템과 비슷한 아이템을 추천하는 방식이다. 

 

이때, 아이템을 비교할 유사도를 어떻게 계산할 것인가에 대한 부분도 중요하다.

 

이러한 콘텐츠 기반 필터링은 기존에 없었던 새로운 아이템이 등장했을 때도 추천이 가능하다는 장점이 있다.

즉, Cold Start에 비교적 강할 수 있다.

 

하지만, 사용자가 선호했던 아이템이 다양하지 않다면 그 성능은 저하되기 마련이다. 또한, 사용자가 이미 본 유형의 아이템만 추천하게 되어 서로 다른 카테고리에 대한 추천이 부족해지는 현상이 발생할 수도 있다. 

실제로 이런 부분은 실무에서 추천시스템을 개발할 때도 고려해야 하는 추천 다양성이라는 목표에 부합하지 않을 수도 있다.

 

1.2 협업 필터링 (Collaborative Filtering)

협업필터링은 사용자-아이템간의 상호작용에 기반한 추천을 말한다. 조금 더 자세히 말하자면 사용자가 아이템에 매긴 평점 정보나 상품 구매 이력과 같은 사용자 행동 양식(User Behavior)만을 기반으로 추천을 수행하는 것이 협업필터링이다. 

 

협업필터링의 주요 목표는 사용자-아이템 평점 매트릭스와 같은 축적된 사용자 행동 데이터를 기반으로 사용자가 아직 평가하지 않은 아이템을 예측 평가(Predicted Rating)하는 것이다. 

 

협업필터링 안에서도 메모리 기반이냐 모델 기반이냐로 나뉘고, 메모리 기반 안에서도 user-based냐 item-based냐로 나뉠 수 있다. 

 

메모리 기반 협업 필터링

 

메모리 기반 협업필터링은 실제 관측된 상호작용 데이터를 그대로 사용해서 유사도를 계산하고 추천하는 방식이다.

따라서, 사실 특별한 모델의 학습 없이도 유사도만 계산해서 바로 추천가능하다.  

 

User-based : 나와 비슷한 유저를 찾아 그들이 좋아한 아이템을 추천

 

예를 들어, "사람 A, B, C 3명이 있다고 할 때, A와 B가 비슷한 영화들을 좋아했는데, B가 본 영화 중 A가 보지 않은 영화가 있다면 그걸 A에게 추천하는 방식"이다.

 

구현을 하기 위한 단계는 다음과 같다. 

 

1. 사용자-아이템 상호작용 행렬을 만든다. (e.g. 평점, 조회 여부, 조회수 등)

2. 특정 사용자와 유사한 다른 사용자들을 찾는다.

3. 그들이 높게 평가한 아이템 중 보지 않은 것을 추천한다. 

 

여기서 사용자-아이템 상호작용 행렬이란 다음 그림을 보면 조금 더 이해가 쉽다.

그림 2 사용자-평점 행렬 (출처: medium.com/@connectwithghosh)

 

이러한 user-based의 협업필터링은 직관적이지만 사용자 수가 많아질수록 계산의 복잡도가 점점 증가하며, 한 번도 상품을 조회하거나 평점을 매긴적 없는 새로운 user가 등장하면 추천을 하기가 어려워진다. (사용자-아이템 간의 행렬을 만들 수 없음) 즉, Cold start 문제에 매우 취약하다는 점이 있다는 것이다.

 

그런데, 사실 나와 비슷한 사람 즉, 나랑 비슷한 취향이라고 하는 걸 사전적으로 정의하기가 좀 어려운 데다, 비슷한 상품을 좋아한다고 해서 그 사람들의 취향이 전부 비슷하다고 판단하기에는 어려운 경우가 많다. 그래서 사실 협업필터링 중에서도 user-based보다는 아래의 Item-based의 알고리즘을 더 많이 적용한다.

 

Item-based : 내가 좋아한 아이템과 비슷한 아이템을 추천

 

아이템 기반의 협업필터링은 사용자가 조금 반대로 사용자가 좋아했던 아이템이 있다고 하면 그 영화와 비슷한 아이템을 추천해 주는 방식이다.

 

예를 들어, "A라는 사용자가 '인셉션'이라는 영화를 좋아했다면, '인터스텔라', '매트릭스'처럼 비슷한 사용자들이 함께 좋아한 영화를 추천하는 방식"이다.

 

구현을 하기 위한 단계는 다음과 같다.

 

1. 아이템 간 유사도를 미리 계산

2. 사용자가 좋아한 아이템들과 유사한 아이템을 추천

 

모델 기반 협업 필터링

 

모델 기반 협업필터링에는 다양한 방법들이 있다. 그중에서도 대표적인 행렬 분해 기반 협업필터링이 있다.

당연 행렬 분해 방법에도 굉장히 많은 방법들이 있다.

 

그중에서도 잠재 요인 협업 필터링을 기준으로 간단하게 설명을 하고자 한다.

 

앞서 보았던 사용자-아이템 평점 행렬 데이터는 사실상 결측값이 굉장히 많이 존재하는 sparse한 행렬이다. 그러한 행렬을 이용해서 말 그대로의 '잠재 요인'을 이끌어내는 것을 말하는데, 이때 잠재 요인이 어떤 것인지는 명확히 정의할 수는 없지만 다차원의 sparse한 행렬을 저차원의 사용자-잠재 요인 행렬 & 아이템-잠재 요인 행렬의 전치 행렬로 분해를 할 수 있다. 이렇게 분해된 두행렬의 내적을 통해서 아이템에 대한 예측 평점을 생성하는 것이 행렬 분해 기법을 이용한 잠재 요인 협업 필터링이라 할 수 있다.   

 

정리하자면, 사용자-아이템 간의 상호작용 행렬을 저차원 공간 (latent space)로 분해하여, 사용자와 아이템의 잠재적인 성향 (latent factor)를 파악하고 추천하는 방식이 있다.

 

그림 3 잠재 요인 협업 필터링 https://wikidocs.net/150826

 

현재, 잠재 요인 협업필터링 방식으로 설명했지만 행렬 분해 방법은 굉장히 다양하다.

대표적으로 SVD (Singular Value Decomposition), ALS (Alternating Least Squares), BPR (Bayesian Personalized Ranking) 등의 방법이 있다. 신경망 모델을 활용한다면 Neural Collaborative Filtering (NCF)을 이용할 수도 있다.

 

알고리즘 설명 특징 장점 단점 주로 사용되는 상황
SVD
(Singular Value Decomposition)
사용자-아이템 행렬을 3개의 행렬로 분해하여 잠재 요인(latent factors) 추출 - 정확한 평점 데이터 필요
- 행렬이 희소할 경우 성능 저하
- 잠재 요인 해석 가능
- 작은 데이터셋에 강함
암묵적 피드백 처리 어려움
- 결측값 많으면 성능 저하
- 명시적 피드백(별점) 데이터가 많은 경우
- 작은 규모의 추천 시스템
ALS
(Alternating
Least Squares)
사용자와 아이템
잠재 요인을 번갈아가며 최소제곱법으로 학습
- 대규모 데이터에 적합
- 병렬 처리 가능 (Spark, Hadoop)
- 분산 시스템에서 효율적
- 명시적/암묵적 피드백 모두 가능
- 계산량 큼
- 튜닝 요소 많음
- 대규모 사용자/아이템을 가진 시스템
- Spark 기반 추천 서비스
BPR
(Bayesian
Personalized
Ranking)
아이템 간 상대적인 순위를 학습하는 방식
(A > B 처럼 비교학습)
- 암묵적 피드백
전용

- 순위 기반 추천
최적화
- 순위 예측에 강함
- 실제 클릭/조회 데이터에 적합
- 명시적 평점 데이터는 못 씀
- 훈련 시간 상대적으로 김
- 조회/구매 로그 기반의 쇼핑몰 추천
- 명시적 평점이 없을 때
NCF
(Neural
Collaborative
Filtering)
사용자/아이템 임베딩을 비선형 모델(MLP 등)에 입력해 학습 - Deep Learning
기반
- 복잡한 관계 학습 가능
  (비선형 관계 학습)
- 커스터마이징 자유로움
- 다양한 feature 조합 가능
- 훈련 시간이 길 수 있음
- 과적합 위험 존재
- 유저/아이템 정보가 다양한 경우
- 대규모 피드백 데이터가 있을 때

 

행렬 분해를 이용한 다양한 방법론에 대해서 간략하게 비교해 보자면 이 정도인 것 같다.

(혹시라도 틀린 정보가 있다면 알려주세요!)

 

추가적으로 덧붙이자면, 

사실상 이렇게 사용자-아이템 간의 행렬만을 이용하는 것이 아니라 아이템 자체의 메타데이터와 유저의 메타데이터를 함께 활용하는 방법으로는 대표적으로 lightFM, DeepFM 방법들이 있다. 

 

여기까지 다시 한번 정리해 보자면,

 

협업필터링에는 크게 메모리 기반과 모델 기반이 있으며 모두 사용자-아이템 간 상호작용 데이터를 활용한다.

메모리 기반에는 user-based, item-based로 나눌 수 있으며 단순히 유사도를 계산하는 방식이라면,

모델 기반의 경우에는 사용자-아이템 행렬을 분해하거나 모델을 학습해 추천하는 방식이다.

 

1.3 하이브리드 방식 (Hybrid)

하이브리드 방식이란 말 그대로 여러 추천 방법론을 조합하는 방식을 말한다. 각각의 방법이 가진 단점을 보완하고 장점을 살릴 수 있기 때문에 사실상 실제 서비스에스는 하이브리드 모델이 가장 많이 사용된다.

나의 경우도 실무에서는 협업필터링 방식과 cold start인 경우 다른 방식을 사용하는 하이브리드 방식을 선택했었다.

 

하이브리드 방식에도 여러 가지가 존재하는데, 각 추천시스템의 결과에 가중치를 부여하는 가중치 결합형이 될 수도 있고, 최종 추천 리스트를 다른 모델로 재정렬 하거나 필터링하는 후처리 방식도 있으며, 모델 자체를 혼합해서 사용하는 방법도, 상황에 따라 서로 다른 알고리즘을 사용하는 switching 형식의 하이브리드 알고리즘도 구현이 가능하다. 

 

예를 들어, 콘텐츠 기반 + 협업 필터링 방식을 활용해서 유저의 선호 장르 + 비슷한 유저가 좋아하는 콘텐츠를 결합해서 추천도 할 수 있다.

 

이뿐만 아니라 앞서 잠시 언급을 하긴 했지만, lightFM과 DeepFM도 대표적인 하이브리드 알고리즘이다.

LightFM의 경우 내부적으로는 matrix factorization 방식이지만 콘텐츠 정보와 협업 필터링 정보를 함께 활용하고 있다.

또, DeepFM의 경우는 협업필터링 + DNN을 함께 활용하고 있다. 

 

1.4 기타 방법론들

당연하게도 저 방법들만 존재하지 않는다. 그래프 기반의 추천시스템도 있고 최근에는 BERT와 같은 언어모델도 많이 활용이 되고 있다. 

BERT의 경우 사용자 행동 시퀀스를 문장처럼 보고 그다음에 올 아이템을 예측해서 다음에 소비할 아이템을 예측하는 방식으로 추천한다고 생각하면 될 것 같다.

 

또, 세션 기반으로 실시간 추천이 가능한 모델들도 있다. 사용자의 과거 이력을 활용하기보다는, 현재 세션에서의 활동(e.g. 클릭, 탐색, 장바구니 담기 등)을 기반으로 실시간 추천을 수행하는 것을 말한다. 특히 로그인하지 않은 사용자나 Cold Start 사용자에게도 높은 성능을 보인다. 딥러닝모델을 활용해서 클릭 흐름의 패턴을 학습을 진행하는데 GRU4Rec, NARM, STAMP 등이 대표적인 알고리즘이며, 이는 전통적인 협업 필터링보다 ‘현재의 행동 의도’에 초점을 맞춘 모델 기반 접근이라 할 수 있다.

 

이렇게 해서 간략하게 추천시스템 알고리즘 종류와 그 개념에 대해서 정리해 보았다.

(최근에는 LLM이 발전하면서 이를 이용한 알고리즘들도 많이 등장하고 있기 때문에, 한 분야에 대해서도 꾸준한 공부가 필요한 것 같다..)

 

2. 추천시스템의 목표

그렇다면 이러한 추천시스템을 개발할 때의 목표는 무엇일까?

  

결국 추천시스템은 판매자의 이윤을 늘리기 위해 사용된다. 수익증대라는 광범위한 비즈니스 중심 목표를 달성하기 위해서는 추천시스템의 일반적인 운영 및 기술적 목표는 크게 4가지다. 

 

1. 관련성 : 추천시스템의 가장 명백한 운영 목표는 사용자와 관련 있는 아이템을 추천하는 것이다.  

 

2. 참신성 : 사용자가 이전에 보지 못했던 아이템을 추천해 주는 것

 

3. 의외성(serendipity) : 다소 예상치 못한 아이템을 추천해주는 것이며, 사용자들이 이전이 알지 못했던 내용의 추천이라기보다는 정말 뜻밖의 추천이라는 편에서 참신성과는 살짝 다르다. 예를 들어, 인근에 새로운 인도 음식점이 생기면 일반적으로 인도 음식을 먹는 사용자에게 해당 음식점의 추천은 참신한 것이지만, 반드시 의외인 것은 아니다. 하지만, 동일한 사용자에게 에티오피아 음식이 추천됐을 때, 그 음식이 그 사람에게 흥미로울 수 있다는 것을 본인도 모르고 있었다면 그것은 의외성이 될 수 있다. 

 

4. 다양성 : 일반적으로 추천시스템은 상위 top-k개의 아이템을 추천해 주는 데, 이렇게 제안된 아이템 모두가 유사한 특징을 가질 때, 사용자는 이들 중 어느 것도 선호하지 않을 위험성이 커진다. 반면, 추가된 리스트에 다른 유형의 아이템이 포함돼 있을 경우, 사용자는 이들 중 최소한 하나를 선호할 가능성이 높아진다.  

 

이러한 구체적인 목표 외에도 사용자와 판매자 모두의 관점에서 추천 과정을 통해 다수의 어렵지 않은 목표를 달성할 수 있다. 

 

(개발을 하면서도 이러한 부분들을 세세하게 신경을 쓰지 못했지만, 서비스의 관점에서 추천시스템의 궁극적인 목표를 스스로도 다시 한번 상기할 수 있었다. )

 

다음에는 하나하나 더 자세한 알고리즘들에 대해서 리뷰를 진행해보고자 한다.

해당 글이 도움이 되셨다면 좋겠습니댱. 감사합니다. 

 

 

참고 : https://wikidocs.net/150826 

 

2) Visual Recommendation system

## 추천 시스템이란? 추천 시스템은 영화, 쇼핑, 음악 등 다양한 영역에서 제공하고 있는 기능이기 때문에 아마 많은 분들에게 익숙할 것입니다. 추천 시스템은 이용자가 앱을 사…

wikidocs.net

참고 : Aggarwal, Charu C. *Recommender Systems: The Textbook*. Springer, 2016.