최근 인기 알고리즘

  • ref. OKKY

오키에서 주간 베스트라는 항목이 있는데 이 항목에 글들을 어떻게 배치할 수 있을까? 솔직히 매우 간단한 알고리즘이라 생각된다. 일주일 이내에 작성된 글을 먼저 필터링하고 조회수 높은 순서로 배치해주면 되겠다. 굳이 좋아요가 아닌 조회수를 사용한 이유는 좋아요는 친목으로 인해 쉽게 상위로 갈 수 있기 때문이다. 다만 제목으로 어그로를 끄는 경우를 대비하여 조회수 대비 좋아요 비율을 측정하여 포스트를 배치하면 되겠다.

현재는 순전히 조회수 순으로 배치하고 있다.


사용자 맞춤 추천 알고리즘

  • ref. YouTube

유튜브에는 사용자 맞춤 영상 추천 알고리즘을 가지고 있다. 어떤 방식으로 돌아가는 걸까 고민하며 나름 나만의 방식으로 추천 방법을 생각해 보았다.

  1. 포스트 목록을 최신순으로 불러온다.
  2. 포스트를 리스트로 변경하고 각각의 포스트 옆에 우선순위 값(100)을 추가한다.
  3. 사용자가 추천한 글과 같은 태그의 글의 우선순위에 1.?를 곱한다.
  4. 사용자가 구독한 사용자의 글을 찾아 우선순위에 1.?를 곱한다.
  5. 사용자가 읽은 글의 시리즈를 찾아 우선순위에 1.?를 곱한다.
  6. 사용자가 읽은 글의 태그를 찾아 우선순위에 1.?를 곱한다.
  7. 사용자가 이미 읽은 글은 우선순위에 0.?를 곱한다.

먼저 위 방식을 사용하기 위해서 가장 필요한 건 사용자가 읽은 포스트에 대한 정보다. 이를 보관하는 방법을 어떻게 하는게 효율적일까? 텍스트 필드에 콤마 형식으로 분할하여 스플릿? 아니면 varchar 형식으로 일일이 저장? 지금은 먼저 전자의 방식으로 진행할 것이다. 또한 이는 사용자의 활동 정보를 수집하는 것이므로 계정 설정에서 허용하거나 해지할 수 있도록 해줘야겠다.


트랜디한 포스트 찾는 알고리즘

  • ref. Velog

밸로그에는 트랜디한 포스트를 출력한다. 트랜디한 포스트라... 처음엔 당연히 좋아요가 최근에 많이 된 글을 찾으면 되리라 생각했지만 그 글을 어떻게 찾느냐가 문제였다. 나름 나만의 방식으로 생각해 본 것은 아래와 같다.

최근에 추천을 많이 받았다?

  • 얼마나 주기가 짧은지 비교해야 된다.
  • 마지막으로 추천된 날짜를 보관하고 사용자가 추천하면 그 텀을 비교한다.
  • 식은 (20/(내가 추천한 날짜 - 마지막 추천된 날짜 + 1)) 정도면 되지 않을까?
  • 좋아요를 지속적으로 좋아요 취소하는 경우를 대비하여 취소시 과감하게 -20을 제공한다.
  • 트랜디 수치는 절대로 0 이하로 내려가지 않게 한다.
  • 해당 점수는 데이터베이스에 트랜디값으로 보관하고 트랜디값으로 정렬하면 될듯하다.
  • 또한 수치를 일정 기간에 한번 감소시키던 초기화하던 해야겠다.