Ask HN: How do you determine "hot" or "popular" user-generated items?

5 points by pamelafox ↗ HN
I put together a little app this weekend which lets people translate phrases through different languages and see the often funny or interesting results: http://translation-telephone.com

On the sidebar, I display "recent" and "popular" phrases, to encourage people to browse others. Right now, "popular" is a random three of the top 30 viewed phrases - really basic. I'd like to make it smarter and I imagine there are a variety of techniques that I can use, like the HN metric for frontpage news.

What techniques do you guys suggest? Thanks!

(Note: Architecture is App Engine/Python, if that's relevant)

5 comments

[ 4.2 ms ] story [ 17.6 ms ] thread
hotness needs a time based component like velocity coupled with relevance

e.g. responded to ('liked' or viewed) x times within y minutes + relevance (it's very funny &| it's topical &| it's trending elsewhere)

The most straightforward way is to start with some default value for "hotness" and then decay the hotness by time (a logarithmic basis is popular for this), and increase hotness based on activity (votes, comments, etc.)

For a real-world example (albeit one from code that's not much beyond "prototype" status) feel free to look at what we do in Neddick:

https://github.com/fogbeam/Neddick/blob/master/grails-app/se...

look at the calculateScore() and calculateHotness() methods in particular.

What we do there is basically just use 0 as the default, count each upvote as +1 to score and each downvote as -1 to score, then use the score as the hotness, before decaying by age. It's simple and not optimized at all, but it gives the general effect we're looking for.