본문 바로가기

AI 개발

Memory-based 협업 필터링 (Collaborative Filtering, CF)

반응형

추천 시스템 : 협업 필터링 (CF) Collaborative Filtering

핵심 질문: "이 유저(User)에게 어떤 아이템(Item)을 추천해줘야 할까?"

1. 필터링 (Filtering)이란?

세상에는 너무나 많은 정보와 아이템이 있습니다. 추천 시스템의 역할은 이 방대한 정보 중에서 특정 사용자에게 가장 관련성이 높고 유용할 것 같은 정보(아이템)만을 '걸러내어(Filtering)' 보여주는 것입니다.

2. 추천 시스템의 두 가지 주요 접근 방식:

  • 협업 필터링 (Collaborative Filtering, CF): "다른 사람들은 뭘 좋아했지?" 🤔
  • 콘텐츠 기반 필터링 (Content-based Filtering, CBF): "네가 전에 좋아했던 거랑 비슷한 거네!" 😎

I. 협업 필터링 (Collaborative Filtering, CF) - "다른 사람들은 뭘 좋아했지?" 🤔

A. 핵심 아이디어:

나와 비슷한 취향을 가진 다른 사람들이 좋아했던 아이템을 나에게 추천하거나, 내가 좋아했던 아이템과 비슷한 아이템 (다른 사람들도 비슷하게 좋아했던)을 추천하는 방식입니다. 유저들의 행동 기록 (클릭, 구매, 평점 등) 자체를 이용하는 거죠.

쉽게 말하면:

  • "네 친구들이 재밌다고 한 영화, 너도 한번 볼래?" (User-based CF)
  • "이 과자(A)를 산 사람들이 저 과자(B)도 많이 샀더라. 너도 B 과자 한번 먹어볼래?" (Item-based CF)

B. 협업 (Collaboration)의 의미

이 방식은 혼자서는 추천을 만들어내지 못합니다. 추천을 받는 사용자(A) 외에도 다른 많은 사용자들(B, C, D...)의 데이터가 필요합니다.

사용자들이 아이템에 대해 평가하거나, 구매하거나, 클릭하는 등의 행동을 하면, 이 정보들이 모여 집단적인 지성(Collective Intelligence) 또는 집단적인 선호도 패턴을 형성합니다.

시스템은 이렇게 모인 여러 사용자들의 데이터를 '함께', '협력적으로' 활용하여 특정 사용자를 위한 추천을 생성합니다. 마치 여러 사람들이 힘을 합쳐(협업하여) 특정 사용자에게 가장 적합할 것 같은 정보를 찾아주는 것과 같습니다.

사용자들이 의도적으로 "협업하자!"라고 한 것은 아니지만, 각자의 활동 데이터가 모여 시스템이 활용할 수 있는 '협업적인' 정보 자원이 되는 셈입니다.

협업 필터링은 바로 위에서 설명한 '협업적인' 정보(다른 사용자들의 선호도 패턴)를 기준으로 삼아, 사용자에게 맞지 않을 것 같은 아이템은 걸러내고, 좋아할 만한 아이템을 선택(Filtering)합니다.

C. 동작 방식 (간단 버전):

  1. 데이터 수집: 유저들이 어떤 아이템에 대해 어떻게 행동했는지 데이터를 모아요. (예: 유저 A는 영화 1, 2에 별점 5점, 영화 3에 별점 1점 / 유저 B는 영화 1, 2에 별점 4점, 영화 4에 별점 5점 ...)
  2. 유사도 측정:
    • User-based CF: 나(타겟 유저)와 다른 유저들 간의 유사도를 계산해요. (나와 유저 B가 영화 1, 2를 둘 다 좋아했으니 비슷하네!)
    • Item-based CF: 내가 좋아했던 아이템과 다른 아이템들 간의 유사도를 계산해요. (영화 1을 좋아한 사람들은 영화 2도 많이 좋아했으니, 영화 1과 2는 비슷하네!)
  3. 추천 생성:
    • User-based CF: 나와 비슷한 유저들이 좋아했지만, 나는 아직 보지 않은 아이템을 추천해요.
    • Item-based CF: 내가 좋아했던 아이템과 유사도가 높은 아이템을 추천해요. (아마존의 "이 상품을 구매한 고객이 함께 구매한 상품"이 대표적이죠!)

D. 장점:

  • 아이템 자체의 정보가 없어도 돼요: 영화 줄거리, 상품 설명 같은 정보 없이 유저들의 '평가'나 '선택' 기록만 있어도 추천이 가능해요.
  • 생각지 못한 추천 (Serendipity): 내가 전혀 몰랐던 분야의 아이템도 추천받을 수 있어요. (나랑 취향 비슷한 사람이 갑자기 다큐멘터리를 좋아하기 시작하면 나에게도 추천될 수 있음)

E. 단점:

  • 콜드 스타트 (Cold Start) 문제:
    • New User: 새로 가입한 유저는 활동 기록이 없어서 누구와 비슷한지, 뭘 좋아하는지 알 수 없어요. 😭
    • New Item: 새로 추가된 아이템은 아무도 선택하거나 평가하지 않았기 때문에 추천되기가 어려워요. 😥
  • 데이터 부족 (Sparsity): 유저가 평가하거나 본 아이템보다 그렇지 않은 아이템이 훨씬 많아서, 유사도 계산이 부정확해질 수 있어요.
  • 인기 편향 (Popularity Bias): 인기 많은 아이템이 계속 더 추천될 가능성이 높아요.

F. 언제 사용하면 좋을까?

  • 유저들의 상호작용 데이터(클릭, 구매, 평점 등)가 풍부할 때
  • 아이템의 특징을 분석하기 어렵거나, 특징 정보가 별로 없을 때
  • 예: 영화 평점 사이트, 이커머스 플랫폼 등

메모리 기반 / 이웃 기반 (Memory-based / Neighborhood-based) CF

이름 그대로 사용자-아이템 상호작용 데이터(메모리)를 직접 사용하여 유사한 이웃(Neighborhood)을 찾는 방식입니다. 별도의 모델을 학습시키기보다는, 저장된 데이터를 기반으로 유사도를 계산하여 추천합니다.

a) 사용자 기반 협업 필터링 (User-based CF):
  • 핵심 아이디어: "나와 비슷한 취향을 가진 다른 사용자들이 좋아했던 아이템을 추천하자!"
  • 동작 방식:
    • 유사 사용자 찾기: 타겟 사용자와 다른 모든 사용자 간의 유사도(예: 코사인 유사도, 피어슨 상관계수)를 계산합니다. (주로 사용자들이 공통으로 평가한 아이템들의 평점 패턴을 비교)
    • 아이템 점수 예측: 타겟 사용자와 유사도가 높은 사용자들이 높게 평가했지만, 타겟 사용자는 아직 상호작용하지 않은 아이템들의 예상 평점/선호도를 계산합니다. (유사 사용자들의 평점에 유사도 가중치를 적용하여 평균 내는 방식 등)
    • 추천: 예상 점수가 높은 아이템들을 추천합니다.
  • 장점: 구현이 비교적 직관적이고, 추천 이유 설명이 쉬움 ("당신과 비슷한 취향의 사용자들이 좋아했어요").
  • 단점: 사용자 수가 많아지면 유사도 계산 비용이 매우 커짐 (Scalability 문제), 데이터 부족(Sparsity) 문제에 취약.
b) 아이템 기반 협업 필터링 (Item-based CF):
  • 핵심 아이디어: "내가 좋아하는 아이템과 비슷한 아이템을 추천하자!"
  • 동작 방식:
    • 아이템 간 유사도 계산: 모든 아이템 쌍 간의 유사도를 계산합니다. (주로 해당 아이템들을 공통으로 평가/소비한 사용자들의 평점 패턴을 비교) 이 계산은 사용자 기반보다 덜 자주 수행해도 됩니다 (아이템 간 관계는 사용자 취향보다 덜 변함).
    • 아이템 점수 예측: 타겟 사용자가 과거에 좋아했던(높게 평가한) 아이템들과 유사도가 높은 다른 아이템들의 예상 평점/선호도를 계산합니다. (사용자가 평가한 아이템 점수에 아이템 간 유사도 가중치를 적용하여 합산하는 방식 등)
    • 추천: 예상 점수가 높은 아이템들을 추천합니다. (아마존의 "이 상품을 구매한 고객이 함께 구매한 상품"이 대표적인 예시)
  • 장점: 사용자 기반보다 확장성이 좋고, 데이터 부족 문제에 좀 더 강하며, 종종 더 좋은 성능을 보임.
  • 단점: 새로운 사용자에 대한 추천이 어려움 (Cold Start).

❌ Memory-based Collaborative Filtering의 단점

1️⃣ 희소성(Sparsity) 문제

  • 대부분의 사용자-아이템 평점 행렬은 90% 이상 비어 있음
  • 유사도를 계산하려 해도, 공통으로 평가한 데이터가 너무 적음
    • 예: 두 사용자가 1~2개 상품만 같이 평가 → 유사도 신뢰도 낮음
  • 그래서 추천 정확도가 떨어짐

2️⃣ 확장성 문제 (Scalability)

  • 유저 수가 수백만, 아이템 수가 수십만이면,
    • 모든 유저 간 / 아이템 간 유사도를 실시간 계산하는 건 부담이 큼
  • 특히 User-based CF는 사용자 수가 많아질수록 성능이 급격히 저하

3️⃣ Cold Start 문제

  • 신규 사용자 / 신규 아이템이 등장했을 때 추천이 불가능하거나 매우 부정확
    • 유사도 계산할 정보가 없기 때문
  • CBF(콘텐츠 기반)은 아이템 속성만 있으면 되지만,
    Memory-based CF는 행동 이력이 필수

4️⃣ 동적 변화 반영 어려움

  • 유사도는 캐싱하거나 미리 계산하는 경우가 많지만,
    사용자의 취향은 시간에 따라 바뀜
  • 실시간으로 반영하려면 유사도 재계산 비용이 큼

 

 

반응형