2013-10-07 15 views
10

ポピュラーでウェブサイトの結果をソートするアルゴリズムを探しています。Redditのように古いポストほど投票力が低い/スコアがあります。ここでポピュラーなウェブサイトのポピュラー崩壊アルゴリズム

はのredditで使用されるような一般的に受け入れられているソリューションです。

t = (time of entry post) - (Dec 8, 2005) 
x = upvotes - downvotes 

y = {1 if x > 0, 0 if x = 0, -1 if x < 0) 
z = {1 if x < 1, otherwise x} 

rank = log(z) + (y * t)/45000 

私はRedditにのアルゴリズムの上になって、それが1つの状況にフィットしますが、私が本当に必要なことは2つのアルゴリズム、人気の記事のためのものですしましたそして今後の記事のための別:

  • 人気の投稿
  • 今後の記事

人気が次第に低下し、若干古い投稿に多くの重みを与えます。今後の投稿は今日のポピュラーな記事にもっと集中し、N時間/日後には急落します。

私はhugly複雑なアルゴを書くことができないと私は、次の機能へのアクセス権を持っているので、私はスフィンクスの表現を使用して、これを書いている:

http://sphinxsearch.com/docs/current.html#numeric-functions

だから私はポストごとに以下のデータを持っています:秒で

  • ポスト年齢
  • 投稿
スコアこのソリューションは、その理想的ではないと動作しない

Exponent = 0.01 (Popular), 0.5 (Upcoming) 
SecondsSincePublised = abs(CurTimeInSecondsSinceDate-PubTimeInSecondsSinceDate) 
Rank = (log10(PostScore)*10000)/pow(SecondsSincePublised,Exponent) 

が:

はここに私の現在のソリューションです。ここ数時間の新しくポピュラーな投稿は、人気があり、今後も人気が高く、実際には私が望むものではありません。

私は指数コンポーネントを変更して減衰を調整することができる別のアルゴリズムをお勧めしますか?

答えて

11

は、あなたがハッカーのニュースで使用されるアルゴリズムをランク付けしようとしたことがありますか? これは実装が簡単です。

Score = (P-1)/(T+2)^G 

where, 
P = points of an item (and -1 is to negate submitters vote) 
T = time since submission (in hours) 
G = Gravity, defaults to 1.8 in news.arc 

崩壊を調整するために重力を変えることができます。詳細については

が、これは面白そうHow Hacker News ranking algorithm works

+0

を参照してください、私はそれをローカルに実装し、私が得る結果の種類を見るつもりです。 – antfx

4

"一般的な"と "今後の"に異なる減衰関数を使用してみましたか?例えば、 "近づく"のための指数関数的減衰率と "人気"のための多項式減衰率を使用して、このようにして、数時間後(正しく最適化されていれば)、ポストが近づいて高くなる確率は非常に低い。多項式減衰関数では隣接する時間の関係は小さくなりますが、これは指数減衰関数の場合には当てはまりません。

ここでは例を示します(パラメータ0.01と1.0005は任意で、目的に応じて最適化する必要があります)。

人気:

SecondsSincePublised = abs(CurTimeInSecondsSinceDate-PubTimeInSecondsSinceDate) 
Rank = (log10(PostScore)*10000)/pow(SecondsSincePublised,0.01) 

今後:

SecondsSincePublised = abs(CurTimeInSecondsSinceDate-PubTimeInSecondsSinceDate) 
Rank = (log10(PostScore)*10000)/pow(1.0005,SecondsSincePublised) 
関連する問題