안녕하세요, 오랜만에 다시 인사드리는 플러스제로 엔지니어팀 입니다.
이번에 소개드릴 내용은 저희 플러스제로에서 개발 및 연구 중인 추천시스템 (Recommendation System)을 소개드리기에 앞서 보편적으로 많이 적용되는 추천 시스템을 소개드리려 합니다.
이번 포스트는 저희가 연구중인 추천시스템을 설명드리기에 앞서 많이 사용하는 추천 알고리즘의 방법과 플러스제로에서 바라보는 시각을 공유드리려 합니다.
Recommendation System(추천 시스템) in Real Life
TL;DR 추천 시스템은 데이터와, 고객(추천을 받는)의 이해와 알고리즘을 함께 포함합니다.
실생활에서의 추천 시스템을 예를 들자면, 제가 어릴때 만화책방을 자주 갔었습니다. 저는 책방에서 만화책과 소설책을 주로 빌려서 읽었었는데, 몇 가지 소설 시리즈를 빌려서 읽고 있을 때 즈음에 책방에서 카운터를 보고 계시던분께서 소설책을 하나 알려주시면서, 이 책이 제가 빌렸던 장르하고 비슷하고 읽어보니 재밌었다고 하시면서 소설책을 추천을 받았습니다. 물론, 꽤 장편의 시리즈 소설이였지만 추천을 받고 저 또한 굉장히 재밌게 읽었던 기억이 있습니다.
또 다른 추천시스템중에서 가장 가까운것은 유투브 영상 추천도 있죠. 유튜브는 “Up Next”를 위한 영상 추천은 사용자가 현재 보고 있는 영상을 통해 비슷한 영상을 추천하는 방법을 사용한다고 알려져 있습니다. 추가적인 유투브의 추천시스템과 관련해서 궁금하시다면, 아래의 블로그를 읽어보시면 좋을것 같습니다.
[On Youtube’s Recommendation System]
Top-N Recommendations
추천 시스템은 유저에게 다양한 아이템 리스트를 제공하는 방법을 주로 사용합니다. 여기서의 아이템은 적용하려는 도메인에과 목적에 따라 다를수 있습니다. 예를 들면, 유저가 Amazon과 같은 E-commerce에서 어떤 물건을 구매하면, 해당 물건과 관련이 있거나 해당 물건을 구매한 다른 유저가, 이 물건과 함께 구매한 물건을 추천 목록에 보여 줄수 있습니다.
Understand Data Types
추천 시스템을 실제로 적용하기전에 많은 분들이 사용하는 데이터로는 IMDB데이터를 한번쯤은 보셨을것 같습니다.
IMDB 데이터셋은 크게 2개의 데이터셋으로 구성되어 있습니다.
첫번째 데이터셋은 imdb에서 표기한 [ 영화의 ID, 영화의 제목, 장르 ] 로 구성된 영화 데이터셋과,
두번째 데이터셋은 유저가 해당 영화에 준 평점으로 [ 유저의 ID, 영화의 ID, 평점 점수, 시간 ] 으로 구성된 평점 데이터셋이 있습니다.
이 IMDB 데이터셋에서 중요한 점은, “어떤 유저가, 어떤 영화에 평점을 준 기록" 이라는 점 입니다.
이런식으로 유저의 행동이 관여되어 저장된 데이터는 “Explicit Data”로 추천 시스템을 구성할때 중요하게 작용합니다.
반대로, 유저가 직접 관여하지 않았지만, 어림짐작 할 수 있는 형태의 데이터는 “Implicit Data”로 가정 할 수 있습니다. Implicit Data는 웹사이트에서의 유저의 “Click”, “Scroll”, “Page View quantile”, “Purchased” 등 다양한 지표를 통해 해당 유저가 관심이 있는지 없는지를 이해 할 수 있는 데이터들 입니다.
하지만, Implicit Data를 사용할 때에는 많은 주의가 필요합니다. 한 예로 어떤 웹 사이트에 선정적인 이미지를 포함한 제품이 올라왔고, 해당 광고에 많은 Click이 발생하였다면, 이는 추천 시스템으로서의 기능을 상실하게 됩니다.
Recommendation Methods (Algorithms)
추천 시스템을 구성하는 방법 중, 대표적인 4가지에 대해 몇 가지 예시를 통해 공유드리려 합니다.
1) Content Based Filtering
콘텐츠 기반 필터링은 사용자가 구매한 이력을 기반으로 하여서 비슷한 제품을 추천 하는 방법입니다.
비슷한 제품인지를 판별하는 척도로는 대표적으로 “Cosine Similarity”를 사용합니다.
2) Collaborative Filtering
Collaborative Filtering (협업 필터링)은 유저의 활동을 기반으로 추천을 진행합니다.
A, B, C 유저가 있을때, A유저의 행동과 B유저 행동, C유저의 행동을 각각 비교하여,
C유저가 A유저와 비슷한 값을 보인다면, A유저에게는 C유저가 구매한 상품중에서 자신이
구매한 상품을 제외한 아이템을 추천 할 수 있습니다.
위의 그림과 같은 방법은 “User-User Collaborative Filtering” 이라고 합니다.
이와 비슷하게 Item을 기반으로 하게 되면 “Item-Item Collaborative Filtering”을 진행 할수도 있습니다.
3) Hybrid Recommendation System
기본적인 하이브리드 추천 시스템은 Content-Based-Filtering과 Collaborative-Filtering을 함께 사용하는 구조입니다. 그러나 시간이 지남에 따라 다양한 Filtering방법과, 다른 방법들을 함께 적용하는 구조입니다.
4) Matrix Factorization
Matrix Factorization은 User-Item 행렬을 통해 각 유저가 준 상품의 만족도를 표현하는 행렬을 통해, 유저가 보지 않았던 다른 상품의 만족도를 예측 하는 알고리즘 형태 입니다.
이러한 방식을 위해 SVD (Singular Vector Decomposition)와 같은 방법을 사용합니다.
따라서, Model-Based Recommendation 이라고 불리기도 합니다.
추가로 Kaggle의 [ H&M Personalized Fashion Recommendations ] 경진대회에서 1등을 차지한 팀은 다양한 Feature Engineering 과 ML 알고리즘을 통해서 진행하였다고 공유하였습니다.
Conclude
추천 시스템은 사용자와 저장되는 데이터를 이해하고 사용자에게 제공하는 Personalized Recommendation을 목표로 합니다.
그러나 이전 저희 블로그에서도 소개 드렸던 MLOPs의 중요성은 이런 Recommendation System에서는 더욱 중요시 되는 기술입니다.
실제 추천 시스템이 운영중에 나타내는 다양한 지표들 (인프라, 정확성 등)은 A/B 테스트로 가려낼 수 있기 때문인데요, 그렇기 때문에 알고리즘을 사용하는 추천 시스템은 주기적으로 학습을 다시 진행하고, 결과를 지속적으로 모니터링을 할 수 있어야 하기에 Recommendation “System” 이라 불리는것 같습니다.