2012-02-15 23 views
3

ベイジアンのアプローチを適用して、好き嫌いやレビュー数を考慮に入れたリストの優先順位付けを楽しみにしています。NON5星評価システムでベイジアン平均を適用する

hereに記載されているアプローチは、ベイズ平均に依存している:私の場合は

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

、そのない5つ星のシステムから何$avg_ratingが存在しない、それは、同類の数存在することはありません、嫌いやレビューは常に増えますので、私はそのリストの真の表現に注意する必要があります。

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

私は数学的アプローチを適用したい場合に、最良の解決策は何でしょうか?

編集が追加されました。 Ref。 @Inaの場合、5スターシステムを反映させることができます.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つ星のシステムの、あなたはバイナリシステムを持っています。人々は「好き」または「嫌い」のいずれかです。あなたは5 *の評価システムを模倣するために5を掛ける必要はありません

likes/(likes + dislikes) 

:評価は、したがって、当然で計算0と1の間の数です。

あなたのコードその後、次のようになります。

$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 =総数/(総数+総数が嫌い)」を意味しますか?レビュー数などの他の基準はどうですか?それはどこで$ bayesian_ratingに収まるのでしょうか? – ebil

+0

いいえ: total_num_positive_votesは単純に総数です。 total_num_votesは合計嫌い+総嫌いです ベイジアン評価は評価数を考慮に入れていません。 どのように追加することができないのか分かりませんが、問題を少し詳しく説明できますか?私が今理解しているように、あなたには製品のリストがあり、各製品には多数の賛成(否定)と多数のレビュー(中立)があります。 – Ina

+0

ご返信ありがとうございます。実際、この商品リストは、バスケットに追加したり、好き嫌いをかけたり、批評したり、レビューしたりすることができます。私が探していたのは、これらすべての変数を考慮して、 '$ bayesia_rating'に追加して、ある意味の_weight_を取得するアルゴリズムです。これは、リストを '意味のある'ベイジアンアプローチが5スタートシステムで行うように – ebil