OkBublewrap

추천시스템 (2): 협업필터링 본문

Python/학습용

추천시스템 (2): 협업필터링

옥뽁뽁 2025. 3. 21. 00:14

최근접 이웃 기반 협업 필터링

협업 필터링(Collaborative Filtering, CF)이란?

  • 사용자들이 아이템과 어떤 상호작용을 했는지에 대한 데이터를 분석하여 추천을 수행하는 방식
  • 사용자 간 또는 아이템 간의 유사성을 이용하여 추천하는 방식
  • 나와 비슷한 취향을 가진 사용자가 좋아한 아이템은 나도 좋아할 가능성이 높다는 원리

 

협업 필터링 vs. 콘텐츠 기반 필터링

  협업 필터링 콘텐츠 기반 필터링
추천 방식 유사한 사용자 또는 아이템 기반 추천 사용자가 선호하는 아이템의 특징에 기반한 추천
주요 데이터 사용자-아이템 간의 상호작용 데이터
(평점, 클릭, 구매 이력 등)
아이템 메타데이터(장르, 키워드, 설명 등)
사용자 콜드스타트 상호작용 이력이 없으면 추천 어려움 콜드스타트 문제가 상대적으로 적음
아이템 콜드스타트 아이템이 충분한 평가를 받아야 가능함 아이템의 특징만 있으면 바로 추천 가능
추천의 다양성 인기 아이템 추천 경향 유사한 콘텐츠만 추천되는 문제 발생 (의외성 부족)
설명 가능성 추천 이유를 설명하기 어려움 추천 근거를 설명하기 용이함

 

⇒ 콘텐츠 기반 필터링은 아이템의 속성(메타데이터)에 의존한 추천이고, 협업 필터링은 사용자가 직접적으로 선호를 표현한 인터랙션 데이터를 기반으로 잠재된 유사성을 파악하는 방식

 

 

전통적인 협업 필터링 vs. 머신러닝 기반 협업 필터링

  • 전통적인 협업 필터링 vs. 머신러닝 기반 협업 필터링
    : 비슷한 사용자 또는 비슷한 아이템을 찾기 위해 수학적 거리를 계산하는 방식
  • 머신러닝(모델) 기반 협업 필터링
    : 행렬 분해 또는 딥러닝을 활용하여 사용자와 아이템의 숨겨진 패턴을 학습하는 방식. 잠재요인 협업 필터링이라고 하기도 함
  • 공통적으로 사용자 - 아이템으로 구성된 상호작용 행렬을 데이터 사용함
    • 추천시스템은 기본적으로 행렬 대부분이 0원소로 구성된 희소 데이터(Sparse Data)
    • 희소 데이터를 어떻게 처리하느냐에 따라 연산 효율과 성능 모두 좌우된다.

 

최근접 이웃 방식 협업 필터링

  • 전통적인 협업 필터링의 핵심 = 유사한 사용자 또는 유사한 아이템을 찾는 것
  • 코사인 유사도, 피어슨 상관 계수 등으로 유사도를 계산하여 최근접 이웃을 찾아 추천
  • 유사도를 계산하는 기준에 따라 사용자 기반 협업 필터링과 아이템 기반 협업 필터링으로 구분

 

사용자 기반 협업 필터링 (User-Based CF)

  • 나와 비슷한 취향을 가진 가까운 사용자를 찾아 추천
  • 나와 비슷한 아이템들을 좋아한 사람이 본 다른 아이템을 추천 받음

 

아이템 기반 협업 필터링 (Item-Based CF)

  • 내가 좋아한 아이템과 유사한 아이템을 찾아 추천
  • 아이템 간 유사도 계산 → 특정 사용자가 평점을 높게 준 아이템을 기준으로 유사한 아이템 탐색 → 그 아이템을 사용자가 보지 않았다면 추천
    • B가 선호하는 아이템(평점이 가장 높은 아이템)과 유사한 패턴을 보이는 아이템을 추천

장점

  • 아이템의 메타데이터가 필요 없음
  • 새로운 트렌드 반영이 빠름

한계

  • 데이터 희소성 문제
  • 콜드스타트 문제
  • 확장성 문제
  • 유사도 기반 추천의 한계

 

잠재 요인 협업 필터링

배경: 전통적인 협업 필터링인 최근접 이웃 기반 협업 필터링의 한계점을 극복하기 위해 등장했으며, Netflix Prioze 대회에서 처음 등장한 방법으로도 유명함

 

행렬 분해 기법을 사용해서 사용자와 아이템의 숨겨진 특징을 학습하는 방법

  • 사용자와 아이템의 상호작용 데이터를 행렬로 표현 (최근접 이웃 방식과 동일)
  • 희소 데이터를 수학적으로 분해하여 숨겨진(잠재적인) 요인들을 추출하는 방식
    • 0인 데이터는 불호의 표시가 아니라 잠재적인 선호의 표시다! → 잠재적인 선호도가 얼마만큼일까를 계산해보는 것

행렬 분해란?

  • 행렬 A를 2개 이상의 작은 행렬 B, C로 분해하는 것을 의미
  • 행렬 분해의 주요 목적
    • 차원 축소: 데이터에서 주요 패턴을 학습하여 저차원 공간에 투영
    • 데이터 희소성 해결
    • 압축 및 정보 추출

 

동작 방식

  1. 사용자-아이템 행렬 데이터 생성
  2. 행렬 분해
    1. 사용자-아이템 행렬을 두 개의 작은 행렬로 분해
    2. 사용자 잠재 행렬(U): 각 사용자의 잠재 요인을 나타내며, 사용자가 특정 특징에 얼마나 관심이 있는지를 나타내는 값들이 포함됨
    3. 아이템 잠재 행렬(V): 각 아이템의 잠재요인을 나타내며, 아이템의 특정 특징에 얼마나 관련되어 있는지를 나타내는 값들이 포함됨
    4. 사용자 잠재 행렬 * 아이템 잠재 행렬을 최대한 기존 상호작용 데이터와 유사하게 복원하는 것이 목표
  3. 학습 과정
    1. 행렬 분해 과정에서 사용자와 아이템 잠재 행렬의 값을 최적화하여 원래 행렬 R의 실제값과 예측값의 차이를 최소화
    2. 학습이 진행될수록 사용자 잠재 행렬과 아이템 잠재 행렬의 값이 업데이터 되면서 예측 정확도가 높아짐
  4. 예측값 계산
    1. 학습이 완료되면, 사용자 잠재 행렬 * 아이템 잠재 행렬을 통해 원래 비어있던 값(0)에 대한 예측을 계산
    2. 이 때, 잠재 요인 협업 필터링의 목표는 원본 행렬을 완벽히 복원하는 것이 아니라, 학습을 통해 원본 행렬의 패턴을 근사하여 사용자와 아이템 간의 숨겨진 관계를 학습하는 것
  5. 추천리스트 생성
    1. 예측값이 계산된 후에는 각 사용자에 대해 예측 평점이 높은 아이템을 정렬하여 추천 리스트를 생성함

 

주요 행렬 분해 기법

  • 특이값 분해
  • 교대 최소제곱법
  • 비음수 행렬 분해
추천 시스템은 대부분 희소행렬로 구성되어 있기 때문에 ALS를 주로 사용한다!

- 추천시스템: ALS
- 차원 축소, 데이터 근사 → SVD (PCA와 유사한 역할)
- 텍스트 마이닝, 해석 가능성 중요 → NMF (비음수 제약으로 명확한 패턴 발견)

 

 

 

콘텐츠 기반 필터링 vs 잠재 요인 협업 필터링 정리

'Python > 학습용' 카테고리의 다른 글

LLM - Fine-Tuning  (0) 2025.03.21
추천시스템 (3): 협업필터링 실습  (0) 2025.03.21
LLM - RAG(2)  (0) 2025.03.20
LLM - RAG(1)  (0) 2025.03.20
연관 규칙 (2): Apriori 알고리즘  (0) 2025.03.08