数据驱动:一次利用算法提升评论活跃的案例

我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  

优化评论区有很多办法,本文将从评论排序算法的角度,介绍一次评论排序优化的过程,并展望下后续的迭代思路。

数据驱动:一次利用算法提升评论活跃的案例

哪个产品甘愿只做用户用完即走的工具?作为内容产品的产品经理,内容同质化带来的用户流失始终是困扰我们的问题,如何让用户留存并活跃,产生粘性呢?

可以通过做社交来实现,通过内容的评论区向社区进行的转化,例如网易云音乐

优化评论区有很多办法,本文将从评论排序算法的角度,介绍一次评论排序优化的过程,并展望下后续的迭代思路。

本文行文思路如下:

数据驱动:一次利用算法提升评论活跃的案例

为什么要做评论排序

探讨这个问题之前,先要讲评论区对于一篇内容来说有什么作用。评论尤其是优质评论能够让用户产生共鸣,加深对内容的理解,或者激发用户讨论等等。灌水的评论也是组成评论的一部分,但其价值显然没有优质评论高,那怎样让优质的评论获得更多的曝光,解决优质的评论内容无法被用户看到,互动量少的问题,这就是做评论排序的一个重要意义。

主流评论排序方式

现在主流的评论排序有3种,按点赞数量排序,按时间排序以及基于算法排序。

数据驱动:一次利用算法提升评论活跃的案例

按点赞排序最能反映用户对评论内容的态度,也最直观易懂,而其问题是时间越长,评论数量越多,新的评论得到的曝光越差。按时间排序则能保证评论内容的流动性,即时性强,但这种排序方式又不能让优质的评论获得最大限度的曝光。

基于各类算法排序则一定程度上将这两种的优点结合起来,既保证了优质评论能获得更多的曝光,又能让评论流动更新,在这次迭代时我们也选择了算法排序的方式。

什么是Hacker News算法

Hacker News算法源于Y Combinator旗下的新闻频道Hacker News,用户可以在此讨论某个新闻或主题,同时用户可以对其进行投票。Hacker News算法则基于用户投票情况与时间等因素,对内容展示进行排序。

这个算法的公式如下:

数据驱动!一次利用算法提升评论活跃的案例

其中P代表的得票数,T代表内容发表至今的时间(单位为小时)。而(P-1),(T+2),1.8这些数值,设计这个算法的人对此的解释是:(P-1)是为了去掉提交者的投票,(T+2)是为了防止最新帖子分母过下导致最终得分无限大(有说法是选择2是因为从原始文章出现在其他网站,到转帖到Hacker News平均需要两小时),而1.8则是“重力引子”或者叫做“万有引力”参数,默认为1.8。

了解这个公式之后我们画个图:

数据驱动!一次利用算法提升评论活跃的案例

我们发现在其他条件相同时,时间越长,分值越低;投票越多,分值越高;重力引子越大,随时间衰减越快。深度了解之后我们发现其分子其实代表的是内容质量,分母控制跟随时间衰减。

数据驱动!一次利用算法提升评论活跃的案例

(Q指内容质量分,G指重力引子)

了解这些之后我们可以开始动手干了。

扩展:相似类型的算法还有Reddit,Delicious,IMDB等。感兴趣的同学可以自行查阅。

实施步骤

第一步:基于Hacker News算法提出几种适合自己业务的假设

前面我们提到了,Hacker News算法计算公式的分子本质上表现的是内容质量。那从哪些维度可以评估评论的内容质量或者影响评论的用户互动行为呢?可用的指标有点赞数,回复数,评论(回复)字数,发表用户是否KOL,回复增长速度等。在本次实践中我们提出猜想为点赞数,回复数,字数可以影响内容质量。

基于我们的猜想我们在Hacker News算法的基础上进行调整,衍生出了5种计算方式,如下:

  • 原始:Score=(P-1)/(T+2)^1.8
  • 衍生1:Score= (P)/(T+2)^1.8:点赞数不进行减1
  • 衍生2:Score= (P+R)/2*[(T+2)^1.8]:加入回复数的维度,回复数与点赞数各占1/2权重
  • 衍生3:Score= (P+3R)/4*[(T+2)^1.8]:加入回复数的维度,回复数占3/4权重,点赞数占1/4权重
  • 衍生4:Score= [P+R+N/AVERAGE(N)]/3*[(T+2)^1.8] :加入回复数与字数的维度,字数以文章平均字数为1单位,回复数,点赞数与字数各占1/3权重
  • 衍生5:Score= [2P+5R+N/AVERAGE(N)]/8*[(T+2)^1.8] :加入回复数与字数的维度,字数以文章平均字数为1单位,回复数占5/8权重,点赞数占2/8权重,字数占1/8权重

(Score=排序分;P=点赞数;R=回复数;N=字数;AVERAGE(N)=当前文章评论字数平均值;T=评论发布距今天小时数)

第二步:文章样本离线研究与算法实验

确定了算法后,我们抽取了几篇线上的评论量相对较多的文章的评论内容,按上面的几种算法进行排序,观察对比每种算法排序的评论列表的特点,以及这几种算法能否让优质评论突出,让灌水评论沉底。

我们以《武汉市中心医院:李医生去世》这篇文章为例,这篇文章约有5000条评论,将其所有评论按以上6种算法排序后如图所示。

列表开头:

数据驱动!一次利用算法提升评论活跃的案例

列表结尾:

数据驱动!一次利用算法提升评论活跃的案例

得出以下研究结果:

  1. 点赞和回复数较多的评论不太会受算法影响,受时间衰减影响也较小,能够一直排在最前的位置;
  2. 仅计算点赞与回复数时,如遇无点赞与回复评论则仅以时间倒序进行排序,质量较高的评论会被沉底,需要加入字数维度进行调整;
  3. 加入字数维度能够有效将质量较低(字数少,无意义,无点赞回复)的评论甩在队列最后;
  4. 加入字数和回复数维度后较多较高质量评论(有一定的观点,字数较多,点赞和回复数中等)的排序会更靠前;
  5. 有效字数需要进行限制,如遇灌水帖本身质量不高却能因字数较多排名靠前,而且字数无法完全证明该评论质量,需要削弱影响占比。

第三步:线上ABtest开发方案确认

根据上面的案例研究,我们需要加入有效字数的限制逻辑,本次案例中我按67个字进行了限制(受测产品在标准屏幕下一级评论收起状态最多展示字数67字)计算字数时小于67字按实际字数计算,大于等于67字时按67字计算。

为了控制开发成本,也为了增大各个分组的样本量。我们在以上算法中挑出2种,原始算法与衍生5。来观察不进行评论排序,Hacker News算法排序与衍生算法排序的评论数据情况,对比优劣。将所有用户根据用户ID通过模3运算分为3个实验组,分别展示不同的排序算法得出的评论列表。(如果用户量较少不建议将所有用户进行对比,分组容易产生特殊性)

同时由于节省计算资源:一段时间后的评论不再进行排序计算,按质量分最高值为4000(当前观察到的最大质量分)计算Score曲线如下:

数据驱动!一次利用算法提升评论活跃的案例

算法的更新时效规则设置为:即约T>=80时分数趋近于0且随时间的衰减变弱并考虑资讯内容的时效性,则3天后不再计算衰减,以第72个小时的分数为其最终得分(T最大值为72)。由于随时间衰减为指数型变化,则T<=24时Score每10分钟更新一次,24<T<=48时Score每30分钟更新一次,48<T<=72时Score每60分钟更新一次。

整体方案确定好之后就可以准备开发上线了。

第四步:线上ABtest与算法调参

算法上线后,需要随时监测各个对照组的数据情况,并对有疑惑的数据进行抽样检查,了解具体的文章与评论区案例。

经过一段时间对比我们发现加入了回复,点赞和字数多个维度的衍生5算法用户互动更为活跃。至此我们确定了一个基础算法,在这之后继续通过不断调整算法的各项参数,例如重力因子,各指标影响占比等,进行对照试验,试图找出效果更优秀的计算方式。

迭代展望与一些扩展内容

以上就是一次完整的一次利用算法提升评论活跃的案例,最终在包括算法优化以及新增功能等一些产品迭代的帮助下,产品的评论量增长了近一倍。

提升评论活跃还有很多可以做的工作,例如进行评论的运营:由运营手动或自动的发布一些评论内容,或者对优质评论人工增加推荐权重;功能上支持发图片或者有趣的大表情等。包括算法上也可以提出一些新的假设并进行验证,或者加入自动调整参数的功能,随时根据内容情况调整算法参数与逻辑。评论区运营有一定效果后可以增加同时发送到社区(个人状态)的功能,为社区引流,提升社区氛围。以达到提升用户粘性,促进留存的目的。以上仅是个人的一些拙见,在此抛砖引玉。

除了本文介绍的内容,关于评论区还有一些其他的有趣的产品思路值得探究,例如盖楼式评论区,树状式评论区,直线分支式评论区等。以及刚刚提到的几种内容排序算法。感兴趣的同学可以查阅资料。

本文在编写过程中较为仓促,难免疏漏烦请指出,虚心接受(求轻喷我还是个孩子)。同时为避免一些问题,省略了一些不重要的步骤,部分参数非真实值,请谅解。

 

作者:刘轩宇,从业2年半,前内容网站用户端产品经理,深水二次元,随时欢迎大家与我交流,包括但不限于产品,动漫,游戏。Wechat:GraythornVi

本文由 @刘轩宇 原创发布于人人都是产品经理。未经许可,禁止转载

题图来自Unsplash,基于CC0协议

随意打赏

提交建议
微信扫一扫,分享给好友吧。