推荐系统流量池的构建
这篇文章的目的是希望构建一套可行的,灵活的,能支持我们常见业务需求的流量池系统架构设计
内容流量池的目的
我们希望通过流量池达到以下目标
解决内容推荐的马太效应
限制点击率比较低的内容的投放次数
帮助运营提升内容分发的效率,提供一个可以对播主赋能的手段
流量池的整体架构设计
流量池系统在整个推荐系统中主要起一个资源吃的作用,可推荐的内容资源以流量池中的内容流量的形式存在。同时为其他各种召回策略提供原始数据集。
流量池中的流量有多种类型,主要有以下四种
- 测试流量:所有合法内容发布以后获得此类流量,用于保证内容的最少推荐次数,通过测试流量来评估内容的质量表现,过滤掉质量比较低的内容
- 叠加流量:通过测试流量筛选以后的质量相对较高的内容可以获得此类流量,用于优质内容的自动流量续费
- 运营流量:运营人员或者博主自己为内容添加的可用流量
内容流量池的概念
一个承载内容和内容可推荐次数的数据集合,流量池的核心数据是一个类似于<c10086, 1000>
的<k,v>
结构。表示的含义也很简单,就是c10086这个编号的内容拥有1000次的推荐次数。
流量池内容的推荐符合如下基本规则
- 拥有流量的内容才允许被推荐,内容每推荐一次消耗一个推荐流量
- 内容流量拥有不同的类型,同一个内容可以同时拥有多种流量
流量的定义
一个流量代表一个内容对某用户的一次推荐行为,如果一个用户一次请求中请求了10条的数据, 那么这一次推荐就消耗了10个流量, 本次结果中的每个被推荐的内容推荐流量 -1。
用户对某一个内容的推荐不会重复, 所以一个用户对某个内容至多拥有一个流量。同时推荐流量也限制了内容的被推荐次数,假设一个内容的总流量是1000,意味着至多被推荐给1000个人。
流量池的生成和使用规则
- 流量分批次,一个批次500个流量。所有内容默认拥有500次的测试流量, 也就是说所有内容至少应被推荐500次
- 每个批次的流量消耗完毕进行点击率/互动率的计算,达标的继续分发流量。除第一次外的流量批次统一为叠加流量。叠加流量消耗完毕也进行点击率的计算,达标的继续进行新的流量分发。
- 运营可以为内容投放运营流量,流量消耗的优先级:运营流量>叠加流量>测试流量。运营流量也分批次投放,也需要计算点击率,运营流量消耗完毕以后不再进行叠加流量的追加。
如何限制点击率比较低的内容的投放次数
每个批次的内容流量消耗完毕立即进行点击率的计算, 达标的才能继续获得流量。点击率低的不达标内容不再进行推荐。
每个内容至少拥有500次的测试流量,用于充分测试其质量表现。
如何解决马太效应
内容流量的生成门槛随着流量分发的次数逐步提高。 例如,a内容前1000次流量点击率12%, 阈值为 6% ,将继续获得1000次流量的额度,等这1000个流量消耗完毕,对应的门槛提高到 12%, 假如这第二批次的流量点击率为10%, 将被终止流量的继续投放。已消耗流量越多,获得新流量的点击率阈值越高,用以打击热点内容的权重。
如何帮助运营人员提高内容分发效率
运营人员可以为内容赋予额外的流量,拥有充足流量的内容将在推荐策略中获得加权, 可用流量越多的内容,相对来说越容易被推荐出去。
定向推荐: 指定用户范围的推荐
上面的流量池只能实现对某内容的一定次数的推荐, 其实还可以在此基础上实现对特征用户的定向流量投放。即我们可以指定某内容向某一类用户进行推荐的次数。
这个功能可以用来进行运营赋能, 帮助运营更精准的进行流量投放, 也可以帮助创作者进行早期的用户积累和帮创作者提高内容的曝光度。
实现原理
我们可以为用户设置一系列的特征列表例如
用户/特征 | >30岁 | 男性 | 郭德纲粉丝 | 杨幂粉丝 | 喜欢综艺 |
---|---|---|---|---|---|
1 | 1 | 0 | 1 | 0 | 1 |
2 | 0 | 1 | 0 | 1 | 0 |
3 | 0 | 0 | 1 | 0 | 0 |
我们如果要对用户进行精准投放,只需要选中一部分特征用户,并为此特征生成对应的召回集。 例如,我们要把内容A对杨幂的粉丝进行投放, 内容B对30岁以下的男性用进行投放
那我们可以生成如下两个数据序列
1 | val 杨幂粉丝 = Set(A) |
用户1 在获取推荐结果的时候,根据自己的用户特征列表和列表中特征对应的待推荐内容(召回集)进行融合排序推荐
1 | def getRecommendations(user:String): Seq = { |
流量池的效果评估指标
我们为了评估流量池的运行效果,我们需要制定一部分指标来对流量池进行监控并及时的调整参数
主要用到的指标有
每日的新订单创建数量和不同类型的订单的创建数量
当前流量池的可用流量分布和不同类型的订单的分布
已消耗订单的点击率分布和不同类型的订单的点击率分布
总结
流量池系统其实是通过一种机制来控制内容的可曝光次数, 来对推荐结果的分布进行干预。
为了保证新内容的充分曝光,新内容会被给予一定次数的固定流量。表现好的内容将持续不断的获得推荐流量,表现不好的内容将在一定的推荐次数后不再推荐,空出来的推荐机会留给其他表现更好的内容。
同时为运营和个人播主提供了额外的手段用于满足部分推广需求。