Search code examples
phpsqlmathratinglogarithm

Rating Formula Design (conceptual not coding)


One element of my site is a rating system. I am puzzled a bit by how best to set up the formula and I hope someone with more math aptitude can help me.

Users upload pictures that are rated 1-10 by other users. The users rating then is the average of those scores.

Simple enough. However, I want to add some system which rewards users for uploading more pictures. SO that the formula would be average of ratings + some function of the number of pictures uploaded.

An example might be, Rating = AVG + .05 * Count

This formula would be somewhat fair for users who have uploaded 1-20 pictures... However, if users upload 2000 pictures they will have bipassed the entire rating system and automatically will have a 10/10.

So, my limited knowledge of post algebra math is failing. What would be some formula that would produce the desired effect? The word "log" keeps bouncing around in my head--but I honesty can't remember anything about why... :)


Solution

  • you could do something like:

    Rating = Average + (\sum_{i=1}^numofuploads 1/i)*scalefactor
    

    though the sum grows to infinity - the sum grows very slowly

    Edit:

    The idea is basically the same as with @maxhud's solution you add less points to your rating for every picture, and for simplicity say scaling is 1/3, and for now i use exact not floating point math

    1 -> avg + (1/1)*.3 = avg + 1/3
    2 -> avg + (1/1+1/2)/3 = avg + (3/2)/3) = avg + 1/2
    3 -> avg + (3/2+1/3)/3 = avg + (10/6)/3 = avg + 10/18 = avg + 5/9 ~ avg + .55555
    4 -> ...
    

    technically the series (1+1/2+1/3+…) is going to infinity but you'd have to upload a huge amount of pictures to go over 50 - so you'd better choose your scaling factor carefully and give a bit, of thought. If you want to have a maximum of points that can be achieved via uploading this is the WRONG solution. You should rather go with something like

    avg + scaling*(.9^n)
    

    where n is the number of pictures. if you could upload infinitely many pictures you would have

    avg + scaling*(1/(1-.9)) = avg + 10*scaling
    

    for your rating: which is, as I commented, much better.

    ps: I think @maxhud should leave

    avg + numofpics*scale*(.9^numofpics)
          ^^^^^^^^^
    

    because after uploading 10 pictures you have outweight your shrinking growth function.