簡體   English   中英

Reddit / Hacker News風格的流行時間衰減算法可以處理負面排名

[英]Reddit/Hacker News style popularity time decay algorithm that can deal with negative rankings

我有一個排名系統,用戶可以在其中增加/減少(+ 1 / -1)個對象,並且每個對象都有一個累積的rating_sum ,可以為負,零或正。 我還將在rating_count記錄對對象進行評級的總次數。 因此,我可以通過一點代數來獲得贊成票和反對票的數目。

我想實現一種計分算法,該算法既要考慮對象的評分,又要意味着較老的對象會受到懲罰,得分較低。

到目前為止,我發現了以下內容:

score=rating_sum/(age^gravity)

gravity是恆定的(我一直在用gravity=2 )。

除具有負值的等級外,此方法還行,在這種情況下,對象越舊,其得分越大(負值越小)。 這意味着,給定兩個具有相同否定評分的物體(例如-2),年齡較大的物體得分高於年齡較小的物體,並浮動得更高。

我是否可以使用一種評分算法,該算法也適用於負面評分?

(出於技術原因(我正在嘗試使用django ORM進行優化),我想要一個相當簡單的算法,可以將其放入SQL查詢語句中,因此最好只包含POW,LOG)

您可以使用指數衰減模型。

http://en.wikipedia.org/wiki/Exponential_decay

讓您的λ值取決於您當前的評分。 像(lambda =-等級/常數)之類的東西

如果lambda為負,則分數將降低至0;

如果lambda為正,則分數將朝負無窮大負增長;

但是,這意味着負分數只會更多地是負分數,而正分數永遠不會變成負分數。

這看起來很像Reddit使用的“熱門度”排名。 它對用戶等級加上年齡的LOG10進行排序(降序)。 該SQL是一個粗略的示例:

SELECT *
FROM ratings
ORDER BY 
    LOG10(ABS(rating_sum)) * SIGN(rating_sum)   
    + (UNIX_TIMESTAMP(created_at) / 300000) DESC
LIMIT 50

當心您的rating_sum = 0,因為取零的對數並不酷。

我在我的一個網站上寫了一篇文章對其進行了更詳細的描述,其中Reddit Hotness Algorithm in SQL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM