it-swarm.com.de

algorithmus zur Berechnung von 5-Sterne-Bewertungen

Ich muss 5-Sterne-Bewertungen wie auf der Amazon-Website berechnen. Ich habe genug gesucht, um den besten Algorithmus zu finden, aber ich bekomme keine richtige Antwort. Wenn dies beispielsweise die Bewertungen sind

5 star - 252
4 star - 124
3 star - 40
2 star - 29
1 star - 33

insgesamt 478 Bewertungen 

Amazon hat dies als "4,1 von 5 Sternen" berechnet. Kann mir jemand sagen, wie diese Figur angekommen ist? Ich bin nicht in der Lage, dies zu erreichen, wenn ich nur einen Durchschnitt mache.

51
user1241438

Das ist ein gewichteter Durchschnitt, bei dem Sie jede Bewertung mit der Anzahl der Stimmen wiegen, die sie erhalten hat:

(5*252 + 4*124 + 3*40 + 2*29 + 1*33) / (252+124+40+29+33) = 4.11 and change
116
Blindy

Wenn Sie von Anfang an mit der Berechnung der Gesamtbewertung beginnen, hilft Ihnen diese Formel.

Formel

((Overall Rating * Total Rating) + new Rating) / (Total Rating + 1)

Beispiel

angenommen, Sie haben noch keine Bewertungen, dann lautet die Formel wie folgt: Die Gesamtbewertung ist "0".

((0*0)+4)/1 = 4

Wenn die Gesamtbewertung "4,11" ist, ist die Gesamtbewertung "478". Und die neue Bewertung Geben von einem Benutzer ist "2"

dann ist die Formel wie

((4.11 * 478)+ 2)/479 // 479 is increment of new rating from 478
10
SSKhan

Auf evanmiller.org gibt es eine großartige Zusammenfassung zu diesem Thema. Er geht durch und diskutiert die Vor- und Nachteile einiger Ansätze und schlägt eine mathematisch verlässliche Art der Stimmengewichtung vor.

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

9
Jeff

Ja, Sie können sie ausrechnen:

(5 · 252 + 4 · 124 + 3 · 40 + 2 · 29 + 1 · 33)/478 = 4,11

8

Dieses Bewertungssystem basiert auf einem gewichteten Durchschnitt oder Gewichteten Mittelwert. Das heißt, sie haben das Gewicht in Sternen verwendet, um einen Dezimalwert zu berechnen, der auf 4.1 rundet. Zum Beispiel:

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
4
simchona

Super hilfreiche Antwort von Blindy, hier ist der PHP Code, der darauf basiert. Einige können nützlich sein. Die Ergebnisse werden laut OP-Beispiel 4,11 sein:

$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;
}
4
Robert Sinclair

Sie können diesen Algorithmus auschecken: Berechnung der Durchschnittsbewertung mit PHP und MySQL - Es ist nicht erforderlich, jeden "Stern" (auch "Bewertungsgrad") und die entsprechende Anzahl von Stimmen zu speichern Sie müssen jedes Mal Tausende von Zeilen aus der Datenbank abrufen, wenn Sie ihren Durchschnitt berechnen müssen. (es sei denn, Sie möchten genau anzeigen, wie viele Personen einen Artikel mit 1, 2, 3, 4 und 5 Sternen bewertet haben.)

2
Marin

Gewichteter Durchschnitt, addieren Sie die Anzahl der Sterne multipliziert mit ihrem Gewicht und teilen Sie sie dann durch die Gesamtzahl der Bewertungen. 

1
Nico

eine bessere Möglichkeit, dies zu tun,

rating = (sum_of_rating * 5)/sum_of_max_rating_of_user_count  

Beispiel:

total users rated: 6  
sum_of_max_rating_of_user_count: 6 x 5 = 30  
sum_of_rating: 25

rating = (25 * 5) / 30

Erledigt!

0
Asad

in Javascript

calcAverageRating(ratings) {

  let totalWeight = 0;
  let totalReviews = 0;

  ratings.forEach((rating) => {

    const weightMultipliedByNumber = rating.weight * rating.count;
    totalWeight += weightMultipliedByNumber;
    totalReviews += rating.count;
  });

  const averageRating = totalWeight / totalReviews;

  return averageRating.toFixed(2);
}


const ratings = [
  {
    weight: 5,
    count: 252
  },
  {
    weight: 4,
    count: 124
  },
  {
    weight: 3,
    count: 40
  },
  {
    weight: 2,
    count: 29
  },
  {
    weight: 1,
    count: 33
  }
];

console.log(calcAverageRating(ratings));
0
Flavio Marques