Ainsi, 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 assez de fabrication 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 facteurs:
// We can adjust this factor to adjust our curve.
double factor = 1.5;
// Here's some sample data
double RatingAverage1 = 5;
double RatingCount1 = 1;
double RatingAverage2 = 4.5;
double RatingCount2 = 5;
double RatingAverage3 = 3.5;
double RatingCount3 = 50000; // 50000 is not infinite, but it's probably plenty to closely simulate it.
// Do the calculations
double modfactor = Math.Pow(factor, RatingCount1);
double modRating1 = (3 / modfactor)
+ (RatingAverage1 * (1 - 1 / modfactor));
double modfactor2 = Math.Pow(factor, RatingCount2);
double modRating2 = (3 / modfactor2)
+ (RatingAverage2 * (1 - 1 / modfactor2));
double modfactor3 = Math.Pow(factor, RatingCount3);
double modRating3 = (3 / modfactor3)
+ (RatingAverage3 * (1 - 1 / modfactor3));
Console.WriteLine(String.Format("RatingAverage: {0}, RatingCount: {1}, Adjusted Rating: {2:0.00}",
RatingAverage1, RatingCount1, modRating1));
Console.WriteLine(String.Format("RatingAverage: {0}, RatingCount: {1}, Adjusted Rating: {2:0.00}",
RatingAverage2, RatingCount2, modRating2));
Console.WriteLine(String.Format("RatingAverage: {0}, RatingCount: {1}, Adjusted Rating: {2:0.00}",
RatingAverage3, RatingCount3, modRating3));
// Hold up for the user to read the data.
Console.ReadLine();
Si vous ne vous souciez pas de la copie, il donne à cette sortie:
RatingAverage: 5, RatingCount: 1, Adjusted Rating: 3.67
RatingAverage: 4.5, RatingCount: 5, Adjusted Rating: 4.30
RatingAverage: 3.5, RatingCount: 50000, Adjusted Rating: 3.50
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.