2012-02-15 3 views
3

Я с нетерпением жду применения байесовского подхода, чтобы определить приоритеты списка, который может учитывать количество понравившихся, нелюбленных и обзорных счетов.Примените байесовский средний показатель в 5-звездной рейтинговой системе

Подход, перечисленный в here основывается на байесовском среднем:

$bayesian_rating = (($avg_num_votes * $avg_rating) + ($this_num_votes * $this_rating))/($avg_num_votes + $this_num_votes);

В моем случае нет $avg_rating, так как его не в 5-звездной системе, она никогда не будет существовать, числа подобных , антипатии и обзоры всегда увеличиваются, поэтому мне нужно позаботиться об истинном представлении списка.

Решение в here было недостаточно для принятия решения о подходе.

Что было бы лучшим решением в случае, если я хочу применить математический подход?

Редактировать: Реф. @Ina, можно отразить 5-звездную систему, если я умножаю симпатии на 5, что делает ее с наивысшим значением в 5-звездной системе.

Возвращаясь к коду, после добавления некоторых дополнительных переменных, чтобы заботиться о (любит, не любит, количество отзывов, количество раз добавлено в корзину), я не уверен, что я могу заполнить $avg_rating и $this_rating с ?

Вот код до сих пор:

// these values extracted from the database 
    $total_all_likes = 10; //total likes of all the products 
    $total_all_dislikes = 5; //total dislikes of all the products 
    $total_all_reviews = 7; //total reviews of all the products 
    $total_all_addedToBasket = 2; //total of products that has been added to basket for all the users 
    $total_all_votes = ($total_all_likes *5) + $total_all_dislikes; //total of likes and dislikes 
    $total_all_weight = $total_all_votes + $total_all_reviews + $total_all_addedToBasket; //total interactions on all the products 
    $total_all_products = 200; //total products count 

    //Get the average 
    $avg_like = ($total_all_likes*5)/$total_all_votes; //Average of likes of all the votes 
    $avg_dislike = $total_all_dislikes/$total_all_votes; //Average of dislikes of all the votes 
    $avg_reviews = $total_all_reviews/$total_all_products; //Average of reviews of all the products 
    $avg_addedToBasket = $total_all_addedToBasket/$total_all_products; //Average of added to basket count of all the products 
    $avg_weight = $avg_like + $avg_dislike + $avg_reviews + $avg_addedToBasket; //Total average weight 

    //New product, it has not been liked, disliked, added to basket or reviewed 
    $this_like = 0 *5; 
    $this_dislike = 0; 
    $this_votes = $this_like + $this_dislike; 
    $this_review  = 0; 
    $this_addedToBasket = 0; 
    $this_weight = $this_votes + $this_review + $this_addedToBasket; 

    //$avg_rating 
    //$this_rating 

    $bayesian_rating = (($avg_weight * $avg_rating) + ($this_weight * $this_rating))/($avg_weight + $this_weight); 

ответ

1

Вместо 5-звездной системы, у вас есть двоичная система. Люди «любят» или «не любят». Поэтому рейтинги естественно число между 0 и 1 рассчитывается по формуле:

likes/(likes + dislikes) 

Вам не нужно умножить на 5, чтобы имитировать рейтинговую систему 5 *.

Ваш код становится:

$avg_rating = $total_all_likes/($total_all_likes + $total_all_dislikes) 
$this_rating = $this_like/($this_like + $this$total_num_positive_votes/$total_num_votes) // Check you're not dividing by 0 
$bayesian_rating = (($avg_num_votes * $avg_rating) + ($this_num_votes * $this_rating))/($avg_num_votes + $this_num_votes); 

Если вы хотите, чтобы принять во внимание количество «корзин» и «Отзывы» вы можете просто рассматривать их как более «вес»

$this_weight = $this_addedToBasket + $this_votes + $this_review; 
$avg_votes = $total_all_votes/$total_all_products; 
$avg_weight = $avg_addedToBasket + $avg_votews + $avg_reviews; 
$bayesian_rating = (($avg_weight * $avg_rating) + ($this_weight * $this_rating))/($avg_weight + $this_weight);  

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

+0

Вы имеете в виду '$ total_num_positive_votes = total likes/(total likes + total dislikes)'? А как насчет других критериев, таких как количество отзывов? Где это может вписать $ bayesian_rating? – ebil

+0

No: total_num_positive_votes - всего лишь общее количество понравившихся. total_num_votes всего нравится + не нравится Оценка Bayesian Rating не учитывает количество отзывов. Я не уверен, как это можно добавить, не могли бы вы описать свою проблему немного подробнее? Насколько я понимаю, сейчас у вас есть список продуктов, и каждый продукт имеет несколько голосов (положительный или отрицательный) и ряд обзоров (нейтральных). – Ina

+0

Благодарим вас за быстрый ответ. Фактически, этот список продуктов может быть добавлен в корзину, понравился, не понравился и рассмотрен.То, что я искал, - это алгоритм, который будет учитывать ** все ** эти подсчеты этих переменных и добавить их в '$ bayesia_rating', чтобы получить определенный _weight_, который поможет отсортировать список в« значащем » так как байесовский подход работает в системе с 5 путями. – ebil