brunch

You can make anything
by writing

C.S.Lewis

by 전영환 Nov 03. 2019

Grab을 Everyday app으로 만드는 방법

Tech Review of Grab #1

Making Grab's everyday app super


이번 리뷰에서는 Grab 서비스에서 서비스를 어떻게 더 풍성하게 만드는지 알아보고자 합니다. 매일 사용할 수 있는 App 서비스로 발전시켜나가는 과정에 있어, 다양한 데이터들이 서비스에 어떻게 녹아들어 가 있는지 알아보고자 합니다.




Grab은 동남아에서 많은 사람들이 매일 사용하는 서비스로서, ride-hailing, food delivery, payment 등의 기능을 포함하고 있다. Grab의 목표는 사람들이 이 서비스에 더 잘 접근하여, 좋은 가치와 편의성을 얻어가게 하는 데 있다. 그래서 우리는 우리의 ecosystem을 확장하여, bill payment, hotel booking, trip planner, video 등을 제공하고자 한다. 우리는 Grab 앱을 유용한 기능과 서비스로 포장하는 것만이 아니라, 각각의 소비자들에게 특별하고 개인화된 경험을 제공하고자 한다.


우리는 이러한 Super App을 만들기 위하여, 다양한 동남아의 파트너들과 협력한다. 우리가 협력하고 있는 다양한 파트너들은 Grab Feed에서 볼 수 있다. 여기에서 Grab과 파트너에 대한 다양한 컨텐츠를 제공하며, 사용자들이 가치 있는 경험을 하게 한다. 그 예시는 아래와 같다.



Waiting for the next promo? Check the Feed.
Looking for news and entertainment? Check the Feed
Want to know if it's a good time to book a car? CHECK. THE. FEED


Grab Feed에 다양한 컨텐츠, 서비스, 카드 들을 추가하면, 사용자들은 그들이 원하는 정보를 찾기 어려워질 수 있다. 그렇기 때문에 사용자의 프로필에 가장 적하한 정보들을 구별하여 보여줄 수 있도록 노력하고 있다. 이것은 우리 서비스에서 가장 중요한 고객에 있어 매우 중요한 것이며, Grab에서의 경험을 각 고객들 별로 개인화하는데 중점을 맞추고 있다.


동남아와 같이 매우 다양화된 시장에서 성공하기 위해서, 우리는 사용자들이 어떠한 종류의 정보들을 보고 싶어 하고, 보아야 하는지 이해하기 위해, 데이터를 깊이 있게 활용한다. 이번 글에서는 Grab Feed의 추천 로직과 전략뿐 아니라 future roadmap에 대해 이야기할 것이다.



Start your Engines



우리가 풀고자 하는 문제는 Recommendation problem(추천 문제)로 알려져 있다. 간단히 말해서, 이 문제는 고객들에게 서비스와 컨텐츠를 추천하기 위해, 그들의 preference를 유추하는 문제이다. Grab Feed에서 다른 유형의 소비자들에게 보여주고 싶은 다양한 컨텐츠들을 가지고 있다. 여기서 중요한 것은 모든 사람들이 양질의 제공받는다는 확신을 주는 것이다.


이를 해결하기 위해 우리는 사용자가 소비해야 할 컨텐츠의 유형을 제안하는 recommendation engine을 구축하였다. 추천을 하기 위해서, 우리는 3가지 factor들을 이해하여야 한다.


1. Users.

사용자들이 어떻게 Grab을 사용하였는지 유추할 수 있는 것은 많다. 예를 들어 그들이 사용한 ride의 수, 배달시킨 음식의 종류, 구매한 movie voucher들, 체험해본 게임 등이 있다. 이 정보는 사용자의 preference를 더 잘 이해할 수 있게 해 주며, 그들의 프로필을 관련 있는 적절한 컨텐츠와 연결시키도록 한다.


2. Items

이것은 컨텐츠의 특성을 의미한다. 컨텐츠의 유형(video, game, rewards, etc)과 소모성(purchase, view, redeem)을 고려해야 한다. 또한 store의 구매 가능 시간, reward를 위해 소비해야 하는 point, GPS 정보 등의 metadate도 활용해야 한다.


3. Context

이는 사용자가 컨텐츠를 소비하는 설정과 관련이 있다. 하루 중 시간, 사용자의 위치, 현재 feed category 등이 있다.


세 가지 factor의 signal들을 활용하여, 우리는 card set에 순위를 매겨 사용자들에게 제공한다. 이것에 대해서는 다음 섹션에서 살펴보겠다.



Understanding our User


위에서 언급한 signal들로부터 사용자의 preference를 해석하는 것이 큰 도전이며 끝없이 실험해나가야 한다. 느리지만 분명하게, content preference를 측정하는 방법을 개선해나가고 있다. 우리는 두 가지 분야를 통해 살펴보고 있다.


1. Action.

우리는 모든 interaction들이 동일하다고 생각하지는 않는다. 카드를 좋아한다는 것이 실제로 좋아하는 것을 의미하는가? 사용자는 사용자의 친구와 동일한 비율로 어떠한 것을 좋아할 것인가? Transaction은 어떠한가, 이것들이 더 선호되는가? Feed는 사용자가 플랫폼에 피드백을 제공할 수 있는 다양한 방법들을 제공한다. Like, Click, Swipe, View, Transaction 등등 다양한 event들을 피드백 방법으로 제공하고 있다.

모델에 기반하여, 우리는 약간 다른 접근을 한다. 각 event의 중요도를 학습하여, rating을 예측할 수도 있다. 또는 각 이벤트의 확률을 예측하여, 그에 따라 순위를 매길 수도 있다.


2. Recency

오래된 상호작용(interaction)은 새로운 것만큼 유용하지 않을 것이다. Feed는 지속적으로 진화하고 있는 제품이다. 그렇기 때문에 사용자 선호도도 계속 진화한다. 오래된 상호작용의 weight를 낮추지 못하면, 우리의 추천은 더 이상 사용자들에게 의미 있지 않을 것이다.



Optimising the Experience



실행 가능한 Recommendation engine을 만드는 데는 몇 가지 단계가 필요하다. 반복적으로 작업하면서, 우리는 사용자와 관련 있는 컨텐츠를 결정하는 모델을 만드는 데 있어 몇 가지 주요한 recommedentation 전략을 생성할 수 있다. 각각의 전략들은 아래와 같다.


1. Popularity

이 전략은 Trending recommendation으로 더 잘 알려져 있다. Online clickstream event를 캡처하고 이것을 집계하여, 사용자들에게 어떠한 것이 모두에게 이 시점에 대중적으로 인기 있는지를 보여준다. 대중의 소리를 듣는 것은 일반적으로 효과적인 전략이다. 또한 새로운 사용자들에 대한 정보가 없는 경우, cold start problem을 겪게 되는데, 이 문제를 해결해준다.


2. User Favourites

우리는 사용자들이 서로 다른 취향을 가지고 있고, 사용자들이 컨텐츠들에 참여하려 한다는 것을 이해한다. 우리는 개개인의 engagement와 사용자의 진화하는 preference들을 캡처하여 이해하는 전략을 취한다.


3. Collaborative Filtering

매일 사용할만한 Super App을 구현하는 데 있어, 사용자들이 서로 다른 서비스 경험을 하게 하는 것은 중요하다. 사용자들에게 Discoverability를 제공하기 위해, 우리는 유사한 사용자들을 연구하여, 그들이 가지고 있는 유사한 preference를 밝혀낸다. 그리하여 다른 사용자들에게 컨텐츠를 가이드하고 제안하는 데 사용할 수 있다. (이 부분에 대한 자세한 설명은 이전 리뷰 Tech Review of Netflix #2를 보시면 자세히 설명되어 있습니다.)


4. Habitual Behaviour

사용자들은 특정한 것을 원하는 경우가 있고, 우리는 그들이 원하는 것을 찾기 위해 끝까지 scroll을 하는 것을 원하지 않는다. 우리는 Habitual recommendation을 이러한 문제를 해결하기 위하여 개발하였다. 따라서 사용자가 항상 Feed를 사용하여 점심시간에 음식 선택을 하거나, 일요일 아침에 ride peak를 사용한다면, 우리는 이러한 경우를 Feed에서 해결해줄 수 있다.


5. Deep Recommendations

우리는 어떻게 Feed data를 활용하여 플랫폼 전체의 사용량을 높이는 방법을 보여주었다. 하지만 플랫폼 데이터를 활용하여 사용자의 feed behavior를 유도하는 것은 어떠할까? 여러 business로부터 User activity들을 embedding 하여, clickstream 데이터를 보완하여 각 사용자들의 컨텐츠 preference를 결정할 수 있다.


이 모든 전략들을 활용하여, 사용자들에게 최선의 추천을 제공할 것이다. 이러한 결정은 사용자들에 대한 정기적일 실험과 연구를 통해 결정된다.



Always Learning


우리는 사용자에 대해 끝없이 학습하고 재학습 합니다. 행동을 이해하는데 다양한 방법이 있고, 다양한 전략을 포함시키는 다양한 방법들이 있습니다. 우리는 App에서 최고의 개인의 경험을 제공하기 위해, 반복적으로 학습합니다.


사용자의 Preference와 최선의 전략을 정의하기 위해, 우리는 다양한 사용자들에게 다양한 configuration의 Recommendation engine을 노출시킬 수 있는 실험 플랫폼을 개발하였다. 우리의 추천 품질을 모니터링하기 위하여, Interaction, Clickthrough, Engagement rate와 간은 online metrics를 측정한다. 또한 Recall@K 혹은 Normalized Discounted Cumulative Gain(NDCG)와 같은 offline metric도 측정한다.



Future Work

Multi-objective optimisation for business and technical metrics

Building out automation pipelines for hyperparameter optimisation

Incorporating online learning for real-time model updates

Multi-armed bandits for user personalised recommendation strategies

Recsplanation system to allow stakeholders to better understand the system




지난 리뷰 보기

https://brunch.co.kr/@andrewhwan/62

https://brunch.co.kr/@andrewhwan/63




이 글은 아래의 원문을 번역/의역 및 요약하였습니다. 중간중간 파란색으로 표시된 글씨는 번역자의 견해입니다.

https://engineering.grab.com/grab-everyday-super-app




브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari