алгоритм, используемый для расчета 5 звезд
Мне нужно рассчитать 5-звездочные рейтинги, такие как на веб-сайте Amazon. Я сделал достаточно поиска, чтобы найти лучший алгоритм, но я не могу получить правильный ответ. Например, если это рейтинги
5 звезд - 252 4 звезды - 124 3 звезды - 40 2 звезды - 29 1 звезда - 33 совершенно 478 комментариев Amazon рассчитала, что это будет "4.1 из 5 звезд". Кто-нибудь может мне сказать, откуда взялась эта цифра? Я не могу получить это, просто делая среднее.
8 ответов
это средневзвешенное значение, где вы взвешиваете каждый рейтинг с количеством голосов, которые он получил:
(5*252 + 4*124 + 3*40 + 2*29 + 1*33) / (252+124+40+29+33) = 4.11 and change
есть действительно отличная запись по этой теме на evanmiller.org - ... Он проходит через и обсуждает плюсы и минусы нескольких подходов и предлагает математически надежный способ взвешивания и расчета голосов.
Если вы начинаете расчет общей оценки с самого начала, то эта формула поможет вам.
Формула
((Overall Rating * Total Rating) + new Rating) / (Total Rating + 1)
пример
предположим, у вас нет рейтингов до сих пор, тогда формула похожа, общая оценка "0" до сих пор. общая оценка "0" и дан рейтинг "4"
((0*0)+4)/1 = 4
Если общая оценка "4.11" Общая оценка " 478 " и новый рейтинг предоставление одним пользователем "2"
тогда формула как
((4.11 * 478)+ 2)/479 // 479 is increment of new rating from 478
эта рейтинговая система основана на средневзвешенная или средневзвешенное значение. То есть они использовали вес в терминах звезд для вычисления десятичного значения, которое округляется до 4.1. Например:
Sum of (weight * number of reviews at that weight) / total number of reviews
(5*252 + 4*124 + 3*40 + 2*29 + 1*33) / 478 = 4.1
супер полезный ответ Blindy, вот PHP-код, основанный на нем. Некоторые могут оказаться полезными. Результаты будут 4.11 в соответствии с примером OP:
$ratings = array(
5 => 252,
4 => 124,
3 => 40,
2 => 29,
1 => 33
);
function calcAverageRating($ratings) {
$totalWeight = 0;
$totalReviews = 0;
foreach ($ratings as $weight => $numberofReviews) {
$WeightMultipliedByNumber = $weight * $numberofReviews;
$totalWeight += $WeightMultipliedByNumber;
$totalReviews += $numberofReviews;
}
//divide the total weight by total number of reviews
$averageRating = $totalWeight / $totalReviews;
return $averageRating;
}
вы можете проверить этот алгоритм: вычисление среднего рейтинга правильным способом с использованием PHP и MySQL - нет необходимости сохранять каждую "звезду" (ака рейтинг) и соответствующее количество голосов, а затем извлекать тысячи строк из базы данных каждый раз, когда вам нужно рассчитать их среднее значение. (если вы не хотите, чтобы показать, сколько именно людей оценили данный пункт с 1, 2, 3, 4 & 5 звезд)
взвешенное среднее, суммируйте количество звезд, умноженное на его вес, а затем разделите его на общее количество обзоров.