인기도 기반 추천
인기도 기반 추천이란
- 말 그대로 가장 인기있는 아이템을 추천하는 추천 시스템의 가장 단순한 형태 중 하나이다.
- 인기도의 척도는 조회수, 평균 평점, 리뷰 개수, 좋아요, 싫어요 수 등으로 정의할 수 있다.
스코어 만들기
Most Popular
- 조회수가 가장 많은 아이템을 추천하는 방법이다.
- 뉴스 추천 등에서처럼 다른 유저들도 많은 관심을 가지고 있는 핫한 이슈를 보고싶어 한다.
Highly Rated
- 평균 평점이 가장 높은 아이템을 추천하는 방법이다.
- 맛집 추천 등에서처럼 평점이 높은 맛집일수록 맛있는 음식을 제공한는 레스토랑으로 기대된다.
Most Polular based Score
score=f(popularity,age)
- 가장 많이 조회된 뉴스 중 추천 or 좋아요가 가장 많은 게시글을 추천한다.
- score=(upvote−downvote)−time_elasped=pageviews−time_elasped
- 단점 : pageview가 더 빠르게 늘어난다면 많은 시간이 흘러도 같은 글이 계속 Top Rank에 보일 것이다.
score=(age+2)gravitypageviews−1
- 시간이 지날수록 age가 점점 증가하므로 score는 작아진다.
- 시간에 따라 줄어드는 score를 어느정도 조정하기 위해 gravity(
1.8)라는 상수를 사용한다.
score=log10(ups−downs)+45000sign(ups−downs)∗seconds
- 첫 번째 term은 polularity를 나타내며, 두 번째 term은 포스팅이 게시된 절대 시간을 나타낸다.
- 즉, 나중에 게시된 포스팅일수록 절대시간이 크기 때문에 더 높은 score를 가지게 된다.
- 첫 번째 vote에 대해서 가장 높은 가치를 부여하며, vote가 늘어날 수록 score의 증가 폭이 작아진다.
- 즉, 오래된 포스팅일수록 상대적으로 많은 vote가 있어야 높은 score를 가지게 된다.
Highly Rated based Score
score=f(rating,# of ratings)
- 가장 높은 평점을 받은 영화 혹은 맛집을 추천한다.
- 평균 rating을 사용하며, 전체 reivew의 개수에 따라 rating을 보정하는 방식이다.
avg_rating=# of reviews# of positive reviews
score=avg_rating−(avg_rating−0.5)∗2−log(# of reviews)
- reivew의 개수가 아주 많을 경우 score는 평균 rating과 유사해진다.
- 영화 평점은 positive, negative가 아닌 1.0부터 5.0의 rating을 사용한다.
- 따라서 Steam Rating Formula의 보정 수치 0.5 대신 중앙 값인 3.0을 사용한다.
- 3.0 대신에 모든 평점 데이터의 평균 값을 사용해도 된다.
avg_rating=# of reviewssum(rating)
scores=avg_rating−(avg_rating−3.0)∗2−log(# of reviews)
def get_steam_rating(
movie_statistics: pd.DataFrame
) -> None:
movie_statistics['steam_rating'] = movie_statistics['avg_rating'] - (movie_statistics['avg_rating'] - 2.5) \
* np.power(2, -np.log10(movie_statistics['num_users']))