Evan Miller shows байесовский подход к ранжированию 5-звездочный рейтинг:
где
nk
это число k
-Star оценок,
sk
является "стоит" (в пунктах) k
stars,
N
- общее количество голосов
K
- максимальное количество звезд (например, K = 5, в системе с 5 звездами)
z_alpha/2
- 1 - alpha/2
квантиль нормального распределения. Если вы хотите, чтобы 95% -ная уверенность (на основе байесовского заднего распределения), что фактический критерий сортировки по крайней мере такой же, как и вычисленный критерий сортировки, выберите z_alpha/2
= 1,65.
В Python, критерий сортировки может быть вычислена с
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))
Например, если элемент имеет 60 пять-звезд, 80 четыре-звезды, 75 три звезды, 20 две звезды и 25 однозвездочных, то его общий рейтинг звезд составит около 3.4:
x = (60, 80, 75, 20, 25)
starsort(x)
# 3.3686975120774694
и вы можете сортировать список 5-звездочный рейтинг с
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)]
Это показывает эффект, который больше оценок может иметь от общей стоимости звезды.
Вы обнаружите, что эта формула имеет тенденцию давать общую оценку, которая немного ниже, чем общий рейтинг сообщил на таких сайтах, как Amazon, Ebay или Wal-Mart особенно, когда есть несколько голосов (скажем, менее 300). Это отражает более высокую неопределенность , которая приходит с меньшим количеством голосов. По мере увеличения количества голосов (в тысячах) все эти рейтинговые формулы должны иметь тенденцию к среднему рейтингу (взвешенный).
Поскольку формула зависит только от распределения частот 5-звездочный рейтингов для самого элемента, легко объединить отзывов из нескольких источников (или, обновления общей оценки в свете новых голосов), просто добавив частоту дистрибутивов вместе.
В отличии от формулы IMDb, эта формула не зависит от среднего балла по всем пунктам, ни искусственного минимального количества голосов значения отсечки.
Кроме того, эта формула использует полное распределение частот - не только среднее количество звезд и количество голосов. И имеет смысл, что должен, так как элемент с десятью 5-звездочными и десятью 1-звездами должен рассматриваться как , имеющий большую неопределенность, чем (и, следовательно, не оцененный так же высоко), как элемент с двадцать 3-звездочных оценок:
In [78]: starsort((10,0,0,0,10))
Out[78]: 2.386028063783418
In [79]: starsort((0,0,20,0,0))
Out[79]: 2.795342687927806
Формула IMDb не учитывает это.
Правильный способ сделать это в среднем, а для элементов, которые еще не были причислены, имеют статус «не попал». Как вы пытались? Как это случилось? – David