추천 시스템이란
1. 개요
과거에는 유저가 접할 수 있는 컨텐츠가 TV, 영화, 신문 등 극히 제한적이었지만,
요즘은 오히려 넘치는 정보의 시대이다.
따라서 유저가 원하는 걸 어떤 키워드로 찾아야 하는 지 모를 수 있음
기존에 사용자가 Search한 내용을 기반으로 추천해주는 것을 넘어서,
유저가 모르는 유저가 필요로 하는 item을 유저보다 더 잘 알고 추천한다.
이에따라, 이전에는 소수의 인기있는 아이템 (Popular products)가 주류였지만
최근에는 Long-Tail products에 대한 추천의 필요성이 대두됨
예시:
Popular products: 조회수가 엄청 높은 소수의 동영상
Long Tail products: 아직은 조회수가 낮은 다수의 동영상
조회수가 급상승한 영상이 나왔을 때, 그 영상과 관련이 있는 영상을 조회수가 적더라도 추천!
SNS에서 내가 알만한 사람들을 추천 (친구의 친구, ...)
2. 사용 데이터
추천 시스템에서는 크게 세 가지 데이터를 사용함
유저 관련 정보
- 유저 프로파일링: 추천 대상 유저에 대한 정보 구축
- 식별자: 각 유저의 고유 정보 (유저 ID, 디바이스 ID 등), 수집이 어려울 경우 브라우저 쿠키로 대체하기도 함
- 데모그래픽 정보: 성별, 연령, 지역 등을 뜻하는데, 요즘 관련 법률로 수집이 까다롭기 때문에 추정으로 대체하기도 함
- 유저 행동 정보: 페이지 방문 기록, 아이템 평가 등의 피드팩을 기록
아이템 관련 정보
추천 아이템의 종류
- 포탈: 뉴스, 블로그 웹툰 등 컨텐츠
- 광고/커머스: 광고 소재, 상품 등
- 미디어, 영화, 음악 등
아이템 프로파일링
1. 아이템 ID
2. 아이템의 고유 정보 (Metadata)
- 영화: 영화 장르, 출연 배우, 감독 등
- 상품: 상품 카테고리, 브랜드, 출시일 등
- 음악: 아티스트, 작곡가, 장르 등
유저 - 아이템 상호작용 정보
유저가 오프라인/온라인에서 아이템과 상호작용할 때 로그로 남는 것을 뜻함
추천 시스템을 학습하는 데이터의 Feedback이 됨
Explicit Feedback
- 유저에게 아이템에 대한 만족도를 직접 물어본 경우
- 영화 평점, 좋아요/싫어요 등
Implicit Feedback
- 유저가 아이템을 클릭하거나 구매하는 등의 상호작용
Explicit Feedback이 많으면 당연히 좋지만, 상대적으로 데이터 수집에 어려움이 있어서
실제로는 모델링에 Implicit Feedback가 중요한 요소로 사용됨!
3. 문제 정의
그래서 추천을 하기 위해서 필요한 지표(score)는 어떻게 구하고 사용되지?
크게 랭킹(Ranking)과 예측(Prediction)으로 나뉨
랭킹: 유저에게 적합한 item을 Top K개 추천
- 정확한 선호도는 필요하지 않음, 순위만 매기면 되는 거니까!
→ 영화 별점을 1~5로 매겨도 우리가 구하는 스코어의 스케일은 0~100이어도 상관 없다는 것
- 평가 지표: Precision@K, Recall@K, MAP@K, nDCG@K
예측: 유저가 아이템을 가질 선호도를 정확하게 예측
- Explicit Feedback: 유저가 어떤 영화에 대해 내릴 평점 값을 예측
- Implicit Feedback: 유저가 어떤 물품을 조회하거나 구매할 확률 값을 예측
- 나중에 배울 User-Item Matrix를 채우는 문제
- 평가지표: MAE, RMSE, AUC
4. 적용사례
유튜브, 넷플릭스, 쿠팡, Google Ads 등
추천 시스템의 평가지표
1. 개요
우리가 이렇게 새롭게 모델링한 추천 시스템의 성능을 어떻게 평가할까?
비즈니스 / 서비스 관점
- 추천 시스템 적용으로 매출 및 Page View(사용자 방문) 증가 확인
- 추천 아이템을 인해 유저의 CTR(노출 대비 클릭 수) 상승 확인
품질 관점
- 연관성, 다양성, 새로움, 참신함
2. Offline Test
기계학습에서 test 데이터로 평가하는 것이랑 비슷하게 생각하면 됨!
유저로부터 수집한 데이터를 train/validation/test로 나누어 모델의 성능을 객관적 지표로 평가
보통 offline test에서 좋은 성능을 보여야 online 서빙에 투입되지만,
실제 서비스 상황에서는 다양한 양상을 보임
성능 지표
- 랭킹 문제: Precision@K, Recall@K, MAP@K, nDCG@K, Hit Rate
- 예측 문제: RMSE, MAE
<참고>
Offline에서는 Data가 User에게 추천하는 것으로 끝나지만,
Online에서는 Data가 User에게 추천하고, User가 Data에게 Log를 전달해서, Data가 Model을 Update하는 과정이 추가됨!
평가지표에서 예측은 기존 기계학습에서의 지표와 거의 동일하기 때문에,
랭킹 문제에 관한 평가 지표들을 살펴보자
Precision@K
- 기존 Precision Score를 K개로 확장한 것
- 우리가 추천한 K개 아이템 가운데 실제 유저가 관심있는 아이템의 비율
Recall@K
- 기존 Recall Score를 K개로 확장한 것
- 유저가 관심있는 전체 아이템 가운데 우리가 추천한 아이템의 비율
예시
- 우리가 추천한 아이템 개수: $ K = 5 $
- 추천한 아이템 중 유저가 관심있는 아이템 개수: $ 2 $
- 유저가 관심있는 아이템의 전채 개수: $ 3 $
$$ \text{Precision@5} = \cfrac{2}{5} $$
$$ \text{Recall@5} = \cfrac{2}{3} $$
MAP@K (Mean Average Precision @K)
AP@K가 Precision@1 ~ Precision@K의 평균값으로, 그냥 Precision@K보다 관련 아이템을 더 높은 순위에 추천할수록 점수가 상승함
$$ \text{AP@K} = \cfrac{1}{m} \sum_{i=1}^{K} \text{Precision@i} $$
모든 유저에 대해 이 AP@K 값의 평균을 낸 것이 MAP@K
$$ \text{MAP@K} = \cfrac{1}{U}\sum_{u=1}^{|U|}\text{(AP@K)_u} $$
NDCG (Normalized Discounted Cumulative Gain)
추천 시스템에서 가장 많이 사용되는 지표!
- Preicion@K, Recall@K와 마찬가지로 Top K 리스트를 만들고, 유저가 선호하는 아이템을 비교하는 값을 구함
- MAP@K와 마찬가지로 추천의 순서에 가중치를 더 많이 두어 성능을 평가, 1에 가까울수록 좋음
- MAP과 달리 binary 값이 아닌 수치로 사용이 가능해서, 유저에게 얼마나 더 관련 있는 아이템을 상위로 노출시키는지 확인 가능
1. Cumulative Gain: Top K 아이템에 대하여 관련도를 합한 것, 순서에 따라 Discount 하지 않고, 동일하게 더함
$$ CG_K = \sum_{i=1}^{K} rel_i $$
2. Discounted Cumulative Gain: 순서에 따라 Cumulative Gain을 Discount함
$$ DCG_K = \sum_{i=1}^{K}\cfrac{rel_i}{\log_2 (i+1)} $$
3. Ideal DCG (IDCG)
이상적인 추천이 일어났을 때의 DCG값, DCG의 최댓값!
$$ IDCG_K = \sum_{i=1}^{K}\cfrac{rel_i^{opt}}{\log_2 (i+1)} $$
4. Normalized DCG (NDCG)
$$ NDCG = \cfrac{DCG}{IDCG} $$
NDCG 예시
Ideal Order: [ C(3), A(3), B(2), E(2), D(1) ]
<참고> Relevance의 내림차순으로 정렬하여 추천하는 것이 이상적
Recommend Order: [E, A, C, D, B]
$$
\begin{gathered}
D C G @ 5=\frac{2}{\log _2(1+1)}+\frac{3}{\log _2(2+1)}+\frac{3}{\log _2(3+1)}+\frac{1}{\log _2(4+1)}+\frac{2}{\log _2(5+1)}=6.64 \\
I D C G @ 5=\frac{3}{\log _2(1+1)}+\frac{3}{\log _2(2+1)}+\frac{2}{\log _2(3+1)}+\frac{2}{\log _2(4+1)}+\frac{1}{\log _2(5+1)}=7.14 \\ \\
N D C G @ 5=\frac{D C G}{I D C G}=\frac{6.64}{7.14}=0.93
\end{gathered}
$$
3. Online Test
Online A/B Test: Offline Test에서 검증된 가설이나 모델을 이용해 실제 추천 결과를 서빙하는 단계
추천 시스템의 변경 전후의 성능을 비교하는 게 아니라, 트래픽을 나눠서 동시에 대조군과 실험군의 성능을 평가
-> 대조군과 실험군의 환경을 최대한 동일하게 설정
<참고>
사실 대부분 현업에서는 의사 결정에 사용하는 최종 지표는 모델 성능이 아니라 매출, CTR 등의 비즈니스/서비스 지표를 활용!
인지도 기반 추천
1. 개요
- 추천 시스템의 가장 기본적인 형태
- 서비스 런칭 초반에 주로 사용
- 조회수, 평균 평점, 좋아요/싫어요 수 등의 척도를 활용
- 네이버 쇼핑 랭킹 순, 다음 뉴스, 댓글 추천 등이 그 예시
그렇다면 여기서 인지도의 정의가 무엇일까?
2. Most Popular
Score 공식: 가장 많이 조회된 뉴스나 좋아요가 가장 많은 게시글 추천
단, 뉴스의 가장 중요한 속성은 최신성이기 때문에, 업로드 날짜를 고려!
$$ \text{score} = f(\text{popularity}, \text{age}) $$
popularity와 age에 적절한 가중치를 주기 위해서 정교한 수식이 필요함!
예1) Hacker News Formula
$$
\text { score }=\frac{\text { pageviews }-1}{(\text { age }+2)^{\text {gravity }}}
$$
시간이 지날수록 age가 증가해서 score가 작아지게 설정!
예2) Reddit Formula
$$
\text { score }=\log _{10}(\text { ups }- \text { downs })+\frac{\operatorname{sign}(\text { ups }- \text { downs }) \cdot \text { seconds }}{45000}
$$
- 'popularity + 포스팅된 절대 시간'으로 생각하면 됨
- 오래된 것에 감점을 하지 않고, 최신 것에 가산점을 부여!
3. Highly Rated
Score 공식: 가장 높은 평점을 받은 영화 혹은 맛집을 추천
$$ score = f(\text{rating}, \text{# of ratings}) $$
- 유저들이 매긴 rating과 그 rating의 개수를 고려하는 것!
- 평균 rating이 아무리 높아도, 그 개수가 적으면 신뢰할 수 없기 때문!
예시1) Steam Rating Formula
$$
\begin{gathered}
\text { avg_rating }=\frac{\# \text { of postive reviews }}{\# \text { of reviews }} \\
\text { score }=\text { avg_rating }-(\text { avg_rating }-0.5) \cdot 2^{-\log (\# \text { of reviews })}
\end{gathered}
$$
- rating의 평균값을 사용하되, 전체 review 개수에 따라 rating을 보정
- review 개수가 많아지면, score는 평균 rating과 유사해짐
예시2) Steam Rating Formula - Movie Rating
Movie Rating에 활용
$$
\begin{gathered}
\text { avg_rating }=\frac{\operatorname{sum}(\text { rating })}{\# \text { of reviews }} \\
\text { score }=\text { avg_rating }-(\text { avg_rating }-3.0) \cdot 2^{-\log (\# \text { of reviews })}
\end{gathered}
$$
- 영화 평점은 Positive / Negative가 아니라 1.0부터 5.0 사이의 Rating을 사용 (3.0이 중앙값)
- review 개수가 많아질수록 score는 평균 rating에 가까워짐
'boostcamp AI Tech > 추천 시스템' 카테고리의 다른 글
[RecSys] Item2Vec and ANN (0) | 2023.03.31 |
---|---|
[RecSys] 추천 시스템 - 협업 필터링 (Collaborative Filtering) - MBCF (0) | 2023.03.29 |
[RecSys] 추천 시스템 - 협업 필터링 (Collaborative Filtering) - NBCF (0) | 2023.03.27 |
[RecSys] 추천 시스템 - TF-IDF를 활용한 컨텐츠 기반 추천 (0) | 2023.03.27 |
[RecSys] 추천 시스템 - 연관 분석 (Association Analysis) (0) | 2023.03.27 |