• 请不要在回答技术问题时复制粘贴 AI 生成的内容
hustlzp
V2EX  ›  程序员

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

  •  2
     
  •   hustlzp · May 10, 2014 · 5170 views
    This topic created in 4395 days ago, the information mentioned may be changed or developed.
    不知道表述清楚了没有,主要是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大,或者能分享一下相关的资料就太感谢了。
    6 replies    2014-05-11 12:42:28 +08:00
    andyhu
        1
    andyhu  
       May 10, 2014
    为啥要用hash?elasticsearch可以搞定这种需求,把activeness和activeness_update_time做成field就可以了。加权重的话可以boost
    hustlzp
        2
    hustlzp  
    OP
       May 10, 2014
    @andyhu THX!
    andyhu
        3
    andyhu  
       May 10, 2014
    elasticsearch中文资料较少,我也是最近开始研究的,发现这东西太强悍了,功能非常多而且操作简便。但是官方文档渣得很,推荐搜下exploring elasticsearch,还算写的不错
    javaluo
        4
    javaluo  
       May 11, 2014
    计算一下活跃度大概的分布,然后给一个最大值,,例如100.超过这个最大值,就封顶为100
    hustlzp
        5
    hustlzp  
    OP
       May 11, 2014
    @andyhu 恩,我去看看 :)
    hustlzp
        6
    hustlzp  
    OP
       May 11, 2014
    @javaluo 呵呵,这个蛮简单粗暴的~
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2850 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 01:51 · PVG 09:51 · LAX 18:51 · JFK 21:51
    ♥ Do have faith in what you're doing.