[re:Invent 2019 세션 레포트] Delight your customers with ML-based personalized recommendations #reinvent

안녕하세요! 클래스메소드 주식회사 의 김태우입니다!

저는 이번 re:Invent 2019 컨퍼런스에 머신러닝 관련 토픽들을 집중적으로 듣고싶어서 머신러닝 관련 세션과 핸즈온에 잔뜩 reserve 해두었습니다. 본 세션은 그중에서도 첫번째로 들었던 Delight your customers with ML-based personalized recommendations 라는 제목의 세션입니다.

머신러닝 지식이 전혀 없이도 사용할 수 있는 Amazon Personalize 서비스를 Coursera 와 Voodoo 라는 글로벌 팀에서 어떻게 사용했는지, 아키텍쳐 레벨에서도, 코드레벨에서도 공유받을 수 있었던 정말 좋은 세션이었습니다.

목차

Amazon Personalize 란?

Amazon Personalize 란 개인맞춤형 추천 알고리즘을 머신러닝 기술과 접목시킨 AWS 의 완전관리형 서비스입니다. 딥러닝 및 머신러닝에 대한 지식이 전혀 없어도 사용가능하다는 점에서 굉장한 메리트가 있습니다. 사내에 머신러닝 전문가가 없어도 충분히 Amazon 수준의 추천 알고리즘을 손쉽게 적용할 수 있는데요, 본 세션에서 후반부에 나와서 발표해주셨던 Coursera 머신러닝팀 매니저가 2018년도에 시니어 머신러닝 엔지니어가 꼬박 3달이 걸렸던 수준의 프로젝트가, 2019년도에는 인턴이 Amazon Personalize 서비스를 활용하여 1주일만에 오히려 더 높은 퍼포먼스를 보이는 기능을 구현했다고 극찬했습니다.

personalize-1

Use cases

Use case 로서는 주로

  1. User Personalization
  2. Similar Items
  3. Personalized Ranking

의 3가지에 일반적으로 활용된다고 합니다.

personalize-2

1. User Personalization

각각의 항목에 대하여 좀더 구체적으로 설명해주었습니다.

personalize-3

생각해보면 이제는 거의 표준이 된 UX 를 다시한번 정리해주어서 도움이 많이 되네요!

personalize-4

좌측의 3개의 사진은 구매순입니다. 예전에 구두를 한번 구입한 적이 있지만 최근에는 시계를 연달아서 구매한 경우에는 sequence model 을 적용하여서 구두가 아닌 시계를 추천해준다는 내용의 슬라이드입니다.

personalize-5

다음은 Cold start 에 대한 내용입니다. Serverless 가 아닌 머신러닝도 콜드 스타트 라는 용어를 사용하네요!ㅎㅎ 머신러닝 모델을 적용한 초반에는 데이터가 적은 경우가 많기때문에 제대로 학습이 불가능하여 좋은 퍼포먼스를 얻을 수 없는 경우가 흔합니다. 이때 HRNN 알고리즘(시간의 흐름에 따라 최근 내용을 좀 더 중요하게 여기는 RNN 알고리즘의 한 종류)을 적용하고 있어서, 새로운 아이템이 input 으로 입력 되었을 경우의 콜드스타트에도 잘 대처하고 있다는 내용의 슬라이드 입니다. 좀 더 쉽게 설명하면, 처음 가입한 쇼핑몰에서는 본인의 취향이나 성향에 대한 데이터가 없기때문에 상품을 한번 클릭해봤다던지, 구매를 한번이라도 하면, 해당 내용과 관련한 내용으로 주구장창 추천을 해줬던 경험이 다들 있을 것 같습니다. 이러한 경우가 콜드스타트에 해당하는 경우인데, HRNN 을 적용해서 이러한 개인화된 추천상품에 대해 비교적 효과적으로 대처하고 있다 라고 하는 내용인 것 같습니다.

2. Similar Items

다음으로 Similiar Items 입니다.

personalize-6

보통 상품등의 상세페이지에 등장하는 비슷한 상품 추천 알고리즘인데요, Personalize 를 이용하는 클라이언트 측 입장에서는 위의 User Personalization 을 포함해서 3가지 Use case 전부 동일합니다. 그저 API 를 호출하고(Similiar Items 의 경우, getRecommendations(campaignArn, itemID) 리턴값을 전달받기만 하면 됩니다! 정말 쉽네요ㅎㅎ

내부적으로 좀 더 구체적으로 어떤 방식으로 비슷한 상품을 추천해주냐 하면 item to item collaborative filtering 을 사용한다고 하네요.

personalize-7

근데 collaborative filtering 이라고 해도 단순히 수식을 계산해서 correlation coefficient (공분산) 으로 결과값을 내는 경우도 있고 latent factor models 이나 deep learning 을 활용하는 방법 등 정말 다양한 방법으로 CF(collaborative filtering )를 계산할 수가 있지만, 거기까지는 설명해주지 않았습니다. 아마 recommendation 쪽은 deep learning 이 우수한 퍼포먼스를 보이는 분야 중 하나이므로 deep learning 위주로 구현되어 있을 거라고 지레짐작해봅니다ㅎㅎ

3. Personalized Ranking

마지막으로 Personalized ranking 입니다.

personalize-8

카테고리 페이지에서 보이는 랭킹을 사람마다 다르게 표시해서 보여주는 경우에 해당한다는 내용이네요!

이후부터는 VOODOO 라고 하는 글로벌 게임회사와 다들 알고계실 Coursera 의 머신러닝팀에서 발표해주셨습니다.

VOODOO

VOODOO 소개

VOODOO 는 전세계 1위 게임개발기업이라고 합니다. 앱스토어 순위가 장난아니네요!

personalize-voodoo-1

정말 다양하고 많은 게임들을 개발하고 출시해서, 유저 데이터가 매우 풍부하고 실시간으로 정보를 계속 수집하며 새로운 게임들을 추천해주고 있다고 합니다.

personalize-voodoo-1

처음에는 Sagemaker 를 사용했었으나 Sagemaker 엔드포인트를 하루에도 1억번(..ㄷㄷ) 호출해야하고 하루에도 수십억건의 inference 를 처리해야했습니다. 그래서 도입한 것이 Personalize. 사용하는 것이 쉽고 셋업이 매우 빠르고, out of the box 형태로 수많은 use case 를 처리할 수 있는 점이 마음에 들었다고 합니다.

Data Collection

personalize-voodoo-2

데이터 수집은 EKS 에서 Node.js 엔드포인트를 거쳐 Kinesis Firehose 로 바로 흘려보내버리네요. 그 후에는 데이터 레이크로서 S3 에 저장!

Data Transformation

personalize-voodoo-3

Airflow 로 워크플로우를 정의하고 EMR 클러스터에서 Spark 를 통해 Personalize 에 제공하기 위한 데이터 형태로 변환합니다.

Personalize

personalize-voodoo-4

Airflow 를 통해 정의된 워크플로우로서 Personalize 에 정기적으로 데이터를 제공하면 Personalize 에서는 online learning 을 통해 모델을 업데이트하고, Personalize 의 엔드포인트에 다시 EKS 로 운영되는 Node.js 서버 에서 값을 가져와서 실제 모바일 앱에 전달하는 흐름이네요!

Benefits

이렇게 바꾼 뒤로는 retention 이 비약적으로 향상하고 매달 수십개의 새로운 기능을 개발할 수 있게 되었다고 합니다.

Coursera

Coursera 소개

Coursera 의 경우에는, 사실 이글을 읽고 계시는 분들이라면 굳이 소개가 필요없는 온라인 교육 플랫폼이겠네요!

인턴이 1주일만에 일을 저질렀다?!

personalize-coursera-1

처음에 잠깐 언급했던 내용이네요.

Architecture

personalize-coursera-2

Coursera 에서 Personalize 를 어떤식으로 구성해서 사용하는지 알 수 있는 슬라이드입니다. 자체적인 A/B Test framework 를 거쳐서 최종적으로 디플로이 된다고 합니다.

Model retaining script

personalize-coursera-3

보시는대로 이게 전부입니다. 학습은 2줄로 끝나고, 검증은 1줄, 배포도 2줄이면 끝나네요. (물론 실험을 어느정도는 해서 parameter 튜닝을 할 필요는 있겠지만요) 인턴이 1주일만에 추천기능을 개발했다는게 과언은 아닌것 같습니다!

Long-tail issue for SIMS recipe

personalize-coursera-4

대상이 되는 아이템 수가 극히 적은 경우에는

  • min_cointeraction_count = 3
  • min_item_interaction_count_percentile = 0.01

으로 하이퍼 파라미터값을 설정해주면 극복할 수 있다고 합니다.

Personalize 도입 결과

personalize-coursera-5

네ㅎㅎ 좋아졌네요!!

HRNN-Metadata recipe

personalize-coursera-6

러시아계의 회원에게는 러시아어로 제공되는 강의를 위주로 추천해주고싶을때 위와 같이 설정하면 러시아어를 추천해주네요!

personalize-coursera-7

HRNN-metadata recipe 관련한 실습 워크샵 도 한번 진행해보시면 좋을 것 같습니다!

마치며

현재 글을 쓰고 있는 시점이 Andy Jassy re:Invent 2019 의 키노트 세션이 끝난 직후의 시점인데요... 하..... 올해는 정말 머신러닝 계의 서비스가 대박 터졌네요! Personalize 세션 레포트를 작성중이지만 빨리 CodeGuru 나 Sagemaker Studio 한번 만져보고싶네요!ㅋㅋㅋㅋ AWS 는 정말 공부를 해도해도 새로운 기술이 쏟아져서 나와서 더 흥분되고 즐거운 것 같습니다!

그럼 이만-! :D