2012-04-22 14 views
6

私は単純なアップ/ダウン投票システムをウェブサイト上に実装しました。私は個々の投票、投票時間、一意のユーザーID(ハッシュされたIP)を追跡します。投票 - 投票数と投票パーセントか?

私の質問は、投票の割合または合計を計算する方法ではありませんが、さらに、投票に基づいて良いスコアを決定するための良いアルゴリズムは何ですか?

純粋な投票率で並べ替えることは容認できないと判断し、単純にアップノートを集計します。

この例を考える:

  • 画像A:4 upvotes、1つのdownvotes
  • 画像B:5 upvotes、4つのdownvotes
  • 画像C:1 upvote、0 downvotes

理想的なシステムは、最初にA、次にBとCを続けます。

純粋なパーセンテージのシナリオでは、 純粋な投票数のシナリオでは、順序はB> A> Cです(間違っています)

私はシステムの信頼に基づいて多少「ハイブリッド」なアルゴリズムを考えていますスコアには、多分の線に沿って何か:

// (if totalvotes > 0, else score = 0) 
score = 1 - ((downvotes+1/totalvotes+1) * sqrt(1/totalvotes)) 

しかし、私は本当に明確に定義されたアルゴリズムは、そこに私は単に知らないことを既に存在している場合、私の前に、コミュニティを依頼することを期待していました私のアルゴリズムを今から日没まで微調整して座る。

私も投票ごとに日付のデータを持っていますが、サイトの内容はあまり時間に敏感ではありませんので、「何が熱い」で並べ替えるのは本当に気にしません。

+2

[可能な重複](http://stackoverflow.com/questions/9169143/finding-most-liked-item-of-a-user-with-rating-values)?少なくとも答えは関連しています。 – Anthales

+0

華麗な質問、私は言う必要があります:) –

答えて

0

だけ確認...私はあなたの質問に答えていないけど、私はただ、いくつかの式を見つけようと楽しみのために3分を費やし、それは列がupvotesです:)とBはdownvotes :)

=(LN((A1+1)/(A1+B1+1))+1)*LN(A1) 

5 3  0.956866995 
4 1  1.133543015 
5 4  0.787295787 
1 0  0 
6 4  0.981910844 
2 8  -0.207447157 
6 5  0.826007385 
3 3  0.483811507 
4 0  1.386294361 
5 0  1.609437912 
6 1  1.552503332 
5 2  1.146431478 
100 100  -3.020151034 
10 10  0.813671022 
です
2

投票の平均で並べ替えるのはあまり良くありません。

この記事で説明したような少数の観察の不確実性と肯定的な評価のバランスをとる代わりに、あなたはあなたのスコアをはるかに良く表しています。

以下の記事では、多くの一般的なウェブサイトと同じ過ちをしない方法について説明します。このことができます(アマゾン、urbandictionaryなど)

http://evanmiller.org/how-not-to-sort-by-average-rating.html

願っています!

+1

素晴らしいリンクは素晴らしいです!あなたのために誇り! –