Применять байесовское среднее в 5-звездочной рейтинговой системе - PullRequest
3 голосов
/ 16 февраля 2012

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

Подход, указанный в здесь , основан насреднее значение по Байесу:

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

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

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

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

Редактировать добавлено: Реф. @ 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 Ответ

1 голос
/ 16 февраля 2012

Вместо 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, то вы можете нормализовать, разделив вес, добавленный корзинами и отзывами.

...