求助:(1)如何计算用户活跃度?(2)在将活跃度作为排序的权重因子时,如何将其进行归一化,以方便与其他的权重因子进行按比例整合?(3)何时进行用户排序?

2014-05-10 10:42:05 +08:00
 hustlzp
不知道表述清楚了没有,主要是3方面的问题:

(1)计算活跃度

目前的想法暂时是这样的,在redis中以 "user:%d" % user_id 为键,通过hash的形式保存2项内容:

* activeness:活跃度
* activeness_update_time:活跃度更新时间

用户每次访问页面、发私信等,都进行活跃度的计算:

* 首先根据activeness_update_time距离现在的时长T,对activeness进行衰减处理,T越长衰减程度越大
* 然后,再让activeness += 某值(比如访问页面+1,发私信+2)

(2)结合活跃度以及其他的权重因子,对用户进行排序

在user表中增加一个字段order_value,最终的排序就依据这个东西。

有个要求就是活跃度的权重是30%,其他权重因子(比如用户信息完整度)的权重是70%,据此计算出最终的order_value。一般貌似是先归一化,然后再计算:

order_value = 0.3 * 归一化的活跃度 + 0.7 * 归一化的用户信息完整度

那活跃度这个上不封顶的东西,如何归一化呢?是不是需要构造某个y=f(x),然后满足f(0)=0,f(x→∞)=1呢?

(3)何时进行排序

个人的看法就是每天深夜的时候触发一次排序,计算出所有用户order_value。可以使用crontab、celery beat等实现周期性触发计算任务。

--------------------------------

以前没有遇到这种需求,只能瞎灯黑火地猜,所以真心求教各位V大,或者能分享一下相关的资料就太感谢了。
4747 次点击
所在节点    程序员
6 条回复
andyhu
2014-05-10 14:18:38 +08:00
为啥要用hash?elasticsearch可以搞定这种需求,把activeness和activeness_update_time做成field就可以了。加权重的话可以boost
hustlzp
2014-05-10 14:29:40 +08:00
@andyhu THX!
andyhu
2014-05-10 14:52:48 +08:00
elasticsearch中文资料较少,我也是最近开始研究的,发现这东西太强悍了,功能非常多而且操作简便。但是官方文档渣得很,推荐搜下exploring elasticsearch,还算写的不错
javaluo
2014-05-11 11:29:24 +08:00
计算一下活跃度大概的分布,然后给一个最大值,,例如100.超过这个最大值,就封顶为100
hustlzp
2014-05-11 12:42:09 +08:00
@andyhu 恩,我去看看 :)
hustlzp
2014-05-11 12:42:28 +08:00
@javaluo 呵呵,这个蛮简单粗暴的~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/111870

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX