एल्गोरिथ्म का उपयोग 5 स्टार रेटिंग की गणना के लिए किया जाता है


79

मुझे अमेज़न वेबसाइट पर 5-स्टार रेटिंग की गणना करने की आवश्यकता है। मैंने यह खोजने के लिए पर्याप्त खोज की है कि सबसे अच्छा एल्गोरिथ्म क्या है, लेकिन मैं उचित उत्तर नहीं दे पा रहा हूं। उदाहरण के लिए, यदि ये रेटिंग हैं

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

पूरी तरह से 478 समीक्षाएँ

अमेज़ॅन ने इसकी गणना "5 सितारों में से 4.1" की है। क्या कोई मुझे बता सकता है कि यह आंकड़ा कैसे आया है? मैं औसतन यह कर पाने में सक्षम नहीं हूं।


3
embed.plnkr.co/5STGsgya9mq7HLrbJtrT औसत स्टार गणना दिखाने के लिए एक वर्बोस प्रोग्राम।
संजू

जवाबों:


174

यह एक भारित औसत है, जहां आप प्रत्येक रेटिंग को उसके द्वारा प्राप्त किए गए वोटों की संख्या से तौलते हैं:

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

11
यह "नियमित" औसत से कैसे अलग है?
जेफ

@ जेफ़, वज़न एक से भिन्न होते हैं, जिसे अधिकांश लोग "औसत" कहते हैं।
ब्लाइंडी

2
यह नियमित औसत के समान है
डैनियल

1
हाँ इसकी नियमित औसत के समान है। हम कुल उपयोगकर्ताओं द्वारा विभाजित हैं (कुल सितारों को जोड़ते हैं)। यह अंश में गुणन के भारित coz जैसा दिखता है। लेकिन अगर हम इसे पुनःप्रकाशित करते हैं, तो हम अनिवार्य रूप से सभी 5s, सभी 4S आदि को जोड़ देंगे क्योंकि 5s 252 बार हैं, यह 5 * 252 और इतने पर समाप्त होता है।
theprogrammer

21

यदि आप शुरू से ही समग्र रेटिंग की गणना शुरू कर रहे हैं तो यह सूत्र आपकी मदद करेगा।

सूत्र

((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

15

इस विषय पर evanmiller.org पर एक बहुत बढ़िया लेखन है। वह कुछ दृष्टिकोणों के पेशेवरों और विपक्षों के माध्यम से जाता है और चर्चा करता है और वोटों की गणना और गणना का गणितीय विश्वसनीय तरीका बताता है।

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


6
इससे भी बेहतर, वह अब स्टार रेटिंग पर एक और लेख लिखा है: evanmiller.org/ranking-items-with-star-ratings.html
sj26

1
अत्यधिक अनुशंसित, क्योंकि भारित औसत वस्तुओं की छंटाई की तुलना करते समय बुरी तरह से गलत हो सकता है।
रायल

8

ऐसा करने का एक बेहतर तरीका,

rating = (sum_of_rating * 5)/sum_of_max_rating_of_user_count  

उदाहरण:

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

rating = (25 * 5) / 30

किया हुआ!


स्टैंड के लिए 5इस्तेमाल में क्या आता है sum_of_max_rating_of_user_count? क्या यह किसी भी उपयोगकर्ता द्वारा दी गई उच्चतम रेटिंग है?
andho

कृपया समझाएं .... sum_of_max_rating_of_user_count: 6 x 5 = 30 ???
दिविकसनायक

6 कुल उपयोगकर्ता हैं जिन्होंने रेट किया है .. 5 सितारों की अधिकतम संख्या है (जैसे आमतौर पर हम 5 स्टार रेटिंग का उपयोग करते हैं)
असद

8

Blindy द्वारा सुपर उपयोगी उत्तर, यहाँ पर आधारित PHP कोड है। कुछ उपयोगी मिल सकता है। परिणाम ओपी के उदाहरण के अनुसार 4.11 होंगे:

$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;
}

उपरोक्त $ रेटिंग सरणी का निर्माण कैसे करें

उदाहरण छद्म कोड, लेकिन जो काम करना चाहिए जो यह बताता है कि $ रेटिंग सरणी का निर्माण कैसे किया जाता है जब जानकारी डीबी में संग्रहीत होती है यह मानते हुए कि आपके पास "रेटिंग" नामक एक तालिका है और "रेटिंग" नामक एक कॉलम है। इस मामले में यह 1 जॉइन है, आपको सभी रेटिंग प्राप्त करने के लिए 4 जॉइन करने की आवश्यकता होगी, लेकिन यह आपको शुरू करना चाहिए:

SELECT count(c1.rating) as one_star, count(c2.rating) as two_star  
FROM ratings c1 
LEFT OUTER JOIN
ratings c2
ON
c1.id = c2.id
WHERE
c1.rating = 1
AND
c2.rating = 2

टिप्पणियों में सुझाया गया एक और तरीका

SELECT SUM(rating = 1) AS one_s ,SUM(rating = 2) AS two_s ,SUM(rating = 3) as three_s FROM reviews where product_id = 9

आपने रेटिंग ऐरे बना ली है, मैं इस एरे को mysql का उपयोग कैसे करूँ। मेरा डेटा डेटाबेस में सेव है
अली रज़ा

1
@ अलीराज ने मुझे जवाब अपडेट किया है, आपको 5 अलग-अलग प्रश्नों के साथ कई जॉइन करने या डेटा खींचने की आवश्यकता होगी
रॉबर्ट सिनक्लेयर

1
मैं कहूंगा कि आप वह व्यक्ति थे जिसने वास्तव में मुझे यह विचार दिया था और मैं सिर्फ इस पर काम करता हूं, यह क्वेरी मेरे लिए काम करती हैSELECT SUM(rating = 1) AS one_s ,SUM(rating = 2) AS two_s ,SUM(rating = 3) as three_s FROM reviews where product_id = 9
अली रज़ा


4

यह रेटिंग प्रणाली एक भारित औसत या भारित माध्य पर आधारित है । यही है, उन्होंने एक दशमलव मान की गणना करने के लिए तारों के संदर्भ में वजन का उपयोग किया जो कि 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

2

भारित औसत, इसके वजन के बराबर सितारों की संख्या, और फिर समीक्षाओं की कुल संख्या से विभाजित करते हैं।


2

आप इस एल्गोरिथ्म को देखना चाहते हैं: PHP और MySQL का उपयोग करके सही तरीके से औसत रेटिंग की गणना करना - प्रत्येक "स्टार" (उर्फ रेटिंग ग्रेड) और उसके संबंधित वोटों की बचत करने की कोई आवश्यकता नहीं है और फिर हजारों पंक्तियों को पुनः प्राप्त करना होगा। डेटाबेस हर बार आपको उनके औसत की गणना करने की आवश्यकता होती है। (जब तक कि आप यह प्रदर्शित नहीं करना चाहते कि कितने लोगों ने दिए गए आइटम को 1, 2, 3, 4 और 5 सितारों के साथ रेट किया है)


1

आपके प्रश्न के अनुसार आपका समाधान इस तरह होगा।

योग (दर * TotalRatingOfThatRate) / TotalNumberOfReviews

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

आउटपुट 4.1 होगा


1

जावास्क्रिप्ट में

function 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

(स्टार के कुल नम्बर / समीक्षा करने वाले व्यक्तियों की कुल संख्या * 5) * 5

= उत्तर

जेएस 1 में फिक्स्ड दशमलव।

answer.toFixed (1);

उदाहरण के लिए 5 व्यक्ति की कुल समीक्षा 20 सितारा है।

(20/5 * 5) * 5 = 4.0


0

इसके अलावा, मैं केवल सभी के लिए व्यावहारिक और पूर्ण कोड बनाने की कोशिश कर रहा हूं।

माई जसन ऑब्जेक्ट अर्रे

var yourRatingData =[{
        review_id:1,
        customer_id:5,
        customer_name:"Faysal",
        rating:5,
        review_content:"I like this product it's cool and best in quality"
    },
    {
        review_id:2,
        customer_id:6,
        customer_name:"Adams",
        rating:4,
        review_content:"It's quality product though price a bit high"
    },
    {
        review_id:3,
        customer_id:8,
        customer_name:"Jane",
        rating:3,
        review_content:"I like but should improve quality"
    },
    {
        review_id:4,
        customer_id:9,
        customer_name:"Julia",
        rating:1,
        review_content:"It's not good"
    }];

रेटिंग गणना

let _5star = yourRatingData.filter(r=>r.rating==5).length;
let _4star = yourRatingData.filter(r=>r.rating==4).length;
let _3star = yourRatingData.filter(r=>r.rating==3).length;
let _2star = yourRatingData.filter(r=>r.rating==2).length;
let _1star = yourRatingData.filter(r=>r.rating==1).length;

//Sum of individual star.
let sumOfRating = parseInt( _5star + _4star + _3star + _2star + _1star );

//Total number of rating
let overallRating = parseInt( 5*_5star + 4*_4star + 3*_3star + 2*_2star +1*_1star );

//Average of all rating
let averageRating = parseFloat(overallRating/sumOfRating);

//Percentage of each star rating
let _5starPercentage = parseInt((_5star/totalRating)*100);
let _4starPercentage = parseInt((_4star/totalRating)*100);
let _3starPercentage = parseInt((_3star/totalRating)*100);
let _2starPercentage = parseInt((_2star/totalRating)*100);
let _1starPercentage = parseInt((_1star/totalRating)*100);

मुझे लगता है कि यह मददगार है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.