본문 바로가기
Computer Science/Web Information System

[웹정보] ch09 Recomeder Systems 1

by na1-4an 2024. 6. 10.

9.1 추천 시스템 모델

컨텐츠가 엄청 많아져서 "추천"이 필요해짐.

 

Utility function:

u = X x S → R

X = Customer 집합

S = Item 집합

R = Rating 집합

 

Utility matrix - 빈 칸에 어떤 값이 들어갈 지 예측하는 것이 중요!

 

사용자의 관심 항목을 식별하는 접근 2가지

접근1) "known" rating 모으기

  • Explicit: 직접 사람에게 물어본 rating
  • Implicit: 내재된 행동으로 유추. 웹페이지에 몇번 들어갔나~, 얼마나 머물러 있었나~

접근2) known rating으로부터 "unknown" rating 유추하기

  • Utility matrix는 sparse하다!
  • cold start: 새로운 아이템은 rating이 없고, 새로운 사용자는 history가 없음!

 

recommeder system 방법 3가지

  1. Content-based
  2. Collaborative
  3. Latent factor based

 

9.2 Content-based Recommender Systems(내용 기반 추천)

Main idea: 사용자가 높게 rating한 물건과 유사한 물건을 추천한다!

 

Item Profiles

profile은 feature의 집합이다! (item당 feature 집합)

그러면 어떻게 중요한 feature를 뽑을 수 있지?

  TF-IDF 계산! (Term frequency * Inverse Doc Frequency)

Term을 Feature로, Document를 Item으로 고려.

TF-IDF 점수가 가장 높은 n개를 feature로 뽑음.

 

User Profiles

user profile도 벡터 공간상에서 표현됨.

user가 좋아하는 아이템의 공동점으로 이루어짐.

item profile과 user profile사이의 코사인 유사도가 높은 item 추천.

 

장점(4)

  • 다른 사용자 데이터 필요 없음.
  • 사용자 취향이 특이해도 추천 가능.
  • 아이템이 유명하든 안하든 추천 가능
  • 추천한 것에 대해 설명할 수 있는 근거가 있음.

 

단점(3)

  • item-profile 만드는 것이어려움.
  • 새로운 사용자에 대한 user profile은 어떻게 만들지?
  • 관심있어 보이는 분야에 대해서만 주구장창 추천함.

 

9.3 Collaborativve Filtering(협업 필터링)

Main idea: 선호도가 비슷한 사용자가 선호하는 물건을 추천한다!

 

1. user-based Collaborative Filtering

: 비슷한 User를 찾아 추천하자 !!

 

user x가 rating 매긴 벡터: rx = [*, _, _, *, ****]

user y가 rating 매긴 벡터: ry = [*, _, **, **, _ ]

 

rx와 ry의 유사도 측정을 어떻게 할 것이냐!

  • Jaccard similarity   순위가 매겨진 항목에만 집중하게 됨.
  • Cosine similarity   안봤다고 0으로 처리해, 싫어하는 것과 유사하게 처리함.

Pearson correlation coefficient 방법을 사용하자!

두 사용자가 모두 rating을 매긴 item을 대상으로 similarity를 구함.

이 방법은 맨날 1점만 주는 사람, 5점만 주는 사람이 있는 것을 고려한 것임!

다시 말해 왼쪽의 표를 오른쪽처럼 만들어서 cosine similarity를 구하는 것임!

 

자, 지금까지는similar한 사람을 찾음. 이제는 이를 기반으로 rating을 에측할 차례!

위처럼 x 사람이 i 아이템에 매길 rating을 x와 비슷한 사람 모음인 N에 포함되는 y사람들의 rating 평균을 내거나,

위처럼 similarity를 weight로 사용하여, similarity가 높은 사람의 선호도에 더 큰 반영을 해서 구함!

 

2. item-based Collaborative Filtering

지금까지는 비슷한 사용자를 찾아서 item을 추천했다면,

이제는 비슷한 item을 찾자! 

아까 user-user CF에서는 person correlation coefficient를 user-item table에서 구했다면!! 

이번에 item-item CF에서는 item-user table에서 구한다!!

이런식으로 영화와 영화 사이의 similarity를 구함!!

영화 1번과 3번의 similarity는 0.41이라는 뜻!

 

사실 user-user보다 item-item CF가 더 잘 함.

왜? -> 사람의 취향은 더 여러가지일 수 있기 문임!(items are simpler, users have multiple tastes)

 

Collaborative Filtering 종합!

잔기술^_^

 

장점(1)

  • item 자체의 feature가 필요가 없다!
  • item은 user들의 rating으로 표현되고, user는 자신들이 rating한 item으로 표현됨!

단점(4)

  • cold start
  • sparsity
  • first rater -  rating이 안매겨진 물건은 추천이 잘 안됨.
  • popularity bias - 유니크한 건 추천 잘 못함.

보통 2개 이상의 추천시스템을 가지고 함.

CF에 Content 기반 방법을 함께 사용하기도!

 

9.4. 주목할 점 및 practical tip

Evaluation

  • 방법1: Root-mean-square error
  • 방법2: Precision at top 10
  • 방법3: Rank Correlation

고려할 점

  • 다양성에 관심있는 사람들이 있다
  • 사람이 항상 같은 것만 원하는 것이 아니다
  • 추천 순서
  • 우리는 높게 추천되는 것이 더 중요하다

Complexity/Speed

Collaboritve Filtering에서 가장 비용이 많이 드는 부분은 k명의 비슷한 사람을 찾는 과정.

이때 시간 복잡도는 O(k*|X|)

이를 줄이기 위해

  1. clustering을 해서 가까운 cluster안에서 고르거나,
  2. 차원을 줄이자!!