본문 바로가기

부스트캠프 AI Tech 3기/이론 : U-stage

[Day32] Collaborative Filtering 4-1 MBCF & SVD

NBCF의 한계

  • Sparsity(희소성) 문제
    • 데이터가 충분하지 않다면 추천성능이 떨어진다.
      유사도 계산이 부정확하기 떄문에 성능도 떨어진다.
    • 데이터가 부족하거나 혹은 아예 없는 유저, 아이템의 경우 추천이 불가능하다. (Cold Start)
  • Scalability(확장성) 문제
    • 유저와 아이템 수가 늘어날수록 유사도 계산도 늘어나 시간이 오래 걸린다
    • 하지만 데이터양이 많아지기 때문에 정확한 예측을 한다.

MBCF : Model Based Collaborative Filtering

항목 간 유사성을 비교하는 것에서 벗어나 데이터에 내재한 패턴을 이용해 추천하는 CF기법

  • SVD
  • Matrix Factorization
  • Deep learning
NBCF MBCF
non parametric
파라미터를 학습하지 않는다
parametric
파라미터로 학습한다
memory based
데이터를 그대로 메모리에 올려놓고 collaborative filter를 사용한다
model based
유저 벡터와 아이템 벡터는 모두 학습을 통해 계속 변하는 파라미터로 이루어진다
유저-유저, 아이템-아이템 간의 유사성을 비교 데이터에 숨겨진 특성을 찾는다.
  데이터는 학습에만 사용하고 모델에 학습 내용이 저장되어 있기 떄문에 다시 데이터를 매번 학습할 필요가 없어서
서빙 속도가 빠름
sparsity ratio<=99.5% 일 때만 사용 sparsity ratio가 99.5%을 넘어도 사용
  사용자, 아이템 개수가 많이 늘어나도 성능이 좋다
전체 데이터에 대해 학습하지 않고 특정 주변 이웃에게만 영향을 받는다 전체 데이터의 패턴을 학습하지 않아 overfitting 되지 않는다.
공통의 유저나 아이템을 많이 공유해야만 유사도 값이 정확해진다. 적당히 coverage가 비슷한 데이터들은 많지 않기 때문에 성능도 높아지기 힘들다. 특정 유저나 아이템의 유사도를 직접 계산하지 않아 Limited Coverage가 없다

MBCF에서는 주어진 데이터로 모델을 학습하면서 정보들이 파라미터로 압축되고, 모델의 파라미터는 데이터의 패턴을 나타내고 이 파라미터는 최적화를 통해 업데이트 된다.

 

Implicit Feedback vs Explicit Feedback

Explicit Feedback Implicit Feedback
선호도를 직접적으로 알 수 있는 데이터 유저의 선호도를 간접적으로 알 수 있는 데이터
영화평점, 맛집 별점 클릭 여부, 시청 여부
  데이터의 양이 훨씬 많다. 수집하기 더 쉽다.
평점을 예측한다. 얼마만큼 선호할지, 얼마만큼 선호하지 않을지를 예측하게 된다.

 

Latent Factor Model

latent=embedding

유저와 아이템 관계를 잠재적 요인으로 표현할 수 있다고 보는 모델

관계를 몇 개의 벡터로 compact/dense하게 표현한다.

 

유저-아이템 행렬을 저차원의 행렬로 분해하는데 그 저차원의 행렬은 생성되긴 하지만 의미를 표면적으로는 알기 어렵다.

유저와 아이템을 같은 차원으로 latent하게 만들어서 같은 공간에 embedding하게 될 경우, 유저 벡터와 아이템 벡터가 같은 공간에 놓여 유저와 아이템 사이의 유사한 정도를 확인할 수 있다. 그 두 벡터가 유사하게 놓인다면 추천될 확률이 높아진다.

https://wooono.tistory.com/149

이렇게 같은 차원에 놓이게 되는데 여성향, 남성향과 같은 축에 대한 설명은 원래 알 수 없고 잠재적이다.

 


Singular Value Decomposition : SVD

2차원 행렬을 분해하는 기법

추천시스템에서 사용하는 데이터는 유저-아이템으로 이루어진 2차원 rating 행렬(=Rating Matrix R)이다.

 

R을 유저와 아이템의 잠재요인을 포함할 수 있게 분해하면 3가지 행렬이 나온다

추천 알고리즘 - SVD (Singular Value Decomposition) (tistory.com)

  • 유저 잠재 요인 행렬 U
    한 user에 대한 벡터는 m크기를 가지며 행으로 들어간다.
  • 아이템 잠재 요인 행렬 V
    아이템 전체 갯수인 n차원으로 이루어지며
    한 아이템에 대한 벡터는 n크기를 가지며 열로 들어간다. 전치 되어 있기 때문에 열로 들어간다.
  • 잠재요인 행렬 $\Sigma$
    U와 V의 차원이 맞지 않기 때문에 가운데의 잠재요인 행렬이 맞추어준다. 각 factor의 중요한 요소들로 이루어진 latent vector가 대각으로 들어간 대각행렬이기 때문에 대각선에 있는 원소를 빼고는 다 0으로 이루어져 있다.

세 행렬을 다 곱했을 때 원래 행렬 R로 복원할 수 있다.

 

  • Full SVD
    R을 3개의 행렬로 온전하게 분해하는 것
  • Truncated SVD
    Full SVD를 압축한 것
    Latent Vector 가운데에서 대표값으로 사용할 특이치를 k개 뽑아서 그 특이치들에 따라서 user matrix와 item matrix도 압축된다.
    압축된 행렬은 원래 행렬 R과 완벽히 같지는 않지만 최대한 유사하게 복원할 수 있다

그래서 Truncated SVD를 이용하면 몇 개의 특이치만을 가지고도 유용한 정보를 유지할 수 있다. 이는 정보가 요약되는 효과를 가져온다. $\hat{R}$은 부분 복원되었긴 했지만 가장 중요한 정보들은 남아있게 된다. 그래서 추천시스템에서 $\hat{R}$은 예측값으로 사용한다.

 

SVD의 한계

전통적 SVD는 한계가 있다.

  • 분해하려는 행렬의 knowledge가 불완전할 때 SVD가 작동하지 않는다.
    실제 user-item matrix는 sparse하고 결측치가 많아서 SVD를 수행할 수 없다.
  • SVD는 모두 채워져 있어야 수행되기 때문에 결측된 entry를 채우는 Imputation을 통해 dense하게 만든다
    0이나 평균으로 채우는데, 그건 데이터양을 증가+왜곡 시킨다. 결과적으로 예측 성능이 줄어들게 된다.
  • 특히 행렬의 entry가 매우 적을 때는 과적합 되기 쉽다.