Evan Miller shows Bayesa podejście do rankingu ocen 5-STAR: 
gdzie
nk
jest liczba k
ocen -STAR,
sk
jest "wart" (w punktach) z k
gwiazd,
N
to łączna liczba głosów
K
to maksymalna liczba gwiazdek (np. K = 5, w systemie 5 gwiazdek)
z_alpha/2
jest kwantylem 1 - alpha/2
o rozkładzie normalnym. Jeśli chcesz uzyskać 95% pewności (w oparciu o Bayesian posterior distribution), że faktyczne kryterium sortowania jest co najmniej tak duże jak kryterium sortowania, wybierz z_alpha/2
= 1,65.
W Pythonie kryterium sortowania można obliczyć
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))
Na przykład, jeśli element ma 60 pięć-gwiazdy 80 czterema gwiazdy 75 trzy gwiazdy 20 dwie gwiazdki i 25 jednogwiazdkowych, wtedy jego ogólna ocena będzie wynosić około 3.4:
x = (60, 80, 75, 20, 25)
starsort(x)
# 3.3686975120774694
i można sortować listę ocenie 5-gwiazdkowego
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)]
To pokazuje wpływ, jaki może mieć więcej ocen od ogólnej wartości gwiazdy.
Przekonasz się, że formuła ta ma tendencję, aby dać ogólną ocenę, która jest nieco niższa niż ocena zgłoszonych przez strony, takich jak Amazon, Ebay czy Wal-Mart szczególnie gdy istnieje kilka głosów (powiedzmy mniej niż 300). Odzwierciedla to większą niepewność, która wiąże się z mniejszą liczbą głosów. Wraz ze wzrostem liczby głosów (w tysiącach), wszystkie te formuły oceny powinny mieć tendencję do średniego ratingu (ważonej).
Ponieważ formuła zależy tylko od rozkładu częstotliwości oceny 5-gwiazdkowe dla samej pozycji, to jest łatwe do połączyć opinie z wielu źródeł (lub, aktualizacji ogólna ocena w świetle nowych głosów), po prostu dodając razem rozkłady częstotliwości .
przeciwieństwie do wzoru IMDb, formuła ta nie zależy od średniej oceny wszystkich elementów, ani sztucznym minimalnej liczby głosów wartości odcięcia.
Co więcej, ta formuła wykorzystuje pełny rozkład częstotliwości - nie tylko średnią liczbę gwiazdek i liczbę głosów. Ma to sens, ponieważ powinien on być traktowany jako element o dziesięciu 5 gwiazdach i dziesięciu gwiazdkach jako mający więcej niepewności niż (i dlatego nie ma tak wysokiej oceny jak) pozycji z dwudziestoma 3-gwiazdkowymi ocenami:
In [78]: starsort((10,0,0,0,10))
Out[78]: 2.386028063783418
In [79]: starsort((0,0,20,0,0))
Out[79]: 2.795342687927806
Formuła IMDb nie bierze tego pod uwagę.
Prawo sposobem na to jest średnie, a dla pozycji, które nie zostały jeszcze w rankingu, mają status „nie miejsce”. Jak próbowałeś? Jak to się nie udało? – David