기타

[기타] 간단하게 Rancking Algorithm 구현하기 - Hacker News Algorithm

폭풍저그김탁구 2022. 9. 26. 12:06

 ML, AI 등이 필요 없이 그냥 단순하게 순위 알고리즘을 짜봤다.

애초에 적용할 기준이 하나만 있어서... 좋아요를 기준으로 순위를 짜보았고, 시간이 지남에 따라 매력도를 감소 시켰다.

 

 

 


 

 

 

유명한 Hacker News Algorithm을 이용해서 짜보았는데 자세한 설명은 참고 자료를 보면 된다.

 

내가 변형한 공식은 아래와 같다.

score = (likeNum) / (timediff) ** GRAVITY

 

 


 

 

간략하게 설명하자면

 

likeNum은 좋아요 수이다. 기존 알고리즘과 다른 점은, 나의 경우 좋아요 취소에 대한 보정이 필요 없으므로 -1을 해주지 않았다.

 

timediff는 업로드 날부터 오늘까지 지난 날이다. 기준은 day로 잡았다. 참고자료와 마찬가지로, 오늘 올라온 글은 인기순에 포함시켜주고 싶지 않아서, +2를 해주지 않았다.

이 값은 mysql의 내장함수를 이용해 쉽게 구할 수 있다.

SELECT timestampdiff(day, uploadTime, now()) FROM `TABLE`

 

GRAVITY는 상수값인데, 나는 1.3 정도로 잡았다. 그래프를 직접 그려보니 상수값이 1.3 정도일 때  일주일~이주일 사이에 매력도가 0에 수렴해서 적당한 수치라고 생각했다. 게시글이 많이 올라오는 곳이라면 이 수치를 높여주면 되겠다.

그래프 사이트에 들어가서 함수 만든 다음에 상수값 조절하면서 수치 보면 원하는 값을 쉽게 찾을 수 있다.

 

 

 


 

 

참고 자료

https://destiny738.tistory.com/581

 

[Ranking Algorithm] 인기순 알고리즘 (음원사이트 & Reddit basic & Hacker News)

1. 여는글  어떻게 하면 질리지 않고(똑같은 화면이 반복되지 않고), 인기순을 최대한 반영해주는 페이지를 보여줄수 있을까?  컨텐츠를 관리하는 입장에서 한번씩 막히는 부분이 위와 같은 의

destiny738.tistory.com

https://www.devchopin.com/blog/270/

 

Reddit의 순위 알고리즘

순위 알고리즘은 어떻게 작동할까? 개요 우선 웹 사이트의 시스템이나 특성에 따라, 홈페이지에서 기사의 순위를 매기는 방법을 결정해야 한다 Quora, Stack Overflow : 질문을 하고 답변을 얻어가는

www.devchopin.com