2024. 1. 7. 21:31ㆍ책/머신러닝 완벽가이드
추천 시스템
콘텐츠 기반 필터링
협업 필터링 -> 최근접 이웃 협업 필터링, 잠재 요인 협업 필터링
콘텐츠 기반 필터링 추천 시스템
- 사용자가 특정한 아이템을 매우 선호하는 경우, 그 아이템과 비슷한 콘텐츠를 가진 다른 아이템을 추천하는 방식
ex) 특정 영화에 높은 평점을 주었다면 그 영화의 장르, 출연 배우, 감독, 영화 키워드 등의 콘텐츠와 유사한 다른 영화를 추천해 줌
최근접 이웃 협업 필터링
- 사용자가 아이템에 매긴 평점 정보나 상품 구매 이력과 같은 사용자 행동 양식(User behavior)만을 기반으로 추천을 수행하는 것
- 협업 필터링은 사용자-아이템 평점 매트릭스를 사용하여 사용자가 평가하지 않은 아이템을 평가한 아이템에 기반하여 예측하는 알고리즘- - 사용자-아이템 평점 매트릭스에서 행(Row)는 개별 사용자, 열(Column)은 개별 아이템으로 구성되며, 각 (행,열) 위치에 해당되는 값이 평점을 나타내는 형태
- 사용자-아이템 평점 매트릭스에서 행(Row)는 개별 사용자, 열(Column)은 개별 아이템으로 구성되며, 각 (행,열) 위치에 해당되는 값이 평점을 나타내는 형태
- 다차원 행렬, 희소 행렬의 특성을 가지고 있음
최근접 이웃 협업 필터링 = 메모리(Memory) 협업 필터링 ->사용자 기반(User-User), 아이템 기반(Item-Item)으로 나뉨
사용자 기반 최근접 이웃 방식
- 특정 사용자와 타 사용자 간의 유사도를 측정한 뒤 가장 유사도가 높은 TOP-N 사용자를 추출해 그들이 선호하는 아이템을 추천하는 것
비슷한 상품을 좋아한다고 해서 사람들의 취향이 비슷하다고 판단하기 어렵고 사용자들이 평점을 매긴 상품의 개수가 많지 않은 것이 일반적이기 때문에 사용자 간의 유사도를 측정하기 어려운 단점이 있음
아이템 기반 최근접 이웃 방식
- 아이템의 속성과는 상관없이 사용자들이 그 아이템을 좋아하는지, 싫어하는지의 평가 척도가 유사한 아이템을 추천하는 기준이 되는 알고리즘
최근접 이웃 협업 필터링은 대부분 아이템 기반의 알고리즘을 적용
유사도 측정 방법으로는 코사인 유사도를 이용
잠재요인 협업 필터링
- 사용자-아이템 평점 행렬 속에 숨어 있는 잠재요인을 추출해 추천 예측을 할 수 있게 하는 기법
- 다차원 희소 행렬인 사용자-아이템 평점 행렬을 저차원 밀집행렬의 사용자-잠재적 요인 행렬, 잠재적 요인-아이템 행렬로 분해하여 두 행렬의 내적을 통해 새로운 예측 사용자-아이템 평점 행렬을 만듦
- 사용자가 아직 평점을 부여하지 않은 데이터에 대한 예측 평점을 생성할 수 있게 됨
- 가령 영화 평점 기반의 사용자-아이템 행렬에서는 잠재요인을 영화 장르로 생각할 수 있음
- 사용자 - 잠재요인 행렬은 사용자의 영화 장르에 대한 선호도, 잠재요인-아이템 행렬은 영화의 장르별 특성 값으로 해석할 수 있음
행렬 분해 이해
- 행렬 분해 기법으로는 SVD(Singular Vector Decomposition), NMF(Non-Negative Matrix Factorization) 등이 있음
- R = P*Q.T
- M 은 총 사용자 수
- N 은 총 아이템 수
- K는 잠재 요인의 차원 수
- R은 M x N 차원의 사용자-아이템 평점 행렬
- P는 M x K 차원의 사용자-잠재 요인 행렬
- Q는 N x K 차원의 아이템-잠재 요인 행렬
- Q.T는 Q의 전치 행렬(K x N 차원)
R 행렬의 u행 사용자와 i열 위치에 있는 평점 데이터를 r(u, i) 라고 하면

- 사용자-아이템 평점 행렬의 미정 값을 포함한 모든 평점 값은 행렬 분해로 얻어진 P 행렬과 Q.T 행렬의 내적을 통해 예측 평점으로 다시 계산할 수 있음
- 행렬 분해는 주로 SVD 방식을 사용하지만 원본행렬에 널(NaN) 값이 있을 경우 확률적경사하강법(SGD) 이나 ALS 를 이용하여 SVD 수행
확률적 경사 하강법을 이용한 행렬 분해
- P 와 Q 행렬로 계산된 예측 R 행렬 값이 실제 R 행렬 값과 가장 최소의 오류를 가질 수 있도록 반복적인 비용 함수 최적화를 통해 P와 Q 를 유추해내는 것
- P와 Q 를 임의의 값을 가진 행렬로 설정
- P와 Q.T값을 곱해 예측 R 행렬을 계산하고 예측 R 행렬과 실제 R 행렬에 해당하는 오류 값을 계산
- 이 오류 값을 최소화 할 수 있도록 P 와 Q 행렬을 적절한 값으로 각각 업데이트
- 만족할 만한 오류 값을 가질 때까지 2, 3번 작업을 반복하면서 P와 Q 값을 업데이트해 근사화
- 사용자-아이템 평점 행렬의 경우 행렬 분해를 위해서 오류 최소화와 L2규제를 반영한 비용 함수를 사용
- L2 규제를 반영해 실제 R 행렬값과 예측 R 행렬값의 차이를 최소화 하는 방향성을 가지고 P 행렬과 Q 행렬에 업데이트 값을 반복적으로 수행하면서 최적의 예측 R 행렬을 구하는 것이 SGD 기반의 행렬분해
정리
추천 시스템은 매출 향상으로 이어지는 많은 사례로 인하여 많은 기업들이 추천 시스템의 예측 성능을 향상시키기 위해 알고리즘과 데이터 수집에 노력을 기울이고 있음
콘텐츠 기반 필터링은 아이템을 구성하는 여러 가지 콘텐츠 중 사용자가 좋아하는 콘텐츠를 필터링하여 이에 맞는 아이템을 추천하는 방식임(사용자가 좋아하는 영화를 분석한 뒤, 이 영화의 콘텐츠와 유사한 다른 영화를 추천).
다양한 요소를 결합하여, 하나의 콘텐츠 특징으로 피처 벡터화한 뒤에 이들 피처 벡터와 가장 유사한 다른 피처 벡터를 가진 영화를 추천하는 것
협업 필터링은 최근접 이웃 협업 필터링과 잠재 요인 필터링으로 나뉨.
최근접 이웃 협업 필터링은 다시 사용자 기반과 아이템 기반으로 나뉘며, 이중 아이템 기반이 더 많이 사용됨.
아이템 기반 최근접 이웃 방식은 특정 아이템과 가장 근접하게 유사한 다른 아이템들을 추천하는 방식임.
이 유사도의 기준이 되는 것은 사용자들의 아이템에 대한 평가를 벡터화한 값임.
잠재 요인 협업 필터링은 많은 추천 시스템에서 활용하는 방식임.
사용자-아이템 평점 행렬 데이터에 숨어 있는 잠재 요인을 추출하여 사용자가 아직 평점을 매기지 않은 아이템에 대한 평점을 예측하여 이를 추천에 반영하는 방식임.
이렇게 잠재 요인을 추출하기 위해 다차원의 사용자-아이템 평점 행렬을 저차원의 사용자-잠재요인, 아이템-잠재요인 행렬로 분해하는데, 이러한 기법을 행렬 분해라고 함.
파이썬의 추천 시스템 패키지 중 하나인 surprise는 사이킷런과 유사한 API를 지향하며, 간단한 API만을 이용해 파이썬 기반에서 추천 시스템을 구현해 줌.