day15_20221011
1강 추천 시스템 Basic 1
GOAL
- 추천시스템에 대한 간략한 소개
- 추천시스템의 도전 과제
- 사용할 수 있는 정보 및 데이터
- 실제 추천 시스템이 적용된 사례
- 추천 시스템 및 모델 평가 지표 소개
- Offline Test : 수집된 데이터를 바탕으로 모델의 성능을 객관적인 지표로 평가
- Precision@K, Recall@K, AP@K, MAP@K, 그리고 NDCG
- Online Test
- Online A/B Test : 추천 결과를 대조군(A)와 비교군(B)으로 동시에 유저들에게 서빙하여 둘 중 어느 쪽이 더 선호되는지 테스트
- 인기도 기반 추천 기법 소개
추천 시스템이란
검색
: pull 방식, 사용자가 query 를 던져 데이터를 가져온다.
추천
: push 방식, 사용자의 흥미도를 고려하여 상품을 추천한다.
필요성 1
다양한 상품과 컨텐츠가 등장하여 Long Tail Phenomenon
이 발생
- 인기있는 소수의 아이템만 많이 소비, 나머지 아이템은 적게 소비됨
필요성 2
정보를 찾는데 시간이 오래걸림
- 어떤 키워드로 검색해야하는지 모를 수 있음
→ 인기있는 소수의 아이템 추천에서 개인화의 영역으로 발전하고 있음
⇒ Long Tail 추천
: popular product 의 면적보다 long tail 면적이 넓어짐
- 사례
: 유튜브 인기 영상 추천, SNS 친구 추천 등
사용 데이터
유저 관련 정보
- 유저 프로파일링
추천 대상 유저에 관련된 정보를 구축하여, 개인 유저 혹은 유저 그룹별로 추천
- 식별자 (Identifier)
user id, 광고 추천에 사용되는 device id, 로그인 없이 브라우저 쿠키
- 데모그래픽 정보
성별, 연령, 지역, 관심사 (추정 정보를 활용하기도 함)
- 유저 행동 정보
페이지 방문 기록, 아이템 평가, 구매 등의 피드백 기록
- 딥러닝이 발전하면서 유저가 어떤 서비스를 사용하고 어떤 행동을 했는지를 분석해서 더 정교한 추천을 할 수 있게 되었다.
아이템 관련 정보
추천 아이템 별로 고유 정보가 다르기 때문에 케이스 및 서비스 마다 사용하는 방법이 다르다.
예
content base recommendation
- 아이템 ID
- 아이템의 고유 정보 ( meta data )
- 영화 : 장르, 출연 배우 및 감독, 소개글, 개봉년도
- 상품 : 카테고리, 브랜드, 출시일, 상품 이미지
- 음악 : 아티스트, 작곡가, 장르, 음악 신호 그 자체
유저 - 아이템 상호작용 정보
- 유저와 아이템의 상호작용 데이터
유저가 오프라인 혹은 온라인에서 아이템과 상호작용 할 때 로그로 남는다.
추천 시스템을 학습하는 데이터의 feedback이 된다.
- Explicit Feedback
유저에게 아이템 만족도를 직접 물어본 경우
예를 들어
영화 평점
- Implicit Feedback
유저가 아이템을 클릭하거나 구매한 경우
- 상대적으로 데이터 양이 많다.
- Implicit feedback 을 잘 모델링하는 것
예를 들어
유저가 상품을 구매한 경우 implicit feedback = Y
추천 시스템 문제 정의
추천 시스템의 목적
목적
특정 유저/아이템에 적합한 아이템/유저를 추천한다.
→ 유저-아이템 상호 작용을 평가할 score 값이 필요하다.
문제
추천을 위한 score 는 어떻게 구하고 사용할까?
추천 문제 : 랭킹 또는 예측
- 랭킹 ( Ranking ) : 유저에게 적합한 Top K 개의 아이템 추천
Top K 개를 선정하기 위한 기준 또는 스코어가 필요하다.
유저(X)가 아이템(Y)에 가지는 정확한 선호도를 구할 필요는 없다.
- 평가 지표 : Precision@K, Recall@K, AP@K, MAP@K, 그리고 NDCG
- 예측 ( Prediction ) : 아이템에 대한 유저의 선호도를 정ㅎ확하게 예측 ( 평점 또는 클릭/구매 확률 )
Explicit Feedback
, Implicit Feedback
유저 - 아이템 행렬을 채우는 문제
추천 시스템 평가
비즈니스 / 서비스 관점
매출이나 PV(Page View) 가 증가했는지 또는 유저의 노출 대비 클릭수가 증가했는지가 중요
품질 관점
연관성(Relevance), 다양성(Diversity), 새로움(Novelty), 참신함(Serendipity)
Offline Test
테스트 데이터로 성능을 평가하는 단계로 새로운 추천 모델을 검증하기 위해 가장 우선적으로 수행되는 단계이다.
- 유저로부터 수집한 데이터를 train/valid/test 로 나누어 모델의 성능을 객관적 지표로 평가
serving bias
: offline model 에서 새로운 데이터가 추가되어 새로운 모델로 발전하는 것
- 성능 지표
- ranking : Precision@K, Recall@K, AP@K, MAP@K, 그리고 NDCG
- prediction : MAE, RMSE, AUS
Online Test
Offline Test에서 검증된 가설이나 모델을 이용해 실제 추천 결과를 서빙하는 단계
Traffic 을 나눠 동시에 대조군(A)과 실험군(B)의 성능을 평가
→ 실제 서비스를 통해 얻어지는 결과를 통해 최종 의사결정이 이루어진다.
⇒ 매출 및 CTR 등 비즈니스/서비스 지표 변화를 관찰
추천 시스템의 평가 지표 소개
실제 현업에서는 대부분 매출, CTR 등 비즈니스/서비스를 지표로 성능을 평가한다.
Ranking 문제의 metric 을 살펴 보자.
Precision/Recall @K
- Precision@K
추천한 K 개의 아이템 중에서 실제 유저가 관심있는 아이템 비율
- Recall@K
관심있는 전체 아이템 중에서 추천한 아이템 비율
예를 들어
- 추천한 아이템 개수 : 5 (=K)
- 유저가 관심있는 아이템 개수 : 2
- 유저가 관심있는 아이템 전체 개수 : 3
→ Precision@5 = 52
→ Recall@5 = 32
Mean Average Precision(MAP) @K
추천된 K 개의 아이템 순서에 따라서 지표가 달라진다.
- 선호 아이템을 더 높은 순위로 추천할 때 점수가 상승
- AP@K
Precision@K 와 달리, 관련 아이템을 더 높은 순위에 추천할수록 점수 상승
AP@K=m1∑i=1KPrecision@i
- MAP@K
모든 유저에 대한 Average Precision 값의 평균
MAP@K=∣U∣1∑u=1∣U∣(AP@K)u
Normalized Discounted Cumulative Gain(NDCG)
Top K 리스트를 만들어 유저가 선호하는 아이템을 비교하여 값을 구한다. 추천 순서에 가중치를 주며 1에 가까울수록 좋은 성능으로 판단 ( 가장 많이 사용됨 )
참고
연관성을 수치로도 활용할 수 있음 → 유저에게 얼마나 더 관련있는 아이템을 상위로 노출시키는지 알 수 있음
Cumulative Gain
상위 K개 아이템에 대해 관련도를 합한 것
CGK=∑i=1Kreli
Discounted Cumulative Gain
Cumulative gain 을 K개의 순서에 따라 log2(i+1)로 discount 함
DCGK=∑i=1Klog2(i+1)reli
Ideal DCG
가능한 DCG 값 중 가장 큰 것으로 이상적인 추천을 했을 때 DCG 값
IDCGK=∑i=1Klog2(i+1)reliopt
- 유저의 relevant item 개수가 k보다 적을 경우가 존재함
- 1) k = 5 riopt=1 일 때, 유저의 relevant item 개수가 5개 이상이라면 idcg = (1/log2) + (1/log3) + (1/log4) + (1/log5) + (1/log6)
- 2) k = 5 riopt=1 일 때, 유저의 relevant item 개수가 3개라면 idcg = (1/log2) + (1/log3) + (1/log4)
★Normalized DCG
추천 결과에 따루 구해진 DCG 를 IDCG 로 나눈 값
- 연관성을 0과 1 사이의 값으로 나타내는 척도
NDCG=IDCGDCG
예시
인기도 기반 추천 평가 지표
통계적으로 모든 사용자에게 좋은 평가를 받은 아이템을 추천
- 데이터가 부족하거나 추천 모델 구축이 되지 않은 서비스 초기에 많이 사용
척도
: 조회수, 평균 평점, 리뷰 개수, 좋아요 / 싫어요 수
Most Popular
- 인기도와 정보의 생성 시점도 함께 고려해야 한다.
score=f(popularity,age)
score=(upvote−downvote)−timeelasped
score=pageviews−timeelasped
- pageview 가 크게 늘어나면 시점에 관한 정보를 반영하기 어렵다.
뉴스 추천 서비스 : 많은 사람이 본 뉴스 추천, 시간이 오래될수록 점수를 깎는다.
시간에 따라 줄어드는 score 를 조정하기 위해 gravity(=1.8) 라는 상수를 사용한다.
- pageview 의 상승 속도가 age 상승 속도 보다 빠르다.
score=(age+2)gravitypageviews−1
최근에 포스팅된 글에 더 높은 점수를 부여한다.
score=log10(ups−downs)+45000sign(ups−downs)∗seconds
- popularity : log10(ups−downs)
- 포스팅이 게시된 절대시간 : seconds
- 나중에 게시된 포스팅일수록 절대시간이 크기 때문에 더 높은 score 를 가진다.
- log10(ups−downs) : 첫 번째 vote 에 가장 높은 가치를 부여하고, vote 가 늘어날수록 score 의 증가 폭이 작아진다.
- log 함수를 통해 vote 가 폭발적으로 증가하는 것을 보정해준다.
- 오래된 포스팅일수록 상대적으로 많은 vote 가 있어야 높은 score를 가진다.
Highly Rated
문제
신뢰할 수 있는 평점인지, 평가의 개수가 충분한지에 대한 이슈가 있다.
→ 얼마나 많은 rating 이 구성되어 있는지가 중요하게 작용함
score=f(rating,#ofratings
좋아요 개수가 평균 평점이 됨
# of reviews 값이 증가하면 score:=avg_rating
즉, rating 개수가 많이지면 평균 평점을 그대로 활용한다.
avg_rating=# of reviews# of postivereviews
score=avg_rating−(avg_rating−median)∗2−log(#ofreviews)
- rating 은 평균값을 사용한다.
- 전체 review 개수에 따라 rating 을 포정한다.
- 0.5 보다 score가 낮거나 높을 경우 조금 높게 또는 낮게 보정
- review 개수가 아주 많을 경우 score 는 평균 rating 과 거의 유사해진다.
- median : 0.5 at steam rating , 3.0 at movie recommend
이 글은 커넥트 재단 Naver AI Boost Camp 교육자료를 참고했습니다.