추천화 시스템 02. 인기도 기반 추천

최지수·2021년 6월 15일
0

추천화 시스템

목록 보기
2/8

못다한 정리 다시 시작합니다!

인기도 기반 추천

정보Feature를 기반으로 일종의 '점수Score'를 매겨 가장 '인기'가 있는 아이템을 추천하는 방식을 인기도 기반 추천이라고 합니당!

Score 만드는 법

인기도의 척도에 대한 예시는 아래와 같습니당!

인기도의 척도

  • 조회수, 평균 평점, 리뷰 개수, 좋아요/싫어요 수, etc
    ex. 네이버 쇼핑 랭킹순, 다음 뉴스, 댓글 추천, Reddit-hot

하나만의 방식으로 만드는 것은 원하는 결과를 얻기가 어렵다고 합니당

뉴스를 예로 들면 조회수가 많은 기사가 있지만, 오래전에 게시된 글이라 조회수가 누적되어 많은 경우가 있습니다. 뉴스는 최신성이라는 속성이 매우 중요하기 때문에 이를 고려해야 합니다

Score 방식

Fomula Overview

Score=(좋아요싫어요)경과시간=(페이지뷰)경과시간Score = (좋아요 - 싫어요) - 경과시간 = (페이지 뷰) - 경과시간

  • 이경우엔 페이지 뷰가 더 빠르게 늘어나면 1~2년이 지나도 계속해서 같은 글이 Top Rank에 보이게 됩니다. 여러 기업에선 이 문제를 해결하기 위해 각자만의 개선된 공식을 정했습니당!

Hacker News Formula

Score=페이지뷰1(age+2)gravityScore = \frac{\text{페이지뷰} - 1}{(age + 2)^{gravity}}

Hakcer News에서 사용하는 공식이라고 합니당 물론 이건 옛날겁니당. 정리하자면,

  • 뉴스에 대한 랭킹 Score, 시간 단위가 초sec 또는 분min 단위
  • 시간이 지날수록 age가 점점 증가하면서 Score가 작아집니다
  • 시간에 따라 줄어드는 Score를 조정하기 위해 gravity라는 상수를 사용합니다

Reddit Formula

Score=log10(좋아요싫어요)+(sign(좋아요싫어요)sec)45000Score = log_{10}(좋아요 - 싫어요) + \frac{(sign(좋아요 - 싫어요) \centerdot sec)}{ 45000 }

이 공식을 설명하자면,

  • 첫번째 term은 Popularity, 두번째 Term은 글이 포스팅이 게시된 절대 시간으로 나중에 게시된 포스팅일 수록 더 높은 Score를 가지게 됩니다.
  • 첫번째 vote에 대해서 가장 높은 가치를 부여하며, vote가 늘어날 수록 Score의 증가 폭이 작아집니다.

highly Rated

평균평점=긍정적인리뷰수전체리뷰평균 평점 = \frac{긍정적인 리뷰 수}{전체 리뷰}

평점=평균평점(평균평점0.5(중간수)2log10전체리뷰)평점 = 평균 평점 - (평균 평점 - 0.5(중간 수) * 2^{-log_{10}{전체 리뷰}})

이 경우엔,

  • 가장 높은 평점을 통한 Score
  • rating은 평균값을 사용하되, 전체 review 개수에 따라 rating을 보정

Steam Rating Formula

평균평점=모든평점의합전체리뷰평균 평점 = \frac{모든 평점의 합}{전체 리뷰}

평점=평균평점(평균평점3.02log10전체리뷰)평점 = 평균 평점 - (평균 평점 - 3.0 * 2^{-log_{10}{전체 리뷰}})

게임 좋아하는(저 ㅎ) 사람에겐 유명한 Steam의 게임에 대한 평점 Score 공식입니당! 이 경우엔 평점이 1~5 사이이기 때문에 중간 값을 3.0으로 주었습니당

인기도 기반 추천에 관한 이야기는 여기까지 다루겠습니다!

github : https://github.com/pray92/recommendation_system

profile
#행복 #도전 #지속성

0개의 댓글