18

你真的了解热度排行榜吗 - 简书

 4 years ago
source link: https://www.jianshu.com/p/80b8239f02c0?
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
0.2972020.08.04 22:29:42字数 2,930阅读 346

关于商品热度值相似的叫法还有:商品静态分、商品质量分、口碑指数等,其实都在讲商品热度这个问题;关于如何构建商品热度排行榜,我们首先应该坚信 好的榜单不是拍出来的。

给物品或内容进行打分排序,在互联网应用中非常常见,如豆瓣评分、微博热搜、头条榜单以及口碑指数等,至于打分规则官方自然不会公布其核心算法逻辑,否则营销人员就会根据算法有针对性的攻击内容,到时我们看到的热榜可能会被大量营销广告所占据;虽然不能直接获取热度公式,但通过hacker news与Stack Overflow公开的处理逻辑,我也能给它山寨一个榜单算法。

一个完美的热度排名算法应该考虑以下问题

  • 1, 运营同学问能否通过人工干预实现部分商品的排序,如营销类、合作类以及热点话题类相关内容。
  • 2, 受爬虫或人气大v影响,部分商品点击量会无限暴增,但商品热度的增长速度不能无限增大。
  • 3, 排行榜商品应不定期自动更换,不能因为单一维度变化影响商品热度排序。
  • 4, 多个维度共同打分时,如何权衡每种维度的权重。
  • 5, 不同品类下的商品热度是否可比,如邀请函和日签。
  • 6, 随着时间推移,过早上架的商品应该降权,以确保新上架商品有足够的曝光机会
  • 7, 商品的热度值要有参照性,最好能落在一个固定的区间里,例如当说商品热度值是15时,听的人是没有一个宏观概念的,他们不知道商品热度值15代表什么,但如果说小明考了99分,你瞬间就会觉得小明很棒。

热度值算法

了解热度公式之前,我们先来看一个比较有意思的自然现象,将一杯开水放在低温环境中,由于物体和环境存在明显的温度差,这时温度高的物体会向温度低的物体传递热量直至环境和物体间温度平衡,温度差约明显物体散热会越快,这就是著名的牛顿冷却定律:T(time) = Te^{k*(t1-t0)} ;而我们还需要额外考虑的是,当散热过程中继续往杯子里加入热水时水温还会继续上升。

那么最终的热度公式将包含如下几部分:

热度值 = 初始热度值 + 用户交互贡献值 - 时间衰减值
热度排名算法

一件商品上架之后,系统会为其分配一个默认的热度值,基于该默认值商品就进入了排序列表;随着用户浏览、收藏、下单、使用等后续行为的发生,该商品热度值会被不断拉升,但由于上架时间距离当前时间越来越远,商品的热度值会被衰减。

明确各维度的含义

虽然商品热度值变化应该符合一种自然的变化规律,但有时我们更想站在上帝视角进行干预,那么设置初始值将会是一个不错的选择
给予商品初始热度一方面是为了让新上架的商品在排序列表中有一定的排序比重,让新商品获得一定的展示机会;另一方面运营可以通过动态调整初始值来运作一些热点话题和营销广告,如某花突然在微博上爆出“天猫总裁事件”。

初始值应该根据商品所属品类单独划定,这样才能契合不同品类的定位和特点,比如你在京东搜索"小米",满屏返回的都是小米手机,而不是小米手机壳;

为了能够完美处理问题一,还需要针对商品本身进行初始值设定,对运营类营销热点商品给予足够的权重配置才能确保优先曝光。

优先级: 商品初始值 > 品类初始值

初始值的设定是为了保护新发商品和热门商品,所以还需要搭配一个生效范围,如一个月,超出一个月的应归零(当然也可以对初始值进行分阶段降权,如一周降一半 、再过一周再降一半);这也就是为什么你在京东搜索“小米手机”后,排在前面的都是些新品,反而销量高的过代“旗舰机”被放到了后面。

  • 用户交互贡献

为了避免商品分值受单一维度影响,这里可结合多种用户行为进行操作,如 浏览量、访客数、分享量、收藏量、订单量、制作量、商品页数、含组件数量、。 这里参考控制变量法的思想,先选取一些核心指标进行初始验证;至于如何选取还是要结合自身业务来定,以新浪微博为例,它追求的是热点内容(如明星相关的内容)的高正向评价与病毒式传播,所以点赞和转发的量相对于回复量而言往往都很高;而以网易新闻为例,其中很多板块都有不少争议性内容(如体育、3C方面),目的是引起用户之间的强烈互动甚至撕逼,所以跟帖量又会远远超过喜欢和分享的数量。

用户行为是表征内容热度的最直接指标,一般采用对各项数据加权的方式来计算。权重值的大小必然会有区别,阅读量的权重几乎总是最低的,而订单和制作行为门槛较高,所以会给予比较高的权重,至于权重值的大小前期可以基于经验科学进行验证,然后通过ABTest不断去调整(前期为了便于调整可以将权重做成运营可配)。

这里光有权重还不行,针对问题2可以引入log函数对数据进行压实,根据log曲线可以看出,随着X数值的增大,Y值的增长速率在逐渐放缓,这样就避免了因单一指标的过快增长导致最终分值被线性放大。

image.png

时间维度用来控制热度随时间的衰减,距离当下比较久远的内容应该具有更低的热度值,就像人会逐渐忘记一些之前做过的事情一样。

  • 发布时间:为了解决马太效应,随着时间推移过早上架的商品应该降权,以确保新上架商品有足够的曝光机会。
  • 最近一次作品制作时间:好的内容具有沉淀意义,早期上架的商品当遇到某个时间节点或某个事件触发,依然有可能被再次激活,如中秋祝福、婚礼邀请函相关商品。

再结合牛顿冷却定律公式可得:

S(t) = S·exp[ -γ·(Tn+Tc-2·Tp) ]

其中S是商品初始分值与用户交互贡献分值之和,γ是重力因子(也叫冷却系数),该值越大,分值下降的会约快,Tn、Tc、Tp分别代表当前时间、最近一次作品的制作时间、商品发布时间,时间单位是天;通过公式可以看出,S是增函数,时间衰减是减函数,这样一增一减才能最终实现S(t)的平衡。

其中重力因子是一个可调节的值,例如S值为100分,24小时后为1分,则可得出重力因子系数为0.192;如果想要加快冷却衰减则可以增大该值,否则减小;下图为不同的重力因子系数对应的衰减曲线:

S(热度指数) = [ if[(Tn-Tp) > 1M , score0 , 0] + log10(1+visitor) +  ln(1+2·work) +  ln(1+5·order) ] * exp[ -γ·(Tn+Tc-2·Tp) ]

这里有两点需要注意:

  • 为了避免出现log值为负的情况,需要将曲线沿x轴方向向左平移1个单位,即 y=lg(x+1)
  • 为了消除问题5与问题7带来的影响,这里需要对S(热度指数)进行归一化处理。

数据归一化的目的是让数据能够均匀离散的分布于0-1之间,并且可以达到消除量纲的目的,让不同品类的指标可以进行相互比较;常用的归一化函数为最值归一化:

image.png

搞一个Demo

到此理论知识已倾囊相授,那么还需要结合实际来验证一下效果,以下是在百万商品集上进行简单的效果验证,毫秒级可出结果:

易企秀商品域
8月10号榜单
8月13号榜单

从上面两张图可以明显看出 3天之后的榜单发生了明显的数据变化。

  • 关于时间衰减,还有另外一种较为常见的算法 即高斯衰减,该衰减函数变化曲线为先缓慢,再剧烈然后又缓慢;至于哪种变化关系更符合实际的商品热度的变化,需要结合实际业务和效果去评判。

    image.png

    其中高斯衰减曲线为Y轴的右半侧,与指数衰减不同的是x部分使用的是二阶函数。

  • 上述热榜算法并未考虑基于商品内容性质以及品类进行细分,感兴趣的同学可以参照知乎热榜,将数据分为全站、科学、数码、体育等多个版块的方式去做,不过主要流量还是集中于总榜。

  • 该算法模型不仅仅可以用在榜单,还可以应用在用户画像系统 衡量标签的质量、应用在搜索推荐业务中 提升商品的排序效果。

从技术人员的角度讲,一句话:技术本身是死的,但业务与人都是活的。如果技术人员对业务逻辑有深入了解的话,就会自然地去寻找更准确、高效的解决方法,双方合作起来也会更愉快;同样,产品经理在算法的实施中,绝对不是一句 “做榜单我们要用AI来完成” 就完事的,必须深入算法内部,对算法的原理做深入了解,然后结合自己的经验进行设计和优化,不然技术最终交付的东西,产品是没办法去验证它的质量的。

对该话题感兴趣的同学 还可以参考我的另外一篇文章 商品静态分

-- 作品系原创、转载请注明出处


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK