HomeAbout
Machine Learning
선추천후감상- Learning Recommendation
안창배
June 06, 2022
7 min

Table Of Contents

01
소개
02
추천 시스템과 머신 러닝
03
노출, 그리고 더 많은 노출.
04
추천 모형 학습하기
05
나가며

| 💁🏽‍♂️ 본 포스팅의 원문은 이곳에서 확인하실 수 있습니다!

소개

안녕하세요! 데이터 과학자 Dane입니다. 저는 머신러닝을 포함해 데이터와 관련된 많은 것을 좋아하지만, 그 중에서도 특히 추천/개인화를 좋아합니다. 또 운이 좋게도 카카오 추천팀을 비롯한 여러 곳에서, 나름대로 다양한 종류의 추천/개인화를 실무적으로 혹은 개인적인 흥미로 경험하고 공부해왔습니다. 최근 추천과 개인화를 공부하거나 도입하고자 하는 많은 분들께 제 경험을 공유하면 재밌고 유익하지 않을까 해서 “선추천후감상” 시리즈를 쪄보기로 결정했습니다. 사실 내년도 버킷 리스트가 추천 시스템 개론을 쓰는 것이라서 그 전초 작업이기도 합니다. 선추천후감상 시리즈는 5부에 걸쳐 이루어질 것이며, 1부는 추천 시스템 평가와 관련한 개괄(기본적인 개념과 전제되는 환경 등), 2부는 추천 시스템의 학습, 3부에서는 추천 모델의 배포 유형을 다루며 다양한 가상 시나리오와 실제 업무 경험을 녹여보겠습니다. 4부와 5부에서는 최신 연구 동향 및 추천 서비스 기술 동향을 살펴보려고 합니다. 엔지니어 분들이나 당장 도입이 급하신 분들은 3부가 제일 재밌으실 거라고 생각합니다. 본 시리즈는 독자들이 머신러닝에 친숙하며 추천시스템에 어느 정도 관심이 있어 기본적인 개념들은 안다고 전제할 것입니다. 예컨대 행렬 분해를 자세히 설명할 계획은 없으며, 관련된 좋은 블로그들도 이미 많다고 생각합니다. 여기서는 추천 시스템과 관련한 여러 개념을 쪼꼼 와닿게, 그리고 가능하면 재밌게 :) 설명하는 것, 그리고 실전적인 도입에 도움이 되고자 하는 것이 목표입니다. 명확한 정의와 설명, 수식 등이 궁금하신 분은 참조 논문들을 봐주세요. 또 더 토의하고 싶은 게 있다면 댓글이나 메일 등의 질의 늘 환영합니다!

fig_0
뜬금없지만 저는 일 벌리는 걸 좋아하는 ENFP입니다

추천 시스템과 머신 러닝

개인화의 목적과 그 결과물은 정말 맥락에 따라 다르지만, 가장 흔히 생각하는 추천 시스템은 과거의 기록을 토대로 고객이 좋아할 만한 아이템을 뽑는 것입니다. 간단한 몇 가지의 규칙으로도 개인화는 이루어질 수 있겠지만, 확장가능하고 성능 좋은 개인화를 달성하기에는 역시 머신러닝이 궁합이 좋습니다. 우리가 알고 있는 가장 유명한 추천 서비스인 유튜브의 추천 알고리즘 또한 머신러닝, 좀 더 구체적으로는 딥러닝을 이용합니다.

fig_1


하지만 머신 러닝에 익숙하신 분도 처음 추천을 접할 때는 많은 것들이 생소할 수 있습니다. 대부분의 추천 입문서는 연관성 분석Apriori나 행렬 분해Matrix factorization 알고리즘을 먼저 소개하는데, 이런 알고리즘들이 크게 어렵지는 않지만 당장 빠르고 익숙한 트리 기반의 부스팅 모델을 쓰고 싶은 성질 급한 저에게는 조금 갑갑하기도 했습니다. 뒤에서 보겠지만 분류나 회귀, 혹은 군집화와 같은 일반적인 머신러닝 알고리즘으로 개인화를 푸는 것은 큰 문제가 없으며 오히려 그게 더 적합한 경우도 많습니다. 그렇다 할지라도 추천 시스템은 고유의 특징을 분명 가지고 있으며, 이를 이해하고 활용하는 것은 성능과 운영에 있어 무척무척무척 중요합니다.


앞으로 말하는 일반적인 머신 러닝은 정형 데이터 혹은 태블로 데이터에 대한 선형 모형이나 부스팅 모형 등입니다. 이미지나 자연어 등의 비정형 데이터는 일단은 제외하겠습니다. 예컨대 iris나 titanic 데이터셋은 여기에 속하지만, cifar나 mnist는 여기에 속하지 않습니다. 일반적으로 머신러닝, 그 중 지도 학습은 목적 변수의 형태에 따라 수치형을 예측하는 회귀Regression 문제와 범주형을 예측하는 분류Classification 문제로 나뉩니다. 추천 시스템은 회귀 문제가 될 수도 있고, 분류 문제가 될 수도 있습니다. 사실 정렬Sorting이나 순위Ranking 문제로 해석되는 경우도 많습니다. 각 경우의 일반적인 시나리오들을 예시로 살펴보겠습니다.

추천 시스템: 회귀 모형

가장 유명한 데이터 예시는 MovieLens 데이터셋일 것입니다. 해당 데이터셋은 162,000명의 유저가 62,000개의 영화에 남긴 평점으로 이루어져있으며, 이러한 평점을 예측하는 문제를 추천 시스템 입문 과정에서 많이 다루고 있습니다. 사실 평점 정보를 회귀 모형으로 풀이하는 건 바람직하지 않을 수 있습니다. 4점이라는 평점은 2점의 2배만큼의 가치를 가지고 있지 않지만, 회귀 모형은 그렇다고 해석합니다. 즉 평점 정보는 서열 척도ordinal scale로 다루는 것이 바람직하지만 회귀 모형은 이를 고려하지 않는다는 것입니다. 그럼에도 불구하고 회귀 모형으로 풀어도 어느 정도의 성과를 기대할 수는 있으며, 서열 척도를 다루는 방법론 외에도 정규화, 버킷화 등 다양한 방법을 이용하여 그 성능을 끌어올릴 수 있습니다.


fig_2
아직 운영 중입니다!

한 가지 특기할 점은 이러한 평점 데이터가 고객이 명시적으로 표시한 경우에만 데이터가 남으며 그 외에는 다른 정보가 없다는 점입니다. MovieLens 데이터 셋의 경우에는 오직 평점 데이터만이 제시되며, 관람이나 클릭 여부 정보는 존재하지 않습니다. 실제 서비스를 운영하는 입장이라면 아마 좀 더 풍부한 정보(관람, 재관람, 클릭, 노출 등)를 가지고 활용할 수 있을 것입니다. 이러한 맥락에서 평점 데이터는 사실 explicit feedback으로 풍부하거나 일반적인 데이터는 아닙니다. 뒤에서는 멜론이나 뉴스와 관련된 다른 예시들을 더 살펴보겠습니다.


추천 시스템: 분류 모형

추천 시스템의 니즈가 큰 이커머스에서는 분류 모형이 조금 더 일반적일 수 있습니다. 웹/앱 서비스에 접속한 유저는 메인 페이지나 검색 페이지, 상세 페이지 등에서 다양한 아이템에 노출이 되며(이를 impression이라고 합니다) 그 중에 일부를 클릭(user feedback 중 하나입니다)하거나 아무 것도 클릭하지 않습니다. 우리는 클릭 여부나 혹은 그 이후의 구매 여부에 대한 이진 분류를 통해 각 고객이 어떤 아이템을 클릭(혹은 구매)할지 않을지를 예측할 수 있습니다.

유저가 아이템을 클릭(혹은 구매)한 경우에는 일반적으로 기록을 잘 남기지만, 노출된 아이템에 대해 유저가 아무 행위도 하지 않은 경우에는 아예 기록조차 남기지 않는 경우가 많습니다. 앞의 영화의 예시에서 말한 관람이나 클릭 여부는 분류 모형의 목적 변수로 활용될 수도 있는 경우이며, 명시적으로 유저의 선호가 나타나지 않기 때문에 앞서의 평점과 달리 implicit feedback으로 취급합니다. 평점은 유저의 선호를 명시적으로 드러내기 때문에 더 유용한 반면 그 양이 희소하기 때문에 범용적으로 활용하기 어렵습니다. 영화를 관람한 유저 중 평점을 남기는 유저는 아마 10%도 되지 않을 것이며, 다른 서비스의 경우에도 명시적으로 피드백(리뷰를 포함한)을 남기는 경우는 소수에 불과합니다. 일반적으로 개인화 모형은 implicit feedback을 잘 활용하는 데에 집중합니다.

fig_4
즐겨보는 승우아버님. 31만회의 조회 중 좋아요는 고작 5천이고, 댓글은 453개에 불과합니다.


노출 여부는 연구보다는 실무에 있어 무척 중요한 정보이며, 이것이 왜 중요하고 어떻게 쓰이는 지 살펴보도록 하겠습니다.

노출, 그리고 더 많은 노출.

MovieLens를 포함한 많은 공개 데이터 셋 노출 데이터 없이 행동 데이터만이 기록되어 있는 경우가 많습니다. 하지만 노출 데이터는 실제 추천 시스템을 적용할 때 무척 중요합니다. 왜 중요한지 두 가지 관점에서 살펴보도록 하겠습니다.

모형 평가하기

좀 더 쉬운 부분은 모형의 평가라는 측면입니다. 실무에서 우리는 결국 추천 모형을 개발하여 서비스하는 것이 목표이고, 배포된 추천 모형의 성능은 반드시 여러 측면에서 평가되어야 합니다. 그리고 당연한 말이지만 노출 데이터가 있어야 우리는 추천 모형을 좀 더 정확히 평가할 수 있습니다.

fig_5
뉴스 추천 맛집 데이블의 회사 소개서 중 한 페이지입니다.


뉴스 추천 시나리오를 통해 간단히 노출이 왜 중요한지 살펴보겠습니다. 제가 뉴스 기사 플랫폼에서 추천 모형을 배포했다면, 해당 모형의 성능을 평가해야할 것입니다. 일반적으로 모형의 평가는 A/B테스트를 통해 이루어집니다. 가장 간단한 예시로 전체 기사의 랜덤 노출을 A군, 그리고 개인화 추천 모형의 추천 노출을 B군으로 하는 A/B 테스트가 진행된다고 하겠습니다. 실시간성이나 실험 규모, 엔지니어링 공수 등에 대해서는 단의의 단순성을 위해 생략하겠습니다. 제가 이 테스트를 진행한다면 여러 지표를 살펴보겠지만 가장 먼저 주요 지표로 전환률, CTR을 볼 것입니다. 뉴스를 비롯한 여러 플랫폼에서 전환률은 주요 지표 중 하나로 취급되지만, 그 정의가 클릭 횟수 / 노출 횟수이기 때문에 노출 데이터 없이는 구할 수 없습니다. 전환률 외에도 재방문률, 체류시간, 클릭 횟수 등을 주요 지표로 참고할 수 있지만 노출 데이터가 존재하지 못해 전환률을 참고조차 하지 못하는 건 바람직하지 않습니다. 또한 추천 시스템에서 중요하게 다루는 다양성diversity과 의외성serendipity 같은 지표를 구할 때도 노출 정보를 함께 확인할 수 있는 것이 바람직합니다. 유저가 다양한 뉴스에 노출되었지만 일부 뉴스만 좋아한 것인지, 소수의 뉴스에만 노출되어서 그것밖에 볼 수 없었던 것인지 알기 어렵습니다. 사실 실제 서비스에서 로그 데이터를 관리하기 위해서는 많은 엔지니어링 공수가 필요합니다. 대다수의 플랫폼에서의 전환률은 그다지 높지 않기 때문에 노출 데이터는 클릭 데이터보다 수십 배 이상 양이 많습니다.

모형 학습하기

학습 영역에서 노출 정보를 활용하는 것은 평가의 영역보다 훨씬 미묘하고 어렵습니다. 대부분의 독자분이 경험해 봤을 유튜브를 예로 들어보겠습니다. 유튜브는 개인화 영역에서 가장 발달된 서비스 중 하나이며, “유튜브 알고리즘이 인도했다”는 말 또한 심심찮게 들립니다. 그렇다면 유튜브의 메인 페이지에 로그인 된 상태에서 도달했을 때의 시나리오를 살펴봅시다.

fig_6
노마드 코더와 최재천 교수님, 가수 폴 킴, 경사하강 등 제 관심사가 잘 반영된 갓튜브의 개인화입니다.


크롬을 기준으로 약 8개의 영상이 메인 페이지에서 제안됩니다. 개인적인 경험을 토대로 보았을 때 우리는 이 중 한 영상을 클릭하거나, 새롭게 관심있는 주제사에 대해 검색하거나, 유튜브를 완전히 떠나거나, 여타 다른 클릭(구독 채널을 클릭하거나 내 동영상을 클릭하거나 등등)을 수행할 것입니다. 이 중 만약 우리가 8개의 영상 중 하나의 영상을 클릭했다면, 최소한 나머지 7개의 영상보다는 클릭한 영상을 좋아했음이 명시적으로 드러납니다. 여기서 실수로 클릭했다거나, 8개의 영상 모두를 확인하지 못한채 급하게 하나의 영상을 클릭했다거나 하는 등의 시나리오는 유의미할 수 있지만 여기서는 무시하겠습니다. 그렇다면 아마도 제안된 7개의 영상은, 다른 임의의 영상보다는 negative한 샘플일 가능성이 높습니다. 이 부분은 추천 시스템의 학습 과정을 전반적으로 설명하지 않고서는 말하기가 어렵습니다. 여기서 추천 시스템의 학습 유형을 간단하게 소개한 뒤 2부에서 자세히 다뤄보겠습니다.

추천 모형 학습하기

추천 모형의 유형은 정말 다양한데, 여기서는 제가 많이 관찰하거나 운영한 몇 가지 쉬운 케이스들을 negative sample의 맥락과 함께 간단히 살펴보겠습니다. 좀 더 자세한 내용은 다음 2부에서 다뤄보겠습니다. 딥러닝이나 강화학습 기반의 최신 연구들, 예컨대 AE나 Contextual bandit 등의 논문들이 최근에는 많이 나오는 것 같지만 이런 연구 동향은 나중에 따로 다루도록 하겠습니다. 2020년 RecSys 연구 동향(논문, 패널 톡)은 사내 스터디로 한 번 분석해봤었는데 굉장히 재밌었어서 2021년도 해보려고 합니다.

행렬 분해 Matrix factorization

SVD로부터 시작된 행렬 분해 기반의 개인화 모형들은 추천에 입문해보신 분이라면 한 번씩 들어보셨을 것입니다. 개인적으로 가장 흔하고 쉬우며 나쁘지 않은 성능을 보이는 모형은 ALS라고 생각합니다. ALS나 BPR 같은 행렬 분해 알고리즘은 보통 클릭과 같은 positive feedback 정보만을 활용해 학습이 가능한데, BPR의 경우는 positive feedback이 없는 경우를 negative sample로 취급하여 모형을 학습합니다. 이때 negative sample은 전체 popularity를 고려하여 샘플링하여야 적절한 학습이 됩니다. 이 부분은 다음에 좀 더 자세히 얘기하겠습니다. 논문은 크게 어렵지 않으니 한 번 읽어보시길 권해드립니다.

Factorization Machine(이하 FM)

FM은 반드시 추천에서만 사용되는 모델은 아니며, 다른 머신러닝 모델에서도 활용됩니다. 하지만 FM은 추천 시스템 중 hybrid(CF + CBF) 모형으로 많이 쓰이며 좀 더 나아가서는 Deep FM 계통의 추천 모형과도 자연스럽게 이어집니다. FM 또한 negative sample과 positive sample을 대조하여 학습합니다.

fig_7
첨엔 뭔소린지 토나왔는데 계속 보니 토나오네요. 논문에서 가져왔습니다.


Graph based recommendation(이하 그래프 모형)

소셜 네트워크에서 많이 발달한 그래프 모형은 개인화 영역과도 궁합이 좋습니다. 유저와 아이템을 node, feedback을 edge로 이해하면 여러 그래프 모형을 추천에 사용할 수 있습니다. 작년에 친한 친구와 Github repository 추천 프로젝트를 완결성 없이 진행해본 적이 있는데, 여러 모형 중 그래프 기반 모형이 제일 잘 작동했었습니다. 개인적으로 무척 좋아하긴 하는데, 써먹기엔 진입 장벽이 비교적 높은 편입니다. 왜 그래프 모형이 잘 작동할 수 있었는지는 다음 편에서 자세히 말해보겠습니다.

Multi Armed Bandit(이하 MAB)

MAB는 A/B 테스트에서도 많이 활용되는데, 추천 모형에서도 앙상블 기법으로 유용하게 쓰일 수 있습니다. 여기서는 말하는 MAB는 주로 톰슨 샘플링을 가리킵니다. 카카오 추천팀에서 MAB를 유용하게 사용하고 있으며(참조 블로그), 개인적으로도 MAB가 쉽게 성능을 극대화하는 모습을 많이 보았습니다. MAB는 반드시 노출 데이터가 필요하며, 실시간으로 추천 성능을 극대화할 수 있지만 개발 공수가 좀 필요합니다. 다음 편에서 어떻게 MAB를 추천 모형에서 사용하고 왜 성능이 좋은지 조금 더 자세히 설명드리겠습니다.

fig_8
과거 토스 증권에서 제공했던 "함께 산 회사" 기능. 여기에 MAB를 적용하고 싶었었습니다.


나가며

선추천후감상 시리즈를 통해 얘기하고자 하는 것은 추천 시스템, 개인화를 실제 서비스에 적용하는 여러 과정을 전달하여 다른 분들의 도입에 도움이 되고자 하는것입니다. 이번 글에서는 추천 시스템이 어떤 문제를 푸는지, 어떤 방법론들이 활용될 수 있는지 몇 가지 사례와 함께 살펴보았습니다. 아직은 무엇을 말하고자 하는지 다소 애매모호할 것 같지만 2부에서 학습, 3부에서 배포를 다루고 나면 그 모호함이 해소되리라 믿습니다.

쓰다보니 참 하고 싶은 말은 많은데 체계적으로 정리하는 것이 어렵네요. 이렇게 블로그로 정리한 뒤 내년에는 추천 시스템 개론을 꼭 써보고 싶습니다. 그럼 다음 글에서 뵙겠습니다.

fig_9
저만 즐거웠다면 죄송합니다

References

1. Hu, Yifan, et al. “Collaborative Filtering for Implicit Feedback Datasets.” 2008 Eighth IEEE International Conference on Data Mining, Dec. 2008. Crossref, https://doi.org/10.1109/icdm.2008.22.

2. Steffen Rendle, Christoph Freudenthaler, Zeno Gantner, and Lars Schmidt-Thieme. 2009. BPR: Bayesian Personalized Ranking from Implicit Feedback

3. Covington, P., Adams, J., & Sargin, E. (2016). Deep Neural Networks for YouTube Recommendations. Proceedings of the 10th ACM Conference on Recommender Systems. https://doi.org/10.1145/2959100.2959190

4. Huifeng Guo, Ruiming Tang, Yunming Ye, Zhenguo Li, and Xiuqiang He. 2017. DeepFM: a factorization-machine based neural network for CTR prediction. arXiv preprint arXiv:1703.04247 (2017).

5. MovieLens dataset

6.카카오 추천팀: MAB & LDA


Tags

머신러닝데이터사이언스개인화추천시스템

Share


Related Posts

선추천후감상- Learning Recommendation
2022-07-11
4 min
© 2023, All Rights Reserved.
Powered By

Quick Links

About UsOfficial Page

Social Media