-
[Recommender System] - 추천 시스템의 전반적인 내용 (1)Recommender System/추천 시스템 2018. 5. 12. 20:48
새 직장에서 본격적으로 일을 시작한 뒤 나의 메인 업무는 Recommender System이 되었다. 사실 이전부터 이 쪽 분야에 큰 흥미가 있었던지라, 어떻게 보면 운이 좋았다고 할 수도 있겠다. 원래 집에서는 잘 듣지도 않던 노래를 인공지능 스피커까지 구매하여 듣고, 각종 쇼핑몰 앱을 설치했으며 동영상 콘텐츠 스트리밍 유료결제까지 고민하고 있다. 문화생활도 할 겸, 추천 시스템과 친해지기 위한 노력의 일환이랄까.
하지만 학문적 베이스가 없는 나의 얕고 넓은 지식이, 추천 시스템을 만들고 고도화 하는 일을 하기에는 걸림돌이 될 수 있겠다는 생각이 들었다. 물론 데이터 과학을 통해 비즈니스를 창출할 수 있는 영역 중에 가장 넓은 폭의 지식과 다양한 경험이 필요한 분야라고는 생각하지만, 비즈니스맨이 아닌 엔지니어의 입장인 이상 Recommender System에 대한 학문적, 알고리즘적 심화 공부를 늦지 않게 시작해야겠다는 마음을 먹었다. 특히나 나의 도메인 영역인 e-commerce 분야는 관련 자료나 서적도 많지 않기 때문에 더더욱 공부가 필요하다.
이런저런 조사를 하며 논문을 읽다보니, 어느정도의 한계가 느껴져 여러 책도 주문하였다. 본격적인 공부에 앞서, 추천 시스템에 대한 전반적인 리서치를 진행했다. 본 포스팅은 그 내용을 정리한 것이다. 내용 구성의 일부분은 이곳과 각종 논문에서 많이 참고를 하였다. 추후 추천시스템 관련 포스팅은 'Building Recommendation Engines' 라는 책을 위주로 공부한 내용을 정리해볼 요량이다.
참고 문헌 및 사이트 :
•Recommender Systems in E-CommerceJ. Ben Schafer, Joseph Konstan, John Riedl•State of the Art Recommender System. Laurent Candillier, Kris Jack•Recommender Systems in E-Commerce. Sanjeevan Sivapalan, Alireza Sadeghian•A Survey of e-Commerce Recommender Systems Farida Karimova, PhD•Low-Rank Matrix Completion (2013) by Ryan Kennedy•Exact Matrix Completion via Convex Optimization Emmanuel J. Cand`es•http://leebaro.tistory.com/entry/SVD%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%B6%94%EC%B2%9C-%EC%8B%9C%E
C%8A%A4%ED%85%9C-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0•http://www.quuxlabs.com/blog/2010/09/matrix-factorization-a-simple-tutorial-and-implementation-in-python/1. 추천 시스템의 정의
우선 추천 시스템이란 무엇인지에 대한 정의가 필요하다. 추천이 무엇인지 굳이 정의까지 필요한가 싶지만 무엇이든 학문적, 연구적인 자세로 임할 때에는 이러한 접근법도 중요하다고 생각한다. 문제를 해결하다가 난관에 봉착하는 경우, 한 발 뒤로 물러서서 무언가를 생각할 때에 정의에 대해 곱씹어보지 않을까. 알고리즘을 해결하는 것에 앞서 목적함수를 설정하는 것처럼 말이다.
추천시스템에 대한 정의를 찾던 도중, 가장 인상적인 문구를 보았다. 추천 시스템, 혹은 추천 모델링은 '특정 시점'에 '특정 고객'이 좋아할 만한 리스트를 찾아주는 것이라는 문구였다. 무언가 시사점을 제시하는, 기술개발에 집착하는
나일부 개발자들에게 교훈이 되는 말인 것 같다. 예를 들어보자. 남북회담이 열리던 시점에서의 뉴스를 추천받고 싶을 때, 아무리 협업 필터링에 기반한 state of the art에 가까운 알고리즘을 사용하여 평소 관심사에 기반한 뉴스들을 추천한다고 한들 내가 지금 시점에서 좋아 할 만한 뉴스, 종전 선언에 관련된 뉴스를 보고싶어한다는 사실을 알지 못한다면 의미가 없다. 포털 페이지에 지금 내가 보고 싶은 뉴스가 떠있지 않다면, 충성도가 높지 않은 고객은 쉽게 그 페이지를 떠날 수 있다.그래서 특정 시점에 특정 고객이 원하는 리스트를 찾기 위해 우리는 고객의 정보를 살펴보고, 가지고 있는 전체 리스트(아이템)을 살펴보고, 때로는 시스템 외부의 정보들을 끊임없이 살펴보면서 이를 리스트에 반영할 수 있는 시스템을 만들어야 한다.
2. 추천 시스템이 고려할 요소
서비스 관점에서 추천 시스템을 구축, 개발하는 입장에서 고려할 요소는 크게 4가지 정도이다. 추천 시스템은 거의 대부분의 경우 B2C 비즈니스 환경에서 적용된다. 그래서 당연하게도 고객, 아이템을 고려해야 하고 추가적으로 시스템의 업데이트와 추천 시스템의 알고리즘적 성능을 고려해야 한다.
시스템의 업데이트를 고려한다는 것은 얼마나 자주 추천되는 아이템의 리스트가 업데이트 되는 지에 대한 것이다. 앞서 언급했던 남북회담이 열리던 시점에서의 뉴스 추천의 상황을 생각해볼 때, 추천의 영역마다 아이템 리스트의 업데이트가 얼마나 빠른 주기로 이루어지는지가 매우 중요할 것이다.
추천 시스템에서의 알고리즘적 성능이란, 좁은 의미에서는 추천 모델의 계산량이나 연산 속도를 의미한다. 현재 state of the art의 취급을 받고 있는 CF(Collaborative Filtering)이나 DL(Deep Learning)의 경우 다수의 Hadoop Cluster 환경 등의 빅데이터 시스템이 안정적으로 구축되어 있지 않은 한, 좋은 알고리즘적 성능을 가진 모델은 아니라고 할 수 있다. 이 때문에 최신의 알고리즘보다는 훨씬 쉽고 간단하면서도 연산량이 작고, 그럼에도 불구하고 고급 알고리즘들과 비슷한 성능을 낼 수 있는 Association Rule과 같은 알고리즘들이 e-commerce 영역에서는 여전히 널리 활용되고 있다.
또한 넓은 의미에서의 알고리즘적 성능은 빅데이터를 처리할 수 있는 좋은 환경을 의미한다. 대부분의 추천 시스템은 대량의 정보를 이용하여 추천하는 B2C 비즈니스 모델이기 때문이다. 연산량이 적은 알고리즘을 사용한다고 해도, 수 많은 고객들이 이용하는 시스템의 경우에는 좋은 환경을 구축하지 못했다면 장애가 생길 여지가 많다.
3. 추천 시스템의 장애 요소
추천 시스템에서의 가장 널리 알려진 장애 요소는 Sparsity Problem이다. 추천할 아이템과 고객은 계속해서 늘어난다. 이에 따라 고객이 실제로 소비하게 되는 콘텐츠나 아이템의 비율은 현저하게 감소하게 된다. 이를 알고리즘적인 관점에서 Sparsity Problem이라고 한다. 차원의 저주를 생각하면 될 것이다. 물론 어느정도의 임계치는 있겠지만 서비스가 성장하는 단계에서는 더욱 심하게 나타나는 현상이다. 특히나 e-commerce 같은 영역에서는, 인기 상품이나 카테고리는 한정되어 있지만 서비스의 양적 향상은 끊임없이 일어난다. 지금처럼 소비의 헤게모니가 오프라인에서 모바일로 거의 다 옮겨가는 상황에서는 대부분의 서비스가 양적 팽창이 일어나고 있기 때문에 한 번쯤은 겪어볼만한 문제라고 할 수 있다. 디지털 환경에서는 '추천'이라는 타이틀을 달고 리스트가 노출되는 영역이 한정적이기 때문에 아이템의 리스트를 추려내는 작업은 더더욱 어려워진다. 그래서 추천 시스템에서의 기술적 발전은 대부분 이 문제를 해결하는 것을 염두에 두고 있다.
다음으로, 영화 추천이나 맛집 추천 서비스가 아닌 대부분의 추천 서비스에서 나타나는 문제점인 Information Utilization Problem이 있다. 이는 추천 시스템 구축에 활용하기 위한 데이터, 정보들을 올바르게 활용하기 위한 고민에서 나온 문제점이라고 할 수 있다. 이를 이해하기 위해 e-commere에서의 추천 시스템에서 고객의 행동을 생각해보자. 대부분의 고객들은 상품을 눌러보고, 다른 상품도 살펴보고, 본인 기준에 마음에 든다면 장바구니에 넣어뒀다가 이를 구매하기도 한다. 이런 정보들을 Implicit Score(암묵 점수)라고 한다.
왓챠나 넷플릭스 같은 영화 추천 서비스에서처럼, 사용자들은 아이템에 대한 명확한 평가를 내리지 않는다. 단지 상품을 눌러보고, 관심 표시를 하거나 구매 하는 정도이다. 상품에 대한 리뷰를 작성하거나 별점을 주는 고객은 극소수에 가깝다. 이러한 로그 데이터 속에 숨어있는 정보를 이용하는 고민이 필요하다. 하지만 이것이 쉽지 않기 때문에 Information Utilization Problem 이라고 부르는 것이다. 만약 고객의 구매 목록 데이터가 있을 때, 구매가 완료되었다고 과연 이 데이터가 상품에 대한 호감을 나타내는 데이터라고 할 수 있을까? 환불이나 교환이 일어났다면? 이 모든 것을 고려하여 데이터를 활용하기 용이한 Explicit Score(명시 점수 : 영화 평점에 대한 rating 같은 점수)처럼 데이터를 Utilization 하는 과정이 필요할 것이다.
그렇다고 Explicit Score가 항상 좋은 데이터인 것은 아니다. 대부분의 잘 정리된 명시 점수의 경우 Sparsity Problem을 심각하게 겪을 것이다.
여기까지 추천 시스템이란 무엇인지, 추천 시스템이 고려할 요소는 무엇이고 어떤 문제점이 있는지를 대략적으로 살펴보았다. 다음 포스팅에서는 과거에서부터 현재까지의 추천 시스템의 흐름과 모델링(알고리즘)에 대해 대략적으로 살펴보도록 하겠다.
'Recommender System > 추천 시스템' 카테고리의 다른 글
[Recommender System] - Python으로 Matrix Factorization 구현하기 (32) 2018.08.01 [Recommender System] - MF(Matrix Factorization) 모델과 ALS(Alternating Least Squares) (2) 2018.07.16 [Recommender System] - Spark로 연관 규칙(Association Rule) 구현하기 (2) 2018.06.25 [Recommender System] - 추천 시스템에 사용되는 알고리즘들 (12) 2018.05.12 [Recommender System] - 추천 시스템의 전반적인 내용 (2) (5) 2018.05.12 댓글