`

衰减算法

阅读更多
—— 桂林 2011-05-02

人的口味每天在变,旧的评价不一定准确。比如一部老片,一直评分不高,有5000个3星评分。最近由于新闻或流行趋势的影响,评价改变了,新增了500个5星评分。但历史评价的数量多,新评价不足以对总评分有决定性的影响,所以需要一套算法来增加新评分的权重,以更准确的表达评价。

方案1:周期递推衰减

 sum_rate = Sum(pending_rate) + last_sum_rate * 0.8
 count_rate += count(pending_rate) + last_count_rate * 0.8
 rate = sum_rate / count_rate

 //once a period
 last_sum_rate = sum_rate
 last_rate = rate


方案2:实时衰减

根据方案1
// on rate
sum_rate = rate + sum_rate* ratio(last_update_time)
count_rate = 1 + count_rate * ratio(last_update_time)
rate = count_rate / sum_rate
last_update_time = now


ratio函数根据last_update_time的时间来计算衰减率。
如: last_update_time 是 1分钟前,返回 0.999
1天前 返回 0.95
1周前 返回 0.9
1月前 返回 0.85
1年前 返回 0.7

方案3: 汇总衰减

sum_rate = SUM(rate)(rate * ratio(last_update_time))
counte_rate = SUM(rate)(1 * ratio(last_update_time))


半衰期。类似于放射性物质的半衰期,半衰期是一个常量,我们可以设定半衰期为1年,则 ratio(now - 1year) = 0.5, ratio(now - 2year) = 0.25, ratio(now-3year) = 0.125

我们可以得出以下ratio函数

var half = 1year;
ratio = function(date)
  delta = now - date
  return 0.5 power (delta/half)
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics