9

人々がアイテムに賛成票または反対票を投じることができるシステムがあり、その結果を 5 つ星評価として表示したいと考えています。

ここここで説明されているベイジアン評価アルゴリズムを使用しようとしましたが、成功しませんでした。

例: データベースに 3 つのアイテム (A、B、C) があります。

A = 500 の賛成票と 500 の反対票 B = 0 の賛成票と 1000 の反対票 C = 0 の賛成票と 1000 の反対票

各アイテムのベイジアン平均評価を計算して、1 から 5 のスケールでスコアを付けるにはどうすればよいですか?

4

2 に答える 2

7

このブログ投稿、How Not To Sort By Average Ratingでは、状況を正確に説明し、Wilson Score の信頼区間を使用して解決する方法を説明しています。Redditはこれをうまく利用しました。

于 2010-07-01T14:57:21.420 に答える
3

単純な代数:

AvgVotes = すべての投票の合計 / すべてのアイテムの合計

AvgRating = すべてのアイテムの賛成票の合計 * 5 / すべての投票の合計

CurVotes = 現在のアイテムに対する投票数

CurRating = 現在のアイテムに対する賛成票の合計 * 5/現在のアイテムに対する投票数

TotalVotes = すべての投票の合計 + 現在のアイテムに対する投票の合計

((AvgVotes * AvgRating) + (CurVotes * CurRating)) * 5 / TotalVotes

したがって、A の重みを評価する数値を入力すると...

平均投票数 = 1000

AvgRating = 0 (この計算では、評価しているアイテムの数値を含めないでください)

現在の投票数 = 1000

現在のレート = 500 * 5 / 1000 = 2.5

総投票数 = 2000 + 1000 = 3000

((1000 * 0) + (1000 * 2.5)) * 5 / 3000 = 4.166

追加するのを忘れていました。上記の計算または合計には、投票のない項目を含めないでください。そうしないと、重みがなくなります。

編集 - 簡略化されたソリューション:

実行できる問題に対する単純化された解決策があることに注意してください。理解のために手書きの形式を示しただけです。圧縮されたアルゴリズムは次のようになります。

定義:

SET = 投票数が 0 より大きい、現在の評価ターゲットに関係のないもの。

TARGET = 現在評価しようとしている要素

25*(((SET の賛成票の合計)/(SET アイテムの合計)) + (TARGET の賛成票の合計)) / (TARGET の賛成票の合計 + SET の投票の合計)

明確化と証明のために、「A」を評価する数値を再度入力します。

(25*((0/2)+500)) / (1000+2000) = 4.166

于 2010-07-01T14:57:04.133 に答える