6

私のサイトでユーザーが作成した投稿の下に、Amazonのような評価システムがあります。

   Was this review helpful to you: Yes | No

投票がある場合は、その行の上に次のように結果を表示します。

   5 of 8 people found this reply helpful.

これらのランキングに基づいて投稿を並べ替えたいと思います。最も役に立ったものから最も役に立たなかったものへとランク付けした場合、次の投稿をどのように注文しますか?

   a) 1/1 = 100% helpful
   b) 2/2 = 100% helpful
   c) 999/1000 = 99.9% helpful
   b) 3/4 = 75% helpful
   e) 299/400 = 74.8% helpful

明らかに、役に立った割合だけで並べ替えるのは正しくありません。どういうわけか、総投票数を考慮に入れる必要があります。これを行う標準的な方法はありますか?

アップデート:

Charlesの式を使用して、Agresti-Coullの下限範囲を計算し、それを並べ替えると、上記の例では次のように並べ替えられます。

   1) 999/1000 (99.9%) = 95% likely to fall in 'helpfulness' range of 99.2% to 100%
   2) 299/400 (74.8%) = 95% likely to fall in 'helpfulness' range of 69.6% to 79.3%
   3) 3/4 (75%) = 95% likely to fall in 'helpfulness' range of 24.7% to 97.5%
   4) 2/2 (100%) = 95% likely to fall in 'helpfulness' range of 23.7% to 100%
   5) 1/1 (100%) = 95% likely to fall in 'helpfulness' range of 13.3% to 100%

直感的には、これは正しいと感じます。

更新2

アプリケーションの観点からは、投稿のリストを表示するたびにこれらの計算を実行したくありません。Agresti-Coullの下限を更新して、通常のcron主導のスケジュールで保存するか(前回の実行以降に投票を受け取った投稿のみを更新する)、新しい投票を受け取るたびに更新することを考えています。 。

4

4 に答える 4

5

投稿ごとに、それがどれだけ役立つと期待するかについての境界を生成します。私はAgresti-Coull間隔を使用することを好みます。擬似コード:

float AgrestiCoullLower(int n, int k) {
  //float conf = 0.05;  // 95% confidence interval
  float kappa = 2.24140273; // In general, kappa = ierfc(conf/2)*sqrt(2)
  float kest=k+kappa^2/2;
  float nest=n+kappa^2;
  float pest=kest/nest;
  float radius=kappa*sqrt(pest*(1-pest)/nest);
  return max(0,pest-radius); // Lower bound
  // Upper bound is min(1,pest+radius)
}

次に、見積もりの​​下限を取り、これで並べ替えます。したがって、2/2は(Agresti-Coullによる)95%が「有用性」の範囲23.7%から100%に入る可能性が高いため、99.2%から100%の範囲の999/1000より下にソートされます(.237 < .992)。

編集:一部の人々はこれが役に立ったと思っているようです(笑)ので、あなたがどれだけ自信を持って/リスクを回避したいかに基づいてアルゴリズムを微調整できることに注意してください。必要な自信が少ないほど、テストされていないが高得点のレビューの「証明済み」(高投票)レビューを放棄する意欲が高まります。90%の信頼区間はカッパ= 1.95996398を与え、85%の信頼区間は1.78046434を与え、75%の信頼区間は1.53412054を与え、風に注意を向ける50%の信頼区間は1.15034938を与えます。

50%の信頼区間は

1) 999/1000 (99.7%) = 50% likely to fall in 'helpfulness' range of 99.7% to 100%
2) 299/400 (72.2%) = 50% likely to fall in 'helpfulness' range of 72.2% to 77.2%
3) 2/2 (54.9%) = 50% likely to fall in 'helpfulness' range of 54.9% to 100%
4) 3/4 (45.7%) = 50% likely to fall in 'helpfulness' range of 45.7% to 91.9%
5) 1/1 (37.5%) = 50% likely to fall in 'helpfulness' range of 37.5% to 100%

これは全体的にそれほど違いはありませんが、3/4の安全性よりも2/2を優先します。

于 2010-09-20T15:28:47.230 に答える
4

この質問はおそらくhttp://stats.stackexchange.comで尋ねた方がよいでしょう。

あなたはまだ「有用性」を増やして注文したいと思います。

与えられた数がどれほど正確であるかを知りたい場合、最も簡単な方法は、応答の総数と「役に立った」応答の割合に等しい二項分布の分散の平方根を使用することです。np

于 2010-09-20T06:39:52.483 に答える
1

非常に簡単な解決策は、投票数がカットオフ未満のすべてを無視してから、パーセンテージで並べ替えることです。

例(少なくとも5票が必要)

   1.  99.9% (1000 votes)
   2.  74.8%  (400 votes)
   3-5.  waiting for five votes
于 2010-09-20T06:42:43.250 に答える
1

それは、正のフィードバックの期待される割合と平均して投票する人々の数に依存します。あなたが与える例のように、時には5人と10人が投票し、他の場合は1000人が投票する場合は、ウィルソンの中点をお勧めします。

(x+z^2/2)/(n+z^2)    The midpoint of the Adjusted Wald Interval / Wilson Score

where:
n = Sum(all_votes),  
x = Sum(positive_votes) / n, 
z = 1.96 (fixed value)
于 2011-02-12T09:35:02.127 に答える