关于热度算法
**热度算法基本原理
**
需要了解的是,热度算法也是需要不断优化去完善的,基本原理:
新闻热度分 = 初始热度分 + 用户交互产生的热度分 – 随时间衰减的热度分
Score = S0 + S(Users) – S(Time)
新闻入库后,系统为之赋予一个初始热度值,该新闻就进入了推荐列表进行排序;随着新闻不断被用户点击阅读,收藏,分享等,这些用户行为被视作帮助新闻提升热度,系统需要为每一种新闻赋予热度值;同时,新闻是有较强时效性的内容,因此新闻发布之后,热度必须随着新闻变得陈旧而衰减。
新闻的热度就在这些算法的综合作用下不断变化,推荐列表的排序也就不断变化。
初始热度不应该一致
上面的算法为每一条入库的新闻赋予了同样的热度值,但在现实使用后发现行不通,例如娱乐类别比文化类别受欢迎程度本身就高很多;或者突发了严重的灾害或事故;或是奥运会期间,体育类别的关注度突然高了起来;而此时如果还是每条新闻给同样的热度就不能贴合实际了。
解决办法就是把初始热度设置为变量:
(1)按照新闻类别给予新闻不同的初始热度,让用户关注度高的类别获得更高的初始热度分,从而获得更多的曝光,例如:
(2)对于重大事件的报道,如何让它入库时就有更高的热度,我们采用的是热词匹配的方式。
即对大型新闻站点的头条,Twitter热点,竞品的头条做监控和扒取,并将这批新闻的关键词维护到热词库并保持更新;每条新闻入库的时候,让新闻的关键词去匹配热词库,匹配度越高,就有越高的初始热度分。
这样处理后,重大事件发生时,Twitter和门户网站的争相报道会导致热词集中化,所有匹配到这些热词的新闻,即报道同样事件的新闻,会获得很高的初始热度分。
用户行为分规则不是固定不变的
解决了新闻入库的初始分之后,接下来是新闻热度分的变化。先要明确用户的的哪些行为会提高新闻的热度值,然后对这些行为赋予一定的得分规则。例如对于单条新闻,用户可以点击阅读(click),收藏(favor),分享(share),评论(comment)这四种行为,我们为不同的行为赋予分数,就能得到新闻的实时用户行为分为:
S(Users) = 1*click + 5*favor + 10*comment + 20*share
这里对不同行为赋予的分数为1,5,10,20,但这个值不能是一成不变的;当用户规模小的时候,各项事件都小,此时需要提高每个事件的行为分来提升用户行为的影响力;当用户规模变大时,行为分也应该慢慢降低,因此做内容运营时,应该对行为分不断调整。
当然也有偷懒的办法,那就是把用户规模考虑进去,算固定用户数的行为分,即:
S(Users) = (1*click + 5*favor + 10*comment + 20*share)/DAU * N(固定数)
这样就保证了在不同用户规模下,用户行为产生的行为分基本稳定。
热度随时间的衰减不是线性的
由于新闻的强时效性,已经发布的新闻的热度值必须随着时间流逝而衰减,并且趋势应该是衰减越来越快,直至趋近于零热度。换句话说,如果一条新闻要一直处于很靠前的位置,随着时间的推移它必须要有越来越多的用户来维持。
我们要求推荐给用户的新闻必须是24h以内,所以理论上讲,衰减算法必须保证在24h后新闻的热度一定会衰减到很低,如果是线性衰减,当某些新闻突然有大量用户阅读,获得很高的热度分时,可能会持续排名靠前很久,让用户觉得内容更新过慢。
参考牛顿冷却定律,时间衰减因子应该是一个类似于指数函数:
T(Time) = e ^ (k*(T1 – T0))
其中T0是新闻发布时间,T1是当前时间。
而由于热度的发展最终是一个无限趋近于零热度的结果,最终的新闻的热度算法也调整为:
Score = ( S0(Type) + S(Users) ) / T(Time)
其他影响因素
很多新闻产品会给用户“赞”,“踩”或“不在推荐此类”的选项,这些功能不仅适用于个性化推荐,对热度算法也有一定的作用。
新闻的推送会造成大量的打开,在计算热度的时候需要排除掉相关的影响。类似于这样的因素,都会对热度算法产生影响,因此热度算法上线后,依然需要不断地“调教”。建议把所有的调整指标做成可配项,例如初始热度分,行为事件分,衰减因子等,从而让产品和运营能实时调整和验证效果,达到最佳状态。