hello,大家好,我是蛋蛋。最近一直在做一款海外直播产品的列表排序,期间遇到一些问题,也找到了一些解决方法,简单总结一下,方便自己review也跟大家分享下。
为什么要做排序?
目前移动端直播对于直播内容的展示大都采用大图列表的形式,如下图所示映客的首页热门列表,
个人认为这种展现形式在移动端不是最合适的,但是在对用户口味很难把握的情况下,采用传统的列表展示,让用户自己去挑选还是可取的。因此当用户打开app看到的直播列表就显得格外重要,这直接关系到用户是否会继续下面的操作。因此,在列表做直播内容的排序就十分必要了。
排序中遇到的问题和解决思路
在我们的直播app上线前期,列表的直播内容是很有限的,这个时候,列表排序所要解决的核心问题是:
把最好的直播间优先让用户看到
如何定义直播间好坏
因此,在这个阶段要想的反而简单,其实就是如何辨别一个直播间好坏的问题,我们在排序时把好的直播间放在较前的位置就好了,这就是我们经常看到的热门列表,对于热门的定义就是平台对于好直播间的定义。
那问题就回到如何判断一个直播间的好坏,对于直播间的好坏判断有很多维度,很自然的想到,直播间人气,直播间营收等等。这个要与产品的本身定位和所处的阶段联系起来制定。因为我们的产品刚刚处于起步阶段,希望用户能够更多留在直播间里,同时我们对产品的定位是促进用户和主播之间的互动(公屏文字消息),因此当时我们制定的房间好坏的标准就两条
- 能不能留住用户(用户是否愿意一直观看)
- 能不能让用户聊起来(用户是否愿意发送公屏消息)
决定直播间好坏的因素选择
有了这个标准之后,我们看重的主要房间因素是:人数、x分钟留存、人均公屏消息数、公屏消息率。下面简单介绍下这几个因素计算(每隔时间t进行计算)
- 人数,实时计算房间的人数。
-
x分钟留存,x可以选择3分钟,或者5分钟,其实和跳出率类似,以5分钟留存为例,定义为,在一个5分钟的时间段内,前面两分钟进来的用户记为m,在5分钟时间段过后(3分钟后),依然在直播间的用户记为n,则5分钟留存r为
- 人均公屏消息数,考察用户在直播间内是否愿意和主播互动,礼物的门槛比较高,因此用公屏来判断较为合适,人均公屏数的定义为,发言的总条数/发言的总人数。
- 公屏消息率, 如果只考察人均公屏消息数,只能反映发言的人和主播互动的强度,同时还有就是互动的广度,即公屏消息率,定义为,发言的人数/房间的总人数。
综合房间因素得到排序值
有了上述因素定义之后,问题就变成了如何将这些因素综合在一起变为一个值来反应直播间的好坏,这个值也就是排序所要用到的排序值。将多个不同维度(不同单位)的因素综合到一起的方式有很多,比较常用和简单的就是普通线性加权。将多个因素归一化之后,每个因素配一个权值然后线性加到一起,如下样式
值得一说的是,不同因素的归一化方法,也有很多种,本人比较推崇的是从产品业务角度出发去进行非线性的归一化,我们可以将不同因素都划分到0到1分之间,譬如人数,那么从业务角度去定义的话,当人较少时,譬如少于10人,定义为0.1分,当人数上涨较快时,这个时候给的分数也较高,比如11到20人,0.3分,当人数特别多的时候,这个时候房间的人数已经不那么重要了,可以将过高的定义为0.9分,当再多时,甚至可以将分数降低,给予一定的惩罚,从而一定程度避免马太效应。因此因素的归一化如果纯按照数学上提供的方法可能不太符合业务的实际情况。
同时在计算参数的过程中,还得注意的问题是,在计算一些比例项时,譬如留存项,就会出现一个问题,当分母过小时,可能就1个人在直播间,然后几分钟后还没走,那么此时留存就是100%。对于这种问题的处理有很多种,有的是直接在分母中加一个常量,或者定义一个统计比例数据分母的最小阈值。
上线后如何衡量排序算法及权值参数调节
按照上述的排序算法,我们给定一个初步的权值之后基本就可以灰度(甚至直接上线)了。好像貌似可以解决列表排序的需求了。这时候需要想起的是
没有数据优化目标的产品需求都是耍流氓
其实就是如何衡量我们做的这些有没有用,不然调节参数,增加排序因素维度都是没有任何意义的。其实列表和现实生活中的商店的商品橱窗基本起着同样的作用,展示给用户,吸引用户购买(进入观看)。一个好的橱窗展示应该是,当用户看到商品就会去买,所以一个好的列表就是让用户看到就去点,然后还一直观看,不停在里面和主播勾搭聊骚。从成本和收益的角度来看,列表上的任何主播直播间的曝光,都是我们的成本,因为用户(流量)是有成本的,我们的收益应该就是我们所看重的点击,观看时长,公屏消息数等。因此我们对于衡量指标的定义就是
- 直播间点击量/列表曝光量
- 直播间人均观看时长/列表曝光量
- 直播间消息总数/列表曝光量
- ...
在不同阶段产品的侧重点也有可能不同,在不同的侧重点,就应该着重关注某一个指标,当然也可以将上述衡量指标综合成一个总的kpi。有了这个之后,我们调节参数,就可以通过这些指标来判断调整的好坏,从而决定某一组参数要不要上线。
总结
上述的整个列表的排序思路比较基础和简单,但基本搭建了一个排序系统的基本框架,后续的优化基本都可在这个框架上进行,比如增加排序历史因素的考虑,运营因素的考虑等。或者将线性加权模型改成非线性的,增加时间因素等等各种约束条件等。但是本质上都是在做一件事,也是文章最前面提到的“把最好的直播间优先让用户看到”。
当然列表除了承载内容的展示外,还担负着用户流量的引导,当产品用户量成长到一定规模后,本文所提的算法就会遇到一个很大的麻烦,头部集中,就会遇到一些问题,比如,把什么用户给到什么样的主播,如何合理流量分配,如何个性推荐。这些就放在以后的文章里总结了。
后记
其实列表的排序问题,由来已久,所有的内容型平台都会涉及到这个问题,新闻网站热门,社区应用的帖子排序,电商网站的商品,简书首页的文章排序排序,等等。直播类产品的排序算是一种特殊情况下的应用。所以这方面也有很多的资料可以参考,贴给大家
阮一峰老师之前曾经翻译总结过一系列的文章http://www.ruanyifeng.com/blog/2012/02/ranking_algorithm_hacker_news.html
知乎的问答排序规则和威尔逊算法
https://zhuanlan.zhihu.com/p/19902495?refer=zhihu-product
https://en.wikipedia.org/wiki/Binomial_proportion_confidence_interval#Wilson_score_interval