Evan Miller shows ein Bayes-Ansatz 5-Sterne-Bewertungen auf Rang:
wo
nk
die Anzahl der k
-Sterne Ratings ist,
sk
ist der "Wert" (in Punkten) von k
Sterne,
N
ist die Gesamtzahl der Stimmen
K
ist die maximale Anzahl von Sternen (z.B. K = 5, in einem 5-Sterne-Bewertungssystem)
z_alpha/2
ist das 1 - alpha/2
Quantil einer Normalverteilung. Wenn Sie eine Wahrscheinlichkeit von 95% (basierend auf der Bayesschen Posterior-Verteilung) haben möchten, dass das tatsächliche Sortierkriterium mindestens so groß wie das berechnete Sortierkriterium ist, wählen Sie z_alpha/2
= 1.65.
In Python, das Sortierkriterium kann mit
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))
Zum Beispiel berechnet werden, wenn ein Artikel 60 Fünf-Stern hat, 80 Vier-Stern, 75 Drei-Stern, 20 Zwei-Sterne und 25 Ein-Sterne, dann würde seine Gesamtsternbewertung ungefähr 3 sein.4:
x = (60, 80, 75, 20, 25)
starsort(x)
# 3.3686975120774694
und Sie können eine Liste mit 5-Sterne-Bewertungen mit
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)]
dieser Art zeigt die Wirkung, die mehr Bewertungen auf den Gesamt Stern Wert haben kann.
Sie finden, dass diese Formel eine Gesamtnote zu geben neigt, die ein bisschen niedriger als die durchschnittliche Bewertung von Websites wie Amazon, Ebay oder Wal-Mart besonders gemeldet ist, wenn es wenige Stimmen (sagen wir, weniger als 300). Dies spiegelt die höhere Unsicherheit wider, die mit weniger Stimmen einhergeht. Da die Anzahl der Stimmen (in die Tausende) insgesamt steigt, sollten diese Rating-Formeln zum (gewichteten) durchschnittlichen Rating neigen.
Da die Formel hängt nur von der Frequenzverteilung von 5-Sterne-Bewertungen für das Element selbst, ist es leicht zu Bewertungen aus mehreren Quellen kombinieren (oder Update die Gesamtbewertung in Licht der neuen Stimmen), indem einfach die Häufigkeit Verteilungen zusammen addiert werden.
Im Gegensatz zu der IMDb Formel Diese Formel hängt nicht von Durschnitt über alle Artikel, noch eine künstliche Mindestanzahl von Cutoff-Wert Stimmen.
Darüber hinaus nutzt diese Formel die volle Häufigkeitsverteilung - nicht nur die durchschnittliche Anzahl der Sterne und die Anzahl der Stimmen. Und es macht Sinn, dass es sollte seit einem Artikel mit zehn 5-Sterne und zehn 1-Sterne als mit mehr Unsicherheit als behandelt werden soll (und daher nicht so hoch wie bewertet) ein Artikel mit zwanzig 3-Sterne-Bewertungen:
In [78]: starsort((10,0,0,0,10))
Out[78]: 2.386028063783418
In [79]: starsort((0,0,20,0,0))
Out[79]: 2.795342687927806
Die IMDb-Formel berücksichtigt dies nicht.
Der richtige Weg, dies zu tun ist, mitteln, und für Gegenstände, die noch nicht gewählt worden ist, hat den Status „nicht gewählt“. Wie hast du es versucht? Wie ist es gescheitert? – David