Evan Miller shows un approccio bayesiano classifica 5-stella: 
dove
nk
è il numero di k
valutazioni, foto, prezzi,
sk
è il "valore" (in punti) di k
stelle,
N
è il numero totale di voti
K
è il numero massimo di stelle (ad es. K = 5, in un sistema di classificazione a 5 stelle)
z_alpha/2
è il quantile 1 - alpha/2
di una distribuzione normale. Se si desidera una confidenza del 95% (basata sulla distribuzione posteriore bayesiana) che il criterio di ordinamento effettivo sia grande almeno quanto il criterio di ordinamento calcolato, scegliere z_alpha/2
= 1,65.
In Python, il criterio di ordinamento può essere calcolato 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))
Ad esempio, se un elemento 60 cinque stelle, 80 quattro stelle, 75 tre stelle, 20 due stelle e 25 stelle, quindi la sua valutazione complessiva sarebbe di circa 3.4:
x = (60, 80, 75, 20, 25)
starsort(x)
# 3.3686975120774694
e si può ordinare una lista delle valutazioni a 5 stelle 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)]
Questo mostra l'effetto che altre valutazioni possono avere sul valore complessivo stella.
Troverete che questa formula tende a dare una valutazione complessiva, che è un po ' inferiore al punteggio complessivo riportato da siti come Amazon, Ebay o Wal-mart in particolare quando ci sono pochi voti (diciamo meno di 300). Ciò riflette la maggiore incertezza dello che viene fornita con meno voti. Poiché il numero di voti aumenta di (in migliaia), tutte queste formule di valutazione dovrebbero tendere alla valutazione media (ponderata).
Dal momento che la formula dipende solo dalla distribuzione di frequenza delle valutazioni 5 stelle per l'oggetto in sé, è facile coniugare recensioni da fonti multiple (o, aggiornamento il punteggio complessivo alla luce di nuovi voti) aggiungendo semplicemente le distribuzioni di frequenza insieme.
A differenza della formula di IMDb, questa formula non dipende il punteggio medio in tutti gli elementi, né un numero minimo artificiale del valore di cut-off voti.
Inoltre, questa formula utilizza la distribuzione di frequenza completa - non solo il numero medio di stelle e il numero di voti. E ha senso che sia in quanto un articolo con dieci 5 stelle e dieci 1 stelle deve essere trattato come con maggiore incertezza (e quindi non valutato come) di un articolo con venti valutazioni a 3 stelle:
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 formula IMDb non tiene conto di questo.
Il modo giusto per farlo è quello di media, e per gli articoli che non sono ancora stati ordinati, hanno uno stato di "non classificato". Come hai provato? Come ha fallito? – David