Evan Miller shows un enfoque bayesiano para la clasificación de 5 clasificaciones de estrellas: 
donde
nk
es el número de clasificaciones k
-STAR,
sk
es el "valor" (en puntos) de k
estrellas,
N
es el número total de votos de
K
es la cantidad máxima de estrellas (p. Ej. K = 5, en un sistema de clasificación de 5 estrellas)
z_alpha/2
es el cuantil 1 - alpha/2
de una distribución normal. Si desea un 95% de confianza (basado en la distribución posterior bayesiana) de que el criterio de clasificación real es al menos tan grande como el criterio de clasificación calculado, elija z_alpha/2
= 1.65.
En Python, el criterio de clasificación se puede calcular con
def starsort(ns):
"""
http://www.evanmiller.org/ranking-items-with-star-ratings.html
"""
N = sum(ns)
K = len(ns)
s = list(range(K,0,-1))
s2 = [sk**2 for sk in s]
z = 1.65
def f(s, ns):
N = sum(ns)
K = len(ns)
return sum(sk*(nk+1) for sk, nk in zip(s,ns))/(N+K)
fsns = f(s, ns)
return fsns - z*math.sqrt((f(s2, ns)- fsns**2)/(N+K+1))
Por ejemplo, si un elemento tiene más de 60 cinco estrellas, 80 de cuatro estrellas, 75 de tres estrellas, 20 dos-estrellas y 25 estrellas, luego su calificación global de estrellas sería de aproximadamente 3.4:
x = (60, 80, 75, 20, 25)
starsort(x)
# 3.3686975120774694
y se puede ordenar una lista de calificaciones de 5 estrellas con
sorted([(60, 80, 75, 20, 25), (10,0,0,0,0), (5,0,0,0,0)], key=starsort, reverse=True)
# [(10, 0, 0, 0, 0), (60, 80, 75, 20, 25), (5, 0, 0, 0, 0)]
Esto muestra el efecto que pueden tener más calificaciones en el valor global estrellas.
Usted encontrará que esta fórmula tiende a dar una calificación general que es un poco más baja que la calificación global informado por sitios como Amazon, Ebay o Wal-Mart particularmente cuando hay pocos votos (decir, menos de 300). Esto refleja la mayor incertidumbre que viene con menos votos. A medida que el número de votos aumente (en miles), todas estas fórmulas de clasificación deberían tener una calificación promedio de (ponderada).
Puesto que la fórmula solo depende de la distribución de frecuencias de calificaciones de 5 estrellas para el artículo en sí mismo, es fácil combinar opiniones de múltiples fuentes (o, actualización la calificación global a la luz de nuevos votos) simplemente agregando las distribuciones de frecuencia juntas.
A diferencia de la fórmula IMDb, esta fórmula no depende de la puntuación media en todos los artículos, ni un número mínimo artificial del valor califican de corte.
Además, esta fórmula hace uso de la distribución de frecuencias completa, no solo de el número promedio de estrellas y el número de votos. Y tiene sentido que sea dado que un artículo con diez estrellas y diez estrellas debería tratarse como con más incertidumbre que (y por lo tanto no tan alta como) un elemento con veinte clasificaciones de 3 estrellas:
In [78]: starsort((10,0,0,0,10))
Out[78]: 2.386028063783418
In [79]: starsort((0,0,20,0,0))
Out[79]: 2.795342687927806
La fórmula de IMDb no tiene esto en cuenta.
La forma correcta de hacerlo es la media, y para los artículos que aún no han sido clasificados, tener un estado de "no clasificado". ¿Cómo lo intentaste? ¿Cómo falló? – David