요즘IT
위시켓
최근 검색어
전체 삭제
최근 검색어가 없습니다.

국내 IT 기업은 한국을 넘어 세계를 무대로 할 정도로 뛰어난 기술과 아이디어를 자랑합니다. 이들은 기업 블로그를 통해 이러한 정보를 공개하고 있습니다. 요즘IT는 각 기업의 특색 있고 유익한 콘텐츠를 소개하는 시리즈를 준비했습니다. 이들은 어떻게 사고하고, 어떤 방식으로 일하고 있을까요?

회원가입을 하면 원하는 문장을
저장할 수 있어요!

다음

회원가입을 하면
성장에 도움이 되는 콘텐츠를
스크랩할 수 있어요!

확인

개발

AWS Personalize 활용한 개인화 추천 서비스 론칭기

년차,
어떤 스킬
,
어떤 직무
독자들이 봤을까요?
어떤 독자들이 봤는지 궁금하다면?
로그인

국내 IT 기업은 한국을 넘어 세계를 무대로 할 정도로 뛰어난 기술과 아이디어를 자랑합니다. 이들은 기업 블로그를 통해 이러한 정보를 공개하고 있습니다. 요즘IT는 각 기업의 특색 있고 유익한 콘텐츠를 소개하는 시리즈를 준비했습니다. 이들은 어떻게 사고하고, 어떤 방식으로 일하고 있을까요?

 

이번 글은 여기어때 데이터 엔지니어가 AWS Personalize를 활용해 개인화 추천 서비스를 론칭한 경험을 소개합니다.

 

안녕하세요. 인프라개발팀 데이터엔지니어 지키입니다. 여기어때 서비스에 녹이기 위해 오랜 시간 동안 테스트하고 기다리던 개인화 서비스를 홈 화면에 적용해 드디어 론칭하게 되었습니다.

 

 

저는 제주도의 따뜻한 바람이 그리워 제주도 숙소를 많이 봤더니 제주도 숙소를 추천받았습니다. 여러분은 어떤 숙소를 추천받으셨나요?

 

여기어때에는 다양한 추천 서비스가 있지만 개인화된 추천 서비스는 처음이기에 어떻게 시스템을 구축하여 서비스에 연결했는지 공유하도록 하겠습니다(여기어때 개인화 추천에는 AWS Personalize를 사용하고 있습니다).

 
AWS Personalize Workflows

 

Datasets and schemas

우선, Users, Items, Interactions 데이터셋과 스키마를 잘 정의해야 합니다. 이후 단계는 거의 자동으로 이루어지기 때문에 정의하는 단계가 가장 중요합니다. 각 서비스의 성질에 맞게 정의하면 됩니다.

 

물론 각 데이터를 정의된 스키마에 맞게 전처리 작업도 필요합니다. 여기어때의 경우 데이터의 양이 많아 필요한 데이터만 추리는 작업에도 많은 리소스가 소요됐습니다. 개인정보 보호를 위해 사용자에 대한 정보가 거의 없습니다. 필수로 들어가야 하는 USER_ID와 구매 이력을 통해 사용자들을 구분한 고윳값을 데이터 셋으로 넣고 스키마를 정의했습니다. 숙소 정보는 필수 필드인 ITEM_ID, CREATION_TIMESTAMP를 포함하여 카테고리와 평점, 지역 정보, 취향 필터, 시설 필터를 카테고리컬 형식으로 정의했습니다. Interactions 데이터셋도 필수필드인 USER_ID, ITEM_ID, TIMESTAMP와 EVENT_TYPE으로 정의했습니다.

 

Users dataset: USER_ID, TIER
Items dataset: ITEM_ID, CREATION_TIMESTAMP, GRADE, LOCATION, RATING, FACILITY, FAVORITE
Interactions dataset: USER_ID, ITEM_ID, TIMESTAMP, EVENT_TYPE

 

인터렉션 데이터의 기간은 90일입니다. 기간을 정하는 것도 처음엔 고민이 많았습니다. 여기어때 서비스의 특성상 사용자가 매일 지속해서 접속하는 경우보다 각자의 휴가 계획에 맞춰 인터랙션이 이루어지는 경우가 많습니다. 그래서 그 기간을 더 길게 가져가야 하는 건 아닌지, 더 짧게 가야 하는 건 아닌지 의사결정하기 어려웠으나 3개월 정도가 적당하다는 의견으로 모아져 90일로 정하게 되었습니다.

 

더 많은 필드를 넣고 싶었지만 필드수가 많다고 해서 좋은 학습이 이뤄지는 것은 아니라는 AWS 담당자의 조언을 받아들여 가장 간결하게 진행하게 되었습니다. 특별히 PO 샤나의 도움으로 각 필드가 실제 사용자 행동 기반으로 정의되었습니다.

 

데이터 셋과 스키마를 정의했다면 레시피를 고르고 솔루션을 생성해 주면 됩니다. 생성 방법은 두 가지인데 콘솔에서도, CLI에서도 간단하게 생성할 수 있습니다. 솔루션 버전을 생성하는 작업이 학습을 진행하는 것이라고 보면 됩니다. 여기어때에서는 10시간 정도 소요됩니다.

 

Amazon Personalize recipes
- USER_PERSONALIZATION: User-Personalization, Popularity-Count, HRNN recipe, HRNN-Metadata recipe, HRNN-Coldstart recipe
- PERSONALIZED_RANKING: Personalized-Ranking
- RELATED_ITEMS: Similar-Items, SIMS
- USER_SEGMENTATION: Item-Affinity, Item-Attribute-Affinity
(출처: Amazon Personalize Developer Guide)

 

저희는 USER_PERSONALIZATION 레시피를 선택했습니다. 현재 A/B 테스트 진행 예정인 프로젝트에 대해 간단히 공유해 드리자면, RELATED_ITEMS 레시피를 이용하여 여기어때에서 의도적으로 추천하고자 하는 숙소를 개인화와 접목해 추천하는 시스템을 12월에 테스트할 계획이 있습니다.

 

 

Campaign

추천 시스템에 실시간성을 부여하기 위해서는 캠페인을 생성해야 합니다. minProvisionedTPS는 비용과 직접적인 연관이 있으므로 요금 폭탄을 맞지 않으려면 최솟값을 1로 놓아야 합니다. 현재 서비스 중이기 때문에 저희는 15에 맞춰져 있습니다. 이는 최솟값으로 트래픽이 많아지면 자동으로 확장 또는 축소되지만, 설정값 이하로 축소되진 않습니다. 캠페인에 실시간으로 인터랙션 데이터를 적용하기 위해선 Event Tracker를 생성해야 합니다. 이벤트 트래커를 생성하면 ARN(Amazon Resource Number)이 생성되는데 이를 putEvent작업을 실행할 때 사용합니다. 풋이벤트 작업은 실시간으로 인터랙션 데이터를 적용하기 위해 사용되는 API입니다.

 

 

Filter

추천 결과에 기준에 따른 직접적인 필터링을 할 수 있습니다. 여기어때에서는 평점과 카테고리에 필터링을 적용했습니다. 이해를 돕기 위해 추가로 말씀드리면, Filter expression의 예시는 아래와 같습니다.

 

INCLUDE ItemID WHERE Items.RATING >= 90

 

여기어때 개인화 추천 시스템

추천 시스템 Architecture

 

인터랙션 데이터를 실시간으로 이벤트 트래커와 연결하고 추천 결과를 서비스개발팀에 내려줄 수 있는 서버를 구축하는 일도 진행했습니다. 워낙 데이터양이 많아 데이터를 받는 일도 보내는 일도 수월하진 않았습니다.

 

애플리케이션 서버를 구축하여 각 단계의 업데이트를 코드화하였습니다. 솔루션을 생성하는 주기는 1개월이고, 버전 업데이트는 1주 단위로 진행됩니다. 데이터 셋 업데이트는 매일, 캠페인 생성은 매주 진행하여 학습이 최대한 최신버전으로 유지될 수 있도록 스케줄링했습니다.

 

향후 계획

시즌 한정으로 진행되는 ‘크리스마스, 밖은 너무 추우니까’ 이벤트 이외에도 각 연휴나 징검다리 휴일에도 개인 추천 서비스를 만나 볼 수 있길 기대하고 있습니다. 또한, 모든 사용자에게 추천되고 있었던 기존 서비스에도 접목해 더 나은 추천 서비스로의 업그레이드에 사용되길 바랍니다.

 

AWS Personalize를 이용하여 개인화 추천 시스템을 개발하려고 하는 분들에게 도움이 되었길 바랍니다. 감사합니다.

 

 

<원문>

개인화 추천 - 크리스마스, 밖은 너무 추우니까

 

요즘IT의 모든 콘텐츠는 저작권법의 보호를 받는 바, 무단 전재와 복사, 배포 등을 금합니다.

좋아요

댓글

공유

공유

댓글 0
대한민국 대표 여행·여가 플랫폼
130
명 알림 받는 중

작가 홈

대한민국 대표 여행·여가 플랫폼
130
명 알림 받는 중
여기어때 기술 블로그는 앱 개발 성과와 노하우, 조직 문화를 대외 공유하기 위해 운영 중입니다.
독자들이 여기어때의 목표와 방향성을 쉽게 이해하도록 돕는 역할을 할 예정입니다.

좋아요

댓글

스크랩

공유

공유

요즘IT가 PICK한 뉴스레터를 매주 목요일에 만나보세요

요즘IT가 PICK한 뉴스레터를
매주 목요일에 만나보세요

뉴스레터를 구독하려면 동의가 필요합니다.
https://auth.wishket.com/login