Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP/MySQL - algorithm for "Top Rated"

So I just built a star-rating system and and trying to come up with an algorithm to list the "Top Rated" items. For simplicity, here are the columns:

item_name
average_rating (a decimal from 1 to 5)
num_votes

I'm trying to determine the "sweet spot" between number of votes and rating. For example...

  • An item rated (4.6 / 20 votes) should be higher on the list than an item that's (5.0 / 2 votes)
  • An item rated (2.5 / 100 votes) should be below an item that's (4.5 / 2 votes)

So in other words, num_votes plays a factor in what's "Top".

Anyone know of an algorithm that is pretty good at determining this "sweet spot"?

Thanks in advance.

like image 316
Matt Avatar asked Sep 16 '09 14:09

Matt


2 Answers

here's another, statistically sound good way: http://www.thebroth.com/blog/118/bayesian-rating

like image 139
longneck Avatar answered Nov 09 '22 07:11

longneck


The question is, how much higher the 4.6/20 shall be rated than the 5.0/2...

An idea not to take items in consideration that do not have at least x votes.

Another idea is to fill up with "medium" votes. Decide that 10votes shall be the minimum. The 5.0/2 must be filled with 8 virtual votes of 2.5

5.0/2 means 2 votes with 5.0, add 8 with 2.5 you'll get 30/10 -> 3.0 ;)

Now, you have to decide how many votes an item shall at least have. For those that already have the minimum votes, a direct comparation shall be done.

4.5/20 > 4.4/100
5.0/2  < 3.1/20  (as 5.0/2 is, as we calculated, 3.0/10)
like image 3
tuergeist Avatar answered Nov 09 '22 07:11

tuergeist