데이터 분석/머신러닝

[ML] 추천 알고리즘

eunnys 2023. 11. 27. 15:27

 

 

 

최근접 이웃 협업 필터링

  • 사용자가 아이템에 매긴 평점 정보나 상품 구매 이력과 같은 사용자 행동 양식을 기반으로 추천
  • User-Item Matrix Concept
    • 사용자가 평가한 다른 아이템을 기반으로 사용자가 평가하지 않은 아이템의 예측 평가를 도출하는 방식

 

 

 

  • 사용자 기반 (User-User) 협업 필터링
  • 나와 다른 사용자 간의 유사도를 측정하여 유사도가 높은 다른 사용자의 사용 아이템 중 내가 사용해보지 않은 아이템을 추천하는 방식

 

 

  • 아이템 기반 (Item-Item) 협업 필터링
  • 나와 동일한 아이템을 사용해본 다른 사용자들이 사용한 아이템 중 내가 사용해본 것과 유사한 아이템을 추천하는 방식

 

  • 일반적으로 사용자 기반보다는 아이템 기반 협업 필터링이 정확도가 더 높다.

 

 

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

  • 최근접 이웃 협업 필터링을 통한 개인화된 영화 추천은 개인이 아직 관람하지 않은 영화를 추천하는 방식
  • 아직 관람하지 않은 영화에 대해 아이템 유사도와 기존에 관람한 영화의 평점 데이터를 기반으로 새롭게 모든 영화의 예측 평점을 계산한 후 높은 예측 평점을 가진 영화를 추천하는 방식

 

 

잠재 요인 협업 필터링

  • 사용자-아이템 평점 메트릭스 속에 숨어있는 잠재 요인을 추출해서 추천 예측을 하는 작업
  • 대규모 다차원 행렬을 고유값분해와 같은 차원 감소 기법으로 분해하는 과정에서 잠재 요인을 추출
  • 사용자 X 아이템 행렬 = (사용자 X 잠재요인 행렬) * (아이템 X 잠재요인 행렬).T로 분해
  • '잠재 요인'이 어떤 것인지는 명확히 정의할 수 없다.
  • 만약, 영화 평점 기반의 사용자-아이템 행렬 데이터라면 영화가 가지는 장르별 특성 선호도로 가정할 수 있다.

 

 

 

 

잠재 요인 협업 필터링 - 특이값 분해 (SVD)

  • SVD란 m x n 행렬일 때, 다음과 같의 3개의 행렬의 곱으로 분해하는 행렬 분해 방법 중 하나이다.

 

 

각 3개의 행렬은 다음과 같은 조건을 만족한다,

- U : m x m 직교행렬

- V : n x n 직교행렬

- E : m x n 직사각 대각행렬

 

  • SVD는 NaN 값이 없는 행렬에만 적용할 수 있다. 하지만 R 행렬(사용자-영화 평점 행렬)에는 아직 평점되지 않은 많은 Null 값이 있기 때문에 P와 Q행렬을 일반적인 SVD 방식으로 분해할 수 있다.
  • 이러한 경우에는 확률적 경사 하강법 방식을 이용해 SVD를 수행한다.

 

 

 

CountVectorizer 

 

 

 

코사인 유사도 (Cosine Similarity)

  • 문서와 문서 간의 유사도는 일반적으로 코사인 유사도를 사용한다.
  • 코사인 유사도는 벡터 간의 유사도를 비교할 때 벡터의 상호 방향이 얼마나 유사한지에 기반한다.

 

  • 코사인 유사도의 값은 -1 ≤ cos(a,b) ≤ 1의 구간의 값을 갖는다.
  • 유사도가 -1일 때는 두 벡터가 서로 반대 방향으로 평행하고, 0일 때는 직교 상태, 그리고 1일 때는 서로 같은 방향으로 평행이 된다.
  • 코사인 유사도가 높다는 말은 벡터가 비슷하다는 의미이다.

 

 

  • 영화정보에 대해 장르 기준으로 콘텐츠 기반 필터링을 수행하려면 영화 데이터의 개별 레코드에 대해 가장 장르 유사도가 높은 순으로 다른 레코드를 추출해야 한다.
  • 이를 위해 코사인 유사도 행렬의 기준 행렬로 비교 대상이 되는 행의 유사도 값이 높은 순으로 정렬된 행렬의 위치 인덱스 값을 추출한다.