추천 시스템은 크게 콘텐츠 기반 필터링(Content Based Filtering) 방식과 협업 필터링(Collaborative Filtering) 방식으로 나뉩니다. 그리고 협업 필터링 방식은 다시 최근접 이웃(Nearest Neighbor) 협업 필터링과 잠재 요인(Latent Factor)협업 필터링으로 나뉩니다.
현재는 넷플릭스 추천 시스템 경연 대회에서 행렬 분해(Matrix Factorization)기법을 이용한 잠재 요인 협업 필터링 방식이 우승하면서 대부분의 온라인 스토어에서 잠재 요인 협업 필터링 기반의 추천 시스템을 적용하고 있습니다.
요즘은 서비스하는 아이템의 특성에 따라 콘텐츠 기반 필터링이나 최근접 이웃 기반 협업 필터링 방식을 유지하는 사이트도 많으며, 특히 아마존의 경우는 아이템 기반의 최근접 이웃 협업 필터링 방식을 추천 엔진으로 사용합니다. 근래 개인화 특성을 좀 더 강화하기 위해서 하이브리드 형식으로 콘텐츠 기반과 협업 기반을 적절히 결합해 사용하는 경우도 늘고 있습니다.
콘텐츠 기반 필터링 추천 시스템
[Content Based Filtering]
콘텐츠 기반 필터링 방식은 사용자가 특정한 아이템을 매우 선호하는 경우, 그 아이템과 비슷한 콘텐츠를 가진 다른 아이템을 추천하는 방식입니다.
예를 들어 사용자 특정 영화에 높은 평점을 줬다면 그 영화의 장르, 출연 배우, 감독, 영화 키워드 등의 콘텐츠와 유사한 다른 영화를 추천해주는 방식입니다. 특정 사용자가 '컨택트'라는 영화에 8점(10점 만점), '프로메테우스'에 9점이라는 높은 점수를 줬다고 가정해 보겠습니다. 이 경우, 감독, 출연 배우, 키워드 등의 콘텐츠를 감안해이와 유사한 영화를 추천해 줄 수 있습니다.
최근접 이웃 협업 필터링
[Nearest Neighbor Content Based Filtering]
사용자가 아이템에 매긴 평점 정보나 상품 구매 이력과 같은 사용자 행동 양식(User Behavior)만을 기반으로 추천을 수행하는 거시 협업 필터링 방식입니다.
협업 필터링의 주요 목표는 사용자-아이템 평점 매트릭스와 같은 축적된 사용자 행동 데이터를 기반으로 사용자가 아직 평가하지 않은 아이템을 예측 평가(Predicted Rating)하는 것입니다. 예를 들어 특정 사용자가 아직 구매하지 않은 제품이 있다면 협업 필터링은 사용자가 평가한 다른 아이템을 기반으로 사용자가 평가하지 않은 아이템의 예측 평가를 도출하는 방식입니다.
협업 필터링 기반의 추천 시스템은 최근접 이웃 방식과 잠재 요인 방식으로 나뉘며, 두 방식 모두 사용자-아이템 평점 행렬 데이터에만 의지해 추천을 수행합니다. 협업 필터링 알고리즘에 사용되는 사용자-아이템 평점 행렬에서 행(ROW)은 개별 사용자, 열(Column)은 개별 아이템으로 구성되며, 사용자 아이디 행, 아이템 아이디 열 위치에 해당하는 값이 평점을 나타내는 형태가 돼야 합니다.
만약 데이터가 레코드 레벨 형태인 사용자-아이템 평점 데이터라면 판다스의 pivot_table()과 같은 함수를 이용해 사용자-아이템 평점 행렬 형태로 변경해야 합니다.
일반적으로사용자-아이템 평점 행렬은 많은 아이템을 열로 가지는 다차원 행렬이며, 사용자가 아이템에 대한 평점을 매기는 경우가 많지 않기 때문에 희소 행렬(Sparse Matrix) 특성을 가지고 있습니다.
최근접 이웃 협업 필터링은 메모리(Memory) 협업 필터링이라고도 하며, 일반적으로 사용자 기반과 아이템 기반으로 다시 나뉠 수 있습니다.
- 사용자 기반 (User-User): 당신과 비슷한 고객들이 다음 상품도 구매했습니다.
- 아이템 기반(Item-Item): 이 상품을 선택한 다른 고객들은 다음 상품도 구매했습니다.
사용자 기반 최근접 이웃 방식은 특정 사용자와 유사한 다른 사용자를 TOP-N으로 선정해 이 TOP-N사용자가 좋아하는 아이템을 추천하는 방식입니다. 즉, 특정 사용자와 타 사용자 간의 유사도(Similarity)를 측정한 뒤 가장 유사도가 높은 TOP-N 사용자를 추출해 그들이 선호하는 아이템을 추천하는 것입니다.
아이템 기반 최근접 이웃 방식은 그 명칭이 주는 이미지 때문에 '아이템 간의 속성'이 얼마나 비슷한지를 기반으로 추천한다고 착각할 수 있습니다. 하지만 아이템 기반 최근접 이웃방식은 아이템이 가지는 속성과는 상관없이 사용자들이 그 아이템을 좋아하는지/싫어하는지의 평가 척도가 유사한 아이템을 추천하는 기준이 되는 알고리즘입니다.
일반적으로 사용자 기반보다는 아이템 기반 협업 필터링이 정확도가 더 높습니다. 대부분 최근접 이웃 협업 필터링은 아이템 기반의 알고리즘을 적용합니다.
텍스트 분석에서 이용한 유사도 측정 방법인 코사인 유사도는 추천 시스템의 유사도 측정에 가장 많이 적용됩니다.
잠재 요인 협업 필터링
[Latent Factor]
잠재 요인 협업 필텅은 사용자-아이템 평점 매트릭스 속에 숨어 있는 잠재 요인을 추출해 예측을 할 수 있게 하는 기법입니다. 대규모 다차원 행렬을 SVD와 같은 차원 감소 기법으로 분해하는 과정에서 잠재 요인을 추출하는데, 이러한 기법을 행렬 분해라고 합니다.
잠재 요인 협업 필터링은 사용자-아이템 평점 행렬 데이터만을 이용해 말 그대로 '잠재 요인'으 끄집어내는 것을 의미합니다. '잠재 요인'이 어떤 거인지는 명확히 정의할 수 없습니다.
하지만 이러한 '잠재 요인'을 기반으로 다차원 희소 행렬인 사용자-아이템 행렬 데이터를 저차원 밀집 행렬의 사용자-잠재 요인 행렬과 아이템-잠재 요인 행렬의 전치 행렬(잠재 요인-아이템 행렬)로 분해할 수 있으며, 이렇게 분해된 두 행렬의 내적을 통해 새로운 예측 사용자-아이템 평점 행렬 데이터를 만들어서 사용자가 아직 평점을 부여하지 않는 아이템에 대한 예측 평점 행렬 데이터를 만들어서 사용자가 아직 평점을 부여하지 않는 아이템에 대한 예측 평점을 생성하는 것이 잠재 요인 협렵 필터링 알고리즘의 골자입니다.
'ML Recommendation' 카테고리의 다른 글
포트폴리오를 위한 추천 알고리즘 구현 [3장] : Scikit-Surprise (0) | 2021.05.10 |
---|---|
포트폴리오를 위한 추천 알고리즘 구현 [2장] : Scikit-Surprise (0) | 2021.04.28 |
포트폴리오를 위한 추천 알고리즘 구현 [1장] : Scikit-Surprise (1) | 2021.04.24 |
아이템 기반 최근접 이웃 협업 필터링 실습 - MovieLens (0) | 2021.04.14 |
콘텐츠 기반 필터링 : TMDB 5000 Movie Dataset (0) | 2020.12.27 |