Я с нетерпением жду применения байесовского подхода, чтобы определить приоритеты списка, который мог бы учитывать количество симпатий, антипатий и оценок.
Подход, приведенный здесь, опирается на байесовское среднее значение:
$bayesian_rating = ( ($avg_num_votes * $avg_rating) + ($this_num_votes * $this_rating) ) / ($avg_num_votes + $this_num_votes);
В моем случае нет $avg_rating
так как его не 5-звездная система, она никогда не будет существовать, количество симпатий, антипатий и отзывов всегда увеличивается, поэтому мне нужно позаботиться об истинном представлении списка.
Решение здесь было недостаточно, чтобы принять решение о подходе.
Что было бы лучшим решением в случае, если я хочу применить математический подход?
Редактировать добавлено: Ref. @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);
Вместо 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, вы можете нормализовать, разделив вес, добавленный корзинами и обзорами.