目标
将广场信息流中的优质内容推送到顶部
所有数据
- 赞
- 评论
- 是否配图
- 后台推荐标识
- 时间戳(s):(发帖时 - 2018-03-15-00-00-00)/ 1000
排序逻辑:
- 新内容要往前排
- 赞多的往前排
- 评论多的往前排
- 有配图的初始权重高
- 有推荐标识的置顶
- 官方贴优先置顶
数据的权重(权重后期可调)
- 推荐:置顶(最多3个)
- 有配图:10
- 赞:2
- 评论:5
- 时间戳:/ 100
公式
平滑一下赞和评论的影响(当赞和评论数量多时)
LOG10((zan * 2 + com * 5 + 1)) + pic * num + timestamp / 100
测试结果
输了20个WB广场最新数据,从上至下,(截屏,假设每个贴间隔3s),Excel跑一下:
基本符合预期,数据量比较小,误差会比较大。数据多一点,时间延长几天,再测试下。怎么实现比较简单?(赖力,能不能用后台跑下测试服卧底的样式)
测试
排序写好后,用测试服测试一下排序的效果,大家都发一下各种形式的内容,基于内容视觉,再多修改几次权重
上线后权重优化
优化标准:广场页平均每个用户停留时间
设置几组不同的参数,判断哪一组参数用户的停留时间更长
其他
记录一下用户的点赞数,后期可以给用户相应标签,激励其多发高质量内容
修改
用户刚发的时候,客户端置顶,刷新的时候再排序
服务器每10分钟刷新排序一次
排序小颗粒度:1h,评论点赞优先,之后时间权重增加
排序大颗粒度:1天,时间权重增加更快
time = 当前时间 - 发帖时间
横向优先显示点赞和评论多的帖子,纵向弱化时间的权重
发布后1h:
lg(zan * 2 + com * 1 + 1) + 36 + pic(0 || 1) * 18 + 100 / (time + 10) + 100
发布后1天:更更减弱权重
lg(zan * 2 + com * 1 + 1) + 36 + pic(0 || 1) * 18 + 100 / (time + 10)
参考
-
Delicious
它按照"过去60分钟内被收藏的次数"进行排名。每过60分钟,就统计一次 -
Hacker news
Score = (P-1)/(T+2)^G -
Reddit
Score = log10(Z) + yt/45000 -
Stackoverflow
[log10(Qviews)4 + (QanswersQscore)/5 + sum(Ascores)] / [(Qage+1)-(Qage-Qupdated)/2]^1.5 -
Reddit
二项分布,威尔逊区间 -
IMDB
贝叶斯平均
WR = (v/v+m)R + (m/m+c)C
最终
T单位为小时:
Score = log[(Z*2 + C)] + P)/(T+2)^G