алгоритм, используемый для расчета 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 - ... Он проходит через и обсуждает плюсы и минусы нескольких подходов и предлагает математически надежный способ взвешивания и расчета голосов.

http://evanmiller.org/ranking-items-with-star-ratings.html


Да, вы можете усреднить их:

(5 * 252 + 4 * 124 + 3 * 40 + 2 * 29 + 1 * 33) / 478 = 4.11


Если вы начинаете расчет общей оценки с самого начала, то эта формула поможет вам.

Формула

((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 звезд)


взвешенное среднее, суммируйте количество звезд, умноженное на его вес, а затем разделите его на общее количество обзоров.