본문 바로가기
Study (Data Science)/DL

추천 시스템 알고리즘/ MF / CSR

by 콜라찡 2023. 1. 25.

추천 시스템(Recommender System)

 

  • 언제 사용하는가?
    1. 아이템은 너무 많고,
    2. 유저의 취향이 다양할 때
  • 주요 특징
    1. 범주형(이산적) 데이터를 다룬다.
    2. 데이터들을 일직선 좌표에 두고 유사도를 계산하여 추천한다.

 

코사인 유사도 (Cosine similarity)

  • 두 벡터의 방향이 이루는 각에 코사인을 취해 구함. 
  • 두 벡터의 방향이 완전히 동일하면 (둘다 왼쪽아래-오른쪽위) : 1,   
    둘의 교차각이 90도라면 (왼쪽아래-오른쪽위)와 (오른쪽아래-왼쪽위) : 0,  
    둘의 교차각이 180도라면 (왼쪽아래-오른쪽위)와(오른쪽위-왼쪽아래) : -1 
  • 1 ~ -1까지 값을 가지며, 1일수록 유사도가 높음.  
  • 사이킷런으로 구사함.
  • 기타 다른 유사도 계산법  
    코사인 유사도 이외에도 유클리드 거리, 자카드 유사도, 피어슨 상관계수 등의 다른 방법으로 유사도를 계산할 수 있음.

1.  콘텐츠 기반 필터링(contents based filltering)

  • 아이템의 고유의 정보를 바탕으로 아이템 간 유사성을 파악.
  • 프로파일링 필요. 위와달리 item profile + user profile 하여 유사성 계산.음악추천의 경우, 그 음악의 비트, 가수 등등을 분석하고, 사용자가 좋아했던 음악의 특색을 분석하여 추천 준비.
  • 분석 알고리즘인 위해 군집분석, 딥러닝, TF-IDF 기술 필요.
  • cold start 문제 없음.하지만 음악, 사진 ,비디오등 다양한 형식일 때 각각의 프로파일이 다 달라지므로 추천 어려움.

2.  협업필터링(Collaborative filltering)

  •  다수의 사용자의 아이템 구매 이력 정보만으로 사용자간 유사성 및 아이템 간 유사성을 파악.
  • "이 상품을 구매한 다른 사용자가 구매한 상품". A,B가 공통적으로 라면과 생수를 사면, C가 라면을 골랐을 때 생수를 추천해줌. 직관적이며 이전의 데이터를 기반으로 비슷한 패턴을 가진 사용자나 항목을 추출함.
  • 행렬분해, k-최근접 이웃 알고리즘(kNN)사용
  • 새로운 데이터는 정보가 없어 추천이 힘든 cold start 문제
  • 사용자가 많아지면 데이터가 너무많아 비용문제
  • 롱테일(long tail;정규분포상 꼬리가 길어지는것)문제 있음. 즉 많은상품중 극소수만 매번 인기이므로 나머지 상품들은 추천을 위한 충분한 정보가 없음.

3. 넷플의 모델기반협력 필터링

  • 협업필터링에 기반하나 그것을 왜 좋아하는지를 알고리즘으로 유추분석하고 이를 추천에 이용.
  • LDA(Latent Dirichlet Allocation)베이지안 네트워크가 핵심기술.
  • (용어) 필터버블 : 정보의 편향적 제공으로 극단적 양극화와 같은 사회적인 문제 발생하는 것. 예를 들어 정치부분.

 

 

SVD(Singular Vector Decomposition,특잇값 분해)

기존의 U,Σ,VTU,Σ,VT로 분해되어 있던 AA행렬을 특이값 p개만을 이용해 A’라는 행렬로 ‘부분 복원’ 할 수 있다. 위에서 말했던 것 특이값의 크기에 따라 A의 정보량이 결정되기 때문에 값이 큰 몇 개의 특이값들을 가지고도 충분히 유용한 정보를 유지할 수 있다. 최대한 중요한 정보들만 부분 복원해서 사용하면 사진의 용량은 줄어들지만 여전히 사진이 보여주고자 하는 내용은 살릴 수 있을 것이다.

 

Truncated SVD(잘린 SVD) = LSA (Latent semantic analysis: 잠재의미분석)

  • 추천시스템에서 사용하는 행렬 인수분해방식. Truncated SVD를 이용해 분해한 뒤 복원하면 SVD 처럼 완벽히 같은 행렬이 나오지 않는다. 그 이유는 Truncated SVD는 차원을 축소한 다음 행렬을 분해하기 때문. 사이킷런에서는 TruncatedSVD 기능을 함수.

from Aiffel LMS
https://www.youtube.com/watch?v=ZspR5PZemcs

 Matrix Factorization(MF) : 행렬분해 

  •  R(m,n) = P(m,k) * Q(k,n)  
  •  R = (사용자수,아티스트수); m명의 사용자들이 n명의 아티스트에 대해 평가한 데이터
  •  모델의 목표 : 모든 유저와 아이템에 대해 k-dimension의 벡터를 잘 만드는 것
  •  평가기준 : 유저의 벡터와 아이템의 벡터를 곱했을 때, 유저가 아이템에 대해 평가한 수치와 비슷한가.
  •  예시 : 앞에서 내가 좋아하는 가수에 balck eyed peas를 넣었으므로, 나의 벡터와 해당가수의 벡터를 곱했을 때 좋아한다는 1에 가까운 숫자가 나와야 함.
  • 혹은 목표가 유저의 재생 횟수를 맞혀야 하는 것(혹은 별점을 맞히는 것)이라면모델의 목표를 재생횟수를 맞히는 쪽으로 놓고 학습(유저와 아이템의 벡터를 만들기)하면됨
  •  

MF 기반 추천 알고리즘의 과정

  1. 잠재요인의 개수 K를 정합니다.
  2. 임의의 값으로 채워진 두 행렬 P(m x k), Q(n x k)를 생성합니다.
  3. 실제 평점과 예측 평점 오차를 줄여가며 P, Q를 수정합니다. (SGD)
  4. 기준에 도달 할 때 까지 3.과정을 반복 합니다.

CSR(Compressed Sparse Row) Matrix

  • 유저 수 X 아티스트 수만큼의 정보 안에는 유저가 들어보지 않은 아티스트에 대한 정보까지 모두 행렬에 포함되어 계산됨. 
  • 들어보지 않은 아티스트의 벡터값은 모두 0으로 채워져있는 sparse matrix가 되며, 메모리 낭비가 심하므로 들어본 아티스트에 대해서만 정보를 저장하면서 전체행렬형태를 유추할 수 있도록 만든 matrix. 
  • 이것이 학습시 input으로 들어감. 
    - data = [1, 2, 3, 4, 5, 6] :  0이 아닌 원소를 차례로 기입한 값
    - indices = [0, 4, 1, 3, 0, 3] :각 요소가 어느 열(column)에 있는지를 표현
    - indptr = [0, 2, 4, 4, 6] :  [최초시작행번호,시작행에서의 데이타 개수,두번째 행에서의 데이타 누적 개수,...,마지막행에서의 데이타 누적개수] 어느 행(row)에 있는지를 알 수 있음

 

 

MF의 장점과 단점

MF는 Data Sparsity에 큰 영향을 받지 않는다는 점에서 Content Base Collaborative Filtering(이하 CBCF)이나 SVD보다 성능이 훨씬 좋다. 사용자나 아이템이 늘어날수록 Sparsity가 증가하게 되는데, CBCF나 SVD는 결측값을 임의로 채워서 추천에 사용하다보니 성능이 떨어질 수 밖에 없다. 반면에, MF는 결측값을 아예 사용하지 않으므로 사용자와 아이템이 많아져도 기존 성능을 유지할 수 있다. 즉, Sparsity에 강하고 Scalibility가 좋다. 그러나 SGD를 활용한 MF는 앞서 언급한대로 사용자와 아이템이 많아지면 학습 속도가 느리고, 병렬 처리도 불가능하다는 단점이 존재한다. 앞으로 MF 기반의 개선된 추천 알고리즘에 대해 소개할 예정이다.

 

 

optimizer

 

SGD는 모든 사용자(u) 잠재 벡터와 모든 아이템(i) 잠재 벡터에 대해서 파라미터 업데이트를 하나씩 순차적으로 진행된다. 따라서 사용자와 아이템 수가 많아질수록 학습이 매우 오래 걸린다. 그리고 하나씩 순차적으로 학습해야 하다보니 병렬처리가 불가능하다. 이러한 단점을 보완하여 병렬 처리가 가능한 ALS라는 최적화 기법이 등장했다.

ALS(Alternating Least Squares)

알고리즘 설명

사용자 또는 상품 측면의 벡터가 주어져 있을 때 최소제곱해(Least Squares) 도출

https://sungkee-book.tistory.com/12

728x90

'Study (Data Science) > DL' 카테고리의 다른 글

비지도학습 / K-means, DBSCAN / PCA, T-SNE  (0) 2023.01.30
추천시스템 - ALS  (0) 2023.01.26
MLE, MAP / prior, posterior, likelihood  (0) 2023.01.18
확률과 통계  (0) 2023.01.16
Entropy / Cross - Entropy  (0) 2023.01.12

댓글