Quelle est la meilleure façon de trier par 5 étoiles?
Je suis en train de trier un tas de produits par les notes des clients à l'aide d'un 5 étoiles du système. Le site que je vais mettre cela en place pour ne pas avoir beaucoup de cotes et de continuer à ajouter de nouveaux produits, il aura généralement un petit nombre de produits avec un faible nombre de cotes.
J'ai essayé en utilisant la moyenne étoiles, mais que l'algorithme échoue lorsqu'il y a un petit nombre d'évaluations.
Exemple, un produit qui a 3x 5 étoiles ne serait meilleur qu'un produit qui a 100x 5 étoiles et 2x 2 étoiles.
Ne pas le deuxième produit d'apparaître plus haut parce qu'il est statistiquement plus digne de confiance en raison du plus grand nombre de notations?
InformationsquelleAutor Vizjerai | 2009-09-11
Vous devez vous connecter pour publier un commentaire.
Avant 2015, l'Internet Movie Database (IMDb) cotée en bourse de la formule utilisée pour classer leurs Le Top 250 liste des films. Pour citer:
Il n'est pas difficile à comprendre. La formule est la suivante:
Qui peut être mathématiquement simplifiée:
Les variables sont:
[1, 5]
. Et ainsi de suite.)[2, 3, 5, 5]
. C est de 3,75, la moyenne de ces nombres.)Tous la formule est la suivante: m imaginaire des voix, chacune avec une valeur de C, avant le calcul de la moyenne. Au début, quand il n'y a pas assez de données (c'est à dire le nombre de voix est très inférieure à celle m), ce qui provoque les espaces vides à remplir avec les données moyennes. Cependant, comme les votes s'accumule, finalement, l'imaginaire votes seront noyés par de vrais.
Dans ce système, les votes ne pas causer la notation de fluctuer énormément. Au lieu de cela, ils ne font que perturber un peu dans une certaine direction.
Quand il n'y a aucune voix, seulement imaginaire, il existe des votes, et tous sont de C. Ainsi, chaque élément commence par une note de C.
Voir aussi:
Voir cette page pour une bonne analyse de la star basés sur des systèmes de notation, et cette une pour une bonne analyse de upvote-/downvote les systèmes.
Haut et bas pour le vote, vous souhaitez estimer la probabilité que, étant donné les classements que vous avez, le "vrai" score (si vous l'aviez infini de l'évaluation) est supérieure à la quantité (comme, par exemple, le nombre similaire pour un autre point que vous êtes de tri contre).
Voir le deuxième article pour la réponse, mais la conclusion est que vous voulez utiliser la Wilson confiance. L'article donne l'équation et l'exemple de code Ruby (facilement traduit dans une autre langue).
Evan Miller montre une approche Bayésienne de classement 5 étoiles:
où
nk
est le nombre dek
étoiles,sk
est la "valeur" (en points) dek
étoiles,N
est le nombre total de votesK
est le nombre maximum d'étoiles (par exemple, K=5, dans un 5-star rating system)z_alpha/2
est le1 - alpha/2
quantile d'une distribution normale. Si vous voulez de confiance à 95% (basé sur la distribution postérieure Bayésienne) que le véritable critère de tri est au moins aussi important que le résultat de critère de tri, de choisirz_alpha/2
= 1.65.En Python, le critère de tri peut être calculé avec
Par exemple, si un élément a de 60 à cinq étoiles, de 80 quatre-étoiles, 75 trois-étoiles, de 20 deux-étoiles et 25 un-stars, puis sa notation globale serait d'environ 3.4:
et vous pouvez trier une liste de 5 étoiles avec
Cela montre l'effet que plus de votes peuvent avoir sur l'ensemble de la star de la valeur.
Vous verrez que cette formule tend à donner une note globale qui est un peu
plus bas que la cote globale est signalé par des sites comme Amazon, Ebay ou Wal-mart
surtout quand il y a peu de votes (disons, moins de 300). Cela reflète l'
plus uncertainy qui vient avec moins de voix. Que le nombre de voix augmente
(en milliers) tous l'ensemble de ces formules de notation devraient tendre à la
moyenne (pondérée) de notation.
Car la formule ne dépend que de la distribution de fréquence de 5 étoiles
pour l'article lui-même, il est facile de combiner examens à partir de plusieurs sources (ou,
mise à jour la cote globale à la lumière de nouveaux votes) en ajoutant simplement la fréquence
distributions.
Contrairement à la IMDb formule, cette formule ne dépend pas de la moyenne de score
dans tous les articles, ni artificiel nombre minimum de votes de la valeur limite.
De plus, cette formule permet l'utilisation de la fréquence de distribution, pas seulement de l'
le nombre moyen d'étoiles et le nombre de votes. Et il est logique qu'elle
doit depuis un élément avec une dizaine de 5-étoiles et dix de 1 étoiles doivent être traités comme des
avoir plus d'incertitude que (et donc pas classé comme très que) d'un élément avec l'
vingt 3 étoiles:
L'IMDb formule ne prend pas cela en compte.
rated5
,rated4
,rated3
,rated2
, etrated1
, qui sont chefs de la façon dont beaucoup de gens ont donné que la cote.select ((5*(rated5+1)+4*(rated4+1)+3*(rated3+1)+2*(rated2+1)+1*(rated1+1))/(5+rated5+rated4+rated3+rated2+rated1))-1.65*SQRT((((25*(rated5+1)+16*(rated4+1)+9*(rated3+1)+4*(rated2+1)+1*(rated1+1))/(5+rated5+rated4+rated3+rated2+rated1)) - POWER(((5*(rated5+1)+4*(rated4+1)+3*(rated3+1)+2*(rated2+1)+1*(rated1+1))/(5+rated5+rated4+rated3+rated2+rated1)), 2))/(6+rated5+rated4+rated3+rated2+rated1)) as x from mytable
Vous pouvez trier par médiane au lieu de la moyenne arithmétique. Dans ce cas, les deux exemples ont une médiane de 5, de sorte que les deux ont le même poids dans un algorithme de tri.
Vous pouvez utiliser un mode pour le même effet, mais la médiane est probablement une meilleure idée.
Si vous souhaitez attribuer plus de poids à l'produit avec 100 5 étoiles, vous aurez probablement envie d'aller avec une sorte d'pondérée de la mode, d'attribuer plus de poids aux notations avec la même médiane, mais avec plus de voix.
Bien, selon le degré de complexité que vous voulez faire, vous pourriez avoir des classements en outre être pondérée en fonction du nombre de cotes de la personne a fait, et ce que ces notations sont. Si la personne n'a fait qu'une seule note, il pourrait être un complice de notation, et pourrait compter pour moins. Ou si la personne a déterminé beaucoup de choses dans la catégorie a, mais peu dans la catégorie b, et a une note moyenne de 1.3 sur 5 étoiles, ça sonne comme de la catégorie a peut être artificiellement écrasés par le faible score moyen de cet utilisateur, et doit être ajusté.
Mais suffit de faire un sujet complexe. Nous allons faire simple.
En supposant que nous travaillons avec seulement deux valeurs, ReviewCount et AverageRating, pour un article en particulier, il serait logique pour moi de regarder ReviewCount essentiellement comme étant la “fiabilité” de la valeur. Mais nous ne voulons pas seulement d'apporter des scores bas à faible ReviewCount éléments: un seul étoiles est probablement aussi peu fiable qu'un seul 5 étoiles. Donc, ce que nous voulons faire est probablement de la moyenne vers le milieu: 3.
Donc, fondamentalement, je pense à une équation de quelque chose comme X * AverageRating + Y * 3 = la-cote-nous-envie. Afin de rendre cette valeur de sortir à droite nous avons besoin de X+Y est égale à 1. Aussi nous avons besoin de X à l'augmentation de la valeur que ReviewCount augmente...avec un examen comte de 0, x doit être égal à 0 (en nous donnant une équation de “3”), et avec une infinie examen nombre X doit être de 1 (ce qui rend l'équation = AverageRating).
Quels sont donc X et Y équations? Pour le X de l'équation voulez la variable dépendante à l'infini de 1 lorsque la variable indépendante approche de l'infini. Un bon ensemble d'équations est quelque chose comme:
Y = 1/(facteur^RatingCount)
et (en utilisant le fait que X doit être égal à 1-Y)
X = 1 – (1/(facteur^RatingCount)
Ensuite, nous pouvons ajuster "facteur" pour s'adapter à la gamme que nous recherchons.
J'ai utilisé ce simple programme C# pour essayer quelques-uns des facteurs:
Si vous ne vous souciez pas de la copie, il donne à cette sortie:
Quelque chose comme ça? Vous pourriez évidemment ajuster le "facteur" de la valeur que nécessaire pour obtenir le type de pondération que vous voulez.
Si vous avez juste besoin d'un rapide et bon marché de la solution pour la plupart, travaillent sans l'aide de beaucoup de calcul, voici une option (en supposant que de 1 à 5 de l'échelle de notation)
Par l'ajout en 25 et en divisant par le nombre total de notes + 20, vous êtes essentiellement en ajoutant 10 des pires scores et les 10 meilleurs scores pour les votes, et ensuite le tri en conséquence.
Il y a des problèmes connus. Par exemple, elle a injustement récompenses à faible notation des produits avec peu de notes (comme ce graphique le démontre, les produits avec une note moyenne de 1 et une cote de 1,2 tandis que les produits avec une note moyenne de 1 et 1k+ cotes score proche à 1,05). Vous pourrait aussi affirmer qu'il punit injustement des produits de haute qualité avec quelques notations.
Ce graphique montre ce qui se passe pour tous les 5 notes sur 1-1000 cotes:
http://www.wolframalpha.com/input/?i=Plot3D%5B%2825%2Bxy%29/%2820%2Bx%29%2C%7Bx%2C1%2C1000%7D%2C%7By%2C0%2C6%7D%5D
Vous pouvez voir le pendage vers le haut au bas de la liste d'écoute, mais dans l'ensemble c'est juste un classement, je pense. Vous pouvez également regarder cela de cette façon:
http://www.wolframalpha.com/input/?i=Plot3D%5B6-%28%2825%2Bxy%29/%2820%2Bx%29%29%2C%7Bx%2C1%2C1000%7D%2C%7By%2C0%2C6%7D%5D
Si vous laissez tomber une bille sur la plupart des endroits dans ce graphique, il sera automatiquement rouleau vers des produits à la fois avec des scores élevés et des notes plus élevées.
Évidemment, le faible nombre d'évaluations met ce problème à une statistique de handicap. Jamais le moins...
Un élément clé pour l'amélioration de la qualité d'un agrégat de notation est le taux de "l'objectivité", c'est à dire de garder les onglets des cotes de chaque particulier "rater" est fourni (par rapport à d'autres). Cela permet de pesage leur voix lors du processus d'agrégation.
Une autre solution, plus d'une face, est de fournir aux utilisateurs finaux un nombre (ou une plage d'indication de celle-ci) des votes pour l'élément sous-jacent.
Une option est quelque chose comme Microsoft TrueSkill système, où le score est donné par
mean - 3*stddev
, où les constantes peuvent être ajustés.Après avoir regard pendant un certain temps, j'ai choisi le système Bayésien.
Si quelqu'un est à l'aide de Ruby, voici un bijou pour elle:
https://github.com/wbotelhos/rating
Je recommande fortement le livre de la Programmation de l'Intelligence Collective par Toby Segaran (OReilly) ISBN 978-0-596-52932-1 qui explique comment extraire des données utiles de comportement de la foule. Les exemples sont en Python, mais son assez facile de convertir.