본문 바로가기

ML/MLops

[system design] 이벤트 추천 시스템

1. 목표

- 사용자에게 개인화된 이벤트 목록을 표시하는 이벤트 추천 시스템을 설계

- 이벤트 : 이벤트 설명 / 가격 / 위치 / 날짜 / 시작과 종료가 있는 기간 으로 구성됨

- 다른 사용자를 이벤트에 초대하고 친구 관계를 형성 할 수 있다.

- 주요 목표는 사용자에게 개인화된 이벤트 목록을 표시하는 이벤트 추천 시스템을 설계해야 한다.

 

 

이벤트의 정의는 일반 사이트의 특정 상품 / 특정 회사 제품에 대한 이벤트 일수도 / 게임 상점에서의 아이템 판매에 대한 이벤트등 다양한 계열을 볼수 있다.

일반적으로 표현하자면 특정한 기간안에 특정한 상품을 판매하는 행위로 정의할수 있다.

 

 

2. 랭킹 모델

LTR(Learning to Rank)는 지도 학습을 적용하여 순위 문제를 해결하는 알고리즘 기법의 하나로, '쿼리와 항목이 있을때 항목의 순위를 정하는 로직'이다.

LTR은 크게 세가지 기법으로 나뉜다.

 

Point-wise

한개의 입력 데이터에 대해 예측된 y값과 ground truth y값에 대한 차이만 계산하는 방법

MSE(Mean Square Error) loss가 대표적인 예이다.

 

 

Pair-wise

두개의 Item을 비교해 어느 Item이 Query와 가장 유사한지 판단하는 방법

두 Item 사이의 상대적인 relevancy를 학습하여 순위를 정한다.

  • RankNet : Binary Cross Entropy loss를 사용하여 Pair-wise를 학습
  • LambdaRank : 높은 rank에 해당하는 Item에 gradients를 부여하여 학습
  • LambdaMART: Grdient Boosting 방법을 활용하여 LambdaRank보다 더 좋은 성능을 발휘

 

List-wise

Item list에 대한 모든 rank를 계산

Ranking metric을 최대화하는 방법이기에 가장 좋은 성능을 기대

  • SoftRank : 각 Item에 대한 rank 확률 분포

간단하게 랭킹에 사용할 수 있는 두가지 모델(ranknet / LambdaRank)에 대해서 알아보자

 
 
RankNet
RankNet은 훈련 데이터를 쿼리로 분할하고, 입력 특성 벡터 x를 f(x)로 매핑한다.
모델은 두 URL 쌍의 출력을 학습한 확률로 매핑하여 시그모이드 함수로 이를 연결한다. (pair-wise이므로 입력은 2개 출력도 두개)
크로스 엔트로피 비용 함수를 적용하고, 경사 하강법을 사용해 모델 파라미터를 업데이트한다.
 

 

 

품질 측정

랭킹 품질 측정을 위해 MRR, MAP, ERR 및 NDCG와 같은 지표를 사용한다.
nDCG 및 ERR은 다중 중요도를 통해 결과의 위치에 따른 가중치를 포함한다.
nDCG와 같은 ranking loss는 불연속 (discontinuous)하여 그라디언트를 정의 할 수 없는 단점이 있다.

nCDG 수식 유도는 전 포스팅에 있습니다 [이미지 검색 시스템 https://uiandwe.tistory.com/1448]

 

 

RankNet에서 LambdaRank으로

LambdaRank는 모든 짝은 동일하고 역방향의 λ를 생성한다.
LambdaRank는 RankNet의 속도 향상으로부터 유도되었으며, 배치 학습을 도입하여 성능 향상을 이끌어냈다.
특정 item의 경우, 해당하는 모든 짝에 의한 람다(λ)가 증가되며, 이 람다는 해당 쿼리를 위해 각 item마다 누적된다.
λ를 기반으로 가중치를 조정하면서 각 item에 대해 수행되는 계산 과정 중에는 Stochastic Gradient / Momentum 로 가중치를 구한다.

 

간단하게 설명한다면 ranknet에서  nDCG의 함수가 바뀌었다고 보면 된다.

https://louiskitlunglaw.medium.com/ranknet-lambdarank-tensorflow-implementation-part-iv-3ac4e77ee2c5

기존 nDCG에서 gradient descent의 문제점을 해결하기 위해 아이템의 순서에 상관이 없도록 차이만큼의 패널티를 곱하게 된다.

 


 

 

3. 데이터 피처

이벤트 피처

* 이벤트 설명

- 이벤트에는 태그 / 이미지 / 설명글 등이 있다.

- 태그와 설명글은 전처리를 통해 벡터로 변환 후 유사도를 통해 추천 지표로 사용된다.

- 이미지와 동영상의 경우 각각의 프레임별 객체 인식을 통해 카테고리화 할 수 있다. 해당 데이터도 유사도를 통해 추천 지표로 사용된다.

 

* 이벤트 소셜 관련

- 해당 이벤트의 노출수 / 클릭수 / 공유수 등을 기반으로 스케일을 조정하여 추천 지표로 사용한다.

 

* 이벤트 등록 관련

- 이벤트를 등록한 주체에 따라서 사용자들이 반응할수 있다. 특정 회사 / 특정인에 대한 데이터도 피처로 관리 된다.

 

* 가격 관련

- 이벤트 가격은 사용자가 등록시 가장 결정적인 영향을 미칠 수 있다. 범주를 원-핫 인코딩으로 변경 후 유사한 이벤트를 추천하는 지표로 쓰일 수 있다.

 

* 과거 이벤트 관련

- 과거 비슷한 이벤트를 등록한 사용자 수를 기반으로 해당 피처 값을 이용할 수 있다

 

 

 

 

 

사용자 피처

* 위치관련

- 이벤트 장소의 접근성은 중요한 요소이다. 특정 국가 / 도시등의 거리를 스케링이나 유사도를 통해 관련 피처에 대한 값을 구할수 있다.

 

* 시간관련

- 어떤 사용자는 며칠전에 이벤트를 등록하지만, 그렇지 않은 사용자도 많다. (종료 몇시간전에 등록할수도 있다)

- 어떤 사용자는 특정 날짜 / 시간에만 이벤트를 등록할수도 있다. 사용자의 생활 패턴과 접속 기록등을 통해 해당 값을 구할 수 있다 (주말에만 등록하는 사용자 / 새벽에만 클릭하는 사용자)

- 어떤 이벤트는 특정 날짜에 집중되어서 사용자에게 반응이 올수도 있다. 행사 관련이라면 금->토->일 순으로 사용자의 선호도가 높을 수 있다.

 

* 소셜 관련

- 해당 이벤트에 몇명의 사용자가 등록 했는지에 대한 분석이다.

- 이벤트에 등록한 사용자수 / 노출수 대비 전체 등록 사용자 수 비율 등 해당 피처 값을 이용할 수 있다

- 공유하기나 친구 추천등이 있다면 등록한 사용자의 친구수 / 전체 친구 대비 등록한 친구 수 등도 이용할 수 있다.

 

* 사용자 관련

- 연령 / 성별 / 나이 등 인구통계학적 데이터를 그룹에 특화된 피처로 만들수 있다. (예 : 30대 가정주부를 위한 이벤트)

 

* 과거 이벤트 참여 관련

- 사용자가 과거 이벤트에 등록된 데이터를 기반으로 유사성을 판단할 수 있다. 유사도 계산을 위해 TF-IDF를 사용하여 설명을 벡터로 변환 후 코사인 유사도를 사용하여 계산한다.

 

 

4. 서빙

 

예측 파이프 라인

- 지속적으로 이벤트 항목이 추가되므로 사용자의 데이터에 적용하기 위해 모델을 계속 미세 조정한다.

- 정적인 데이터 (연력, 성별, 이벤트 설명) 과 같이 자주 변경되지 않는 피처들은 배치처리를 이용하여 주기적으로 계산 후 피처 저장소에 저장하여 사용한다.

 

모델 학습 파이프라인

- 예측 파이프라인에서 생성된 데이터셋을 통해 지속적으로 모델을 생성하고 배포 한다.

 

모델 서빙 / 후보생성 및 랭킹 계산

- 사용자 입력을 받아 이벤트의 범위(카테고리)를 좁혀 후보군을 생성한다. 전체 계산을 할시에는 너무 많은 계산량이 되므로 가지치기가 필요하다.

- 후보생성에서 생성한 이벤트를 입력받아 사용자에게 더 추천되는 상위 K개의 이벤트로 정렬한다.

 

 

 

 

 

 

 

 

 

참고

(책)가장면접 사례로 배우는 머신러닝 시스템 설계

https://product.kyobobook.co.kr/detail/S000212266758

 

가상 면접 사례로 배우는 머신러닝 시스템 설계 기초 | 알리 아미니안 - 교보문고

가상 면접 사례로 배우는 머신러닝 시스템 설계 기초 | 유튜브 동영상 추천, 에어비앤비 상품 추천, 뉴스 피드 생성 같은 머신러닝 시스템은 어떻게 설계할까?이 책은 실제 서비스되고 있는 머신

product.kyobobook.co.kr

https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/MSR-TR-2010-82.pdf

https://medium.com/swlh/ranknet-factorised-ranknet-lambdarank-explained-implementation-via-tensorflow-2-0-part-i-1e71d8923132

https://louiskitlunglaw.medium.com/ranknet-lambdarank-tensorflow-implementation-part-iv-3ac4e77ee2c5