3

ベイジアン アプローチを適用して、好きなもの、嫌いなもの、レビュー数を考慮したリストに優先順位を付けることを楽しみにしています。

ここにリストされているアプローチは、ベイジアン平均に依存しています。

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

私の場合、$avg_rating5 つ星システムではないため存在しません。いいね、嫌い、レビューの数は常に増加するため、リストの真の表現に注意する必要があります。

ここでの解決策は、アプローチを決定するのに十分ではありませんでした。

数学的アプローチを適用したい場合の最善の解決策は何ですか?

編集が追加されました:参照。@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);   
4

1 に答える 1

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 の間の意味のあるスコアを確認したい場合は、バスケットとレビューによって追加された重みを除算して正規化できます。

于 2012-02-15T21:47:03.120 に答える