Hello! Just a quick thought: at the moment, sorting by ranking is basically useless as a story with a single 5-star rating will be placed lower than a story with 10,000 5-star ratings and one 4-star rating.
This is easily fixed by implementing a simple bayesian ranking system, which is very, very easy to implement.
You require two constant values that you can easily calculate from the database (the average ranking for all stories, and the lower quartile for number of ratings). You can generally just do this once and leave it, but if you wanted you could always manually recalculate it a few times a year if you wanted. Or you could just use some common values of 3.5 star average rating and 100 for average rating counts :P
Then you can just calculate a bayesian rating value for all stories, which is basically a combination of the rating, and how statistically likely that the story's 'true' rating reflects that value (i.e. a 5-star story with one rating is less likely to actually be a 5-star story than a 5-star story with a thousand ratings)
Here's a page explaining what it is, how it works and how to calculate it: https://www.algolia.com/doc/guides/managing-results/must-do/custom-ranking/how-to/bayesian-average/
The formula is literally just:
And in case 'number of ratings' isn't something that the database tracks, you can use a roughly equivalent metric like view count, favourite count, etc.
Anyway please think about it! I feel like the benefit to amount of development effort is pretty good on this one :)
When I implemented this on my site I was surprised and delighted at how good the results are!
This is easily fixed by implementing a simple bayesian ranking system, which is very, very easy to implement.
You require two constant values that you can easily calculate from the database (the average ranking for all stories, and the lower quartile for number of ratings). You can generally just do this once and leave it, but if you wanted you could always manually recalculate it a few times a year if you wanted. Or you could just use some common values of 3.5 star average rating and 100 for average rating counts :P
Then you can just calculate a bayesian rating value for all stories, which is basically a combination of the rating, and how statistically likely that the story's 'true' rating reflects that value (i.e. a 5-star story with one rating is less likely to actually be a 5-star story than a 5-star story with a thousand ratings)
Here's a page explaining what it is, how it works and how to calculate it: https://www.algolia.com/doc/guides/managing-results/must-do/custom-ranking/how-to/bayesian-average/
The formula is literally just:
globalDbFactor = globalAverageRating * globalNumberOfRatingsLowerQuartile //calculated once from the entire database
bayesianAverage = (storyAverageRating * storyNumberOfRatings + globalDbFactor) / globalDbFactor
And in case 'number of ratings' isn't something that the database tracks, you can use a roughly equivalent metric like view count, favourite count, etc.
Anyway please think about it! I feel like the benefit to amount of development effort is pretty good on this one :)
When I implemented this on my site I was surprised and delighted at how good the results are!