2009-09-16 6 views
4

Donc, je viens de construire un système de notation et d'essayer de trouver un algorithme pour lister les éléments les mieux notés. Par souci de simplicité, voici les colonnes:PHP/MySQL - algorithme pour "Top Rated"

item_name 
average_rating (a decimal from 1 to 5) 
num_votes 

Je suis en train de déterminer le « sweet spot » entre le nombre de votes et note. Par exemple ...

  • Un élément noté (4,6/20 votes) devrait être plus élevé sur la liste que un élément qui est (5,0/2 votes)
  • Un élément noté (2,5/100 votes) devrait être ci-dessous un élément qui est (4,5/2 votes)

en d'autres termes, NUM_VOTES joue un rôle dans ce qui est "Top".

Quelqu'un connaît un algorithme qui est assez bon pour déterminer ce "sweet spot"?

Merci d'avance.

Répondre

9

est ici une autre, son bon moyen statistiquement: http://www.thebroth.com/blog/118/bayesian-rating

+2

Pour compléter ceci, il y a cette option aussi, c'est un peu plus intense: http://www.evanmiller.org/how-not-to-sort-by-average-rating.html La classification bayésienne est probablement bien meilleure . C'est une autre approche intéressante cependant. – brianreavis

+0

Cette solution est bonne, mais elle a le désavantage de connaître le nombre moyen de votes et d'évaluations! Cela signifie plus de [!] Requêtes MySQL pour chaque calcul d'évaluation. – tuergeist

+0

cette page evanmiller.org est celle que je cherchais car c'est aussi un excellent algorithme. Je ne pouvais pas regarder au travail parce que pour une raison quelconque, il est bloqué par le filtre de contenu. – longneck

3

La question est, combien plus le 4,6/20 doit être évalué que le 5.0/2 ...

Une idée de ne pas prendre en considération les éléments qui ne sont pas au moins x votes.

Une autre idée est de remplir avec des votes «moyens». Décidez que 10votes doit être le minimum. Le 5.0/2 doit être rempli avec 8 votes virtuels de 2,5

5,0/2 signifie 2 votes avec 5,0, ajouter 8 avec 2.5 vous obtiendrez 30/10 -> 3.0;)

Maintenant, vous avez décider du nombre de votes qu'un article doit avoir au moins. Pour ceux qui ont déjà les votes minimum, une comparaison directe doit être faite.

4.5/20 > 4.4/100 
5.0/2 < 3.1/20 (as 5.0/2 is, as we calculated, 3.0/10) 
+0

Qu'en est-4/20 et 4/1000. 4/20 = 0,2 et 4/1000 = 0,004 – andho

+0

4/1000 signifie un vote moyen de 4 avec 1000 votes non divisé par 1000: | – tuergeist

2

Que diriez-vous donner à chaque 10 votes un poids de 1 donc 20 voix donne l'article 2 poids. Ensuite, si l'élément a 0 poids, il va perdre 0,5 de la moyenne

4.6/20 = 20/10: 2 weight 
5.0/2 = 2/10: 0 weight 

(4.6 * 0.02) + 4.6 = 4.692 
(5.0 * 0.00) + 5.0 = 5 - 0.5 = 4.5 

2.5/100 = 100/10: 10 weight 
4.5/2 = 2/10: 0 weight 

(2.5 * 0.1) + 2.5 = 2.75 
(4.5 * 0.0) + 4.5 = 4.5 - 0.5 = 4