못다한 정리 다시 시작합니다!
인기도 기반 추천
정보Feature
를 기반으로 일종의 '점수Score
'를 매겨 가장 '인기'가 있는 아이템을 추천하는 방식을 인기도 기반 추천이라고 합니당!
Score 만드는 법
인기도의 척도에 대한 예시는 아래와 같습니당!
인기도의 척도
- 조회수, 평균 평점, 리뷰 개수, 좋아요/싫어요 수, etc
ex. 네이버 쇼핑 랭킹순, 다음 뉴스, 댓글 추천, Reddit-hot
하나만의 방식으로 만드는 것은 원하는 결과를 얻기가 어렵다고 합니당
뉴스를 예로 들면 조회수가 많은 기사가 있지만, 오래전에 게시된 글이라 조회수가 누적되어 많은 경우가 있습니다. 뉴스는 최신성
이라는 속성이 매우 중요하기 때문에 이를 고려해야 합니다
Score 방식
Fomula Overview
Score=(좋아요−싫어요)−경과시간=(페이지뷰)−경과시간
- 이경우엔 페이지 뷰가 더 빠르게 늘어나면 1~2년이 지나도 계속해서 같은 글이 Top Rank에 보이게 됩니다. 여러 기업에선 이 문제를 해결하기 위해 각자만의 개선된 공식을 정했습니당!
Score=(age+2)gravity페이지뷰−1
Hakcer News에서 사용하는 공식이라고 합니당 물론 이건 옛날겁니당. 정리하자면,
- 뉴스에 대한 랭킹
Score
, 시간 단위가 초sec
또는 분min
단위
- 시간이 지날수록
age
가 점점 증가하면서 Score
가 작아집니다
- 시간에 따라 줄어드는
Score
를 조정하기 위해 gravity
라는 상수를 사용합니다
Score=log10(좋아요−싫어요)+45000(sign(좋아요−싫어요)⋅sec)
이 공식을 설명하자면,
- 첫번째 term은
Popularity
, 두번째 Term은 글이 포스팅이 게시된 절대 시간
으로 나중에 게시된 포스팅일 수록 더 높은 Score
를 가지게 됩니다.
- 첫번째
vote
에 대해서 가장 높은 가치를 부여하며, vote
가 늘어날 수록 Score
의 증가 폭이 작아집니다.
highly Rated
평균평점=전체리뷰긍정적인리뷰수
평점=평균평점−(평균평점−0.5(중간수)∗2−log10전체리뷰)
이 경우엔,
- 가장 높은 평점을 통한 Score
rating
은 평균값을 사용하되, 전체 review 개수에 따라 rating을 보정
평균평점=전체리뷰모든평점의합
평점=평균평점−(평균평점−3.0∗2−log10전체리뷰)
게임 좋아하는(저 ㅎ) 사람에겐 유명한 Steam의 게임에 대한 평점 Score
공식입니당! 이 경우엔 평점이 1~5 사이이기 때문에 중간 값을 3.0
으로 주었습니당
인기도 기반 추천에 관한 이야기는 여기까지 다루겠습니다!
github : https://github.com/pray92/recommendation_system