CTR和推荐算法有什么本质区别?

2020-12-22 14:43:49 浏览数 (1)

作者:石塔西 链接:https://www.zhihu.com/question

/341529083/answer/1616964921

CTR预估与推荐系统的目标存在gap

CTR预估起源于计算广告,因为关系到真金白银的定价问题,因此要求预估出来的CTR必须“绝对准确”。这是因为,假如给一个用户准备了A/B/C三个广告,那么无论预测CTR是0.9、0.8、0.6,还是0.5、0.4、0.3都不影响三个广告的展现顺序,但是向客户的收费却有天壤之别。

但是推荐系统只要求“相对准确”。假如ABC换成了三篇文章,只要能够将用户最喜欢的A排在第1位,次喜欢的B排在第2位,无论我们预测的CTR是0.9、0.8、0.6,还是0.5、0.4、0.3,用户都能接受。

看似要求“绝对准确”性,要比“相对准确”,难度更大一些:如果我们能够将用户对每个候选item的CTR都预测准确,那么排序的“相对准确性”自然能够得到保证。但是实际上,“预估CTR”和“排序准确”两个目标存在gap

这是因为"ctr预估"是pointwise loss,每个样本由<user, item, label(0或1)>组成,loss采用binary cross entropy loss。由于实际系统中,正样本太稀疏,理论上存在这样一种可能性,就是算法将所有<user, item>都预测成0,binary cross entropy loss同样能够最小化,但此时,排序正确性就无从谈起了。所以,现实的CTR算法,往往伴随着在训练时对正样本加权,而在预测时还需要对预估出来的ctr进行校正。

那为什么在推荐系统“精排”阶段,CTR预估算法依然流行?根据我在内容推荐场景下的经验,主要是因为推荐系统中的正负样本比例没有那么悬殊,10%以上的ctr并不罕见,所以即使不对正样本进行加权,也不会出现“所有样本都预测成负类”那种“一边倒”的情况。但是,理论层面上的gap依然存在。

如果要确保排序上的准确性,理论上应该采用Pairwise LearningToRank(LTR),即每个样本由<user, item , item->三元组组成,预测的目标是<user, item >的匹配得分要高于<user, item->的匹配得分。为了达成这一目标,可以采用margin-based hinge loss或BPR loss。但是由于"ctr预估"这种ponitwise的算法,在实际排序场景下干得还不错,所以在“精排”阶段使用Pairwise LTR并不是很流行。但是也不是绝对没有,从《Applying Deep Learning To Airbnb Search》和《Improving Deep Learning For Airbnb Search》两篇文章,可以窥探出Airbnb在“排序”阶段,采用双塔模型来实现Pairwise LTR。

现实推荐系统也并非只按"预估CTR"排序

刚才所说的,在“排序”阶段,先预估用户对每个候选item的CTR,再按预估ctr对各候选item从大到小排序。这个是最最简单的场景,而现实推荐系统往往是多目标的,并不会只预测ctr并按ctr排序。

  • 对于电商推荐,排序不仅要预测用户的点击率,更重要的是预测用户的转化率(CVR);
  • 对于内容推荐,业务关心的除了CTR,还有阅读/观看时长、转发、评论等指标。

因此,实际环境下的推荐排序,往往是一个多目标优化问题,而不是简单预测CTR。关于多目标优化,既有阿里的ESSM这样的hard parameter sharing算法(《Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate》),也有Youtube采用的MMOE这样的soft parameter sharing算法(《Recommending What Video to Watch Next: A Multitask Ranking System》)。感兴趣的同学,可以移步原文阅读。

CTR预估只适用于具备“真负”样本的场景

CTR预估本质上就是预测点击与否的二分类算法。和所有算法一样,CTR预估成功的关键之一就是样本的准确性。

  • 对于正样本,一般可发挥的空间不是很大,最多就是卡一个停留时长,将属于“误点击”的正样本剔除。
  • 对于负样本,CTR预估是非常讲究“真实负样本”的,即一定是给用户真实曝光过而被用户忽略的item,才能作为负样本。为此,还有所谓的above-click作法,即只拿用户点击的item的位置以上的未点击item作为负样本。

但是,推荐系统中还有很多场景,我们是无法获得“真负”样本的,比如:

  • 召回。召回的候选集一般是百万级、千万级,其中绝大多数item都从未给用户曝光过,虽然没有点击,但是你不能说用户就一定不喜欢。(至于为什么不拿“曝光未点击”做负样本,请见我的另一篇文章《负样本为王》)
  • 个性化推送。App内部的推荐,我们可以根据埋点,比较容易获知用户滑过、忽略了某些推荐内容,所以比较有信心拿那些item作为负样本。但是在推送场景下,我们很难知道用户未点击的item是用户真的不喜欢,还是压根没看见(像我对于大多数推送,就是瞟了一眼桌面上的手机,这种“忽略”行为是无法埋点的)。所以,你也不能放心地将所有未点击的item都当负样本。

在这种无法获得“真负”样本的场景下,一般我们通过随机采样来获得负样本。但是,随机采样毕竟引入了噪声,这时,再用CTR预估这种要求“绝对准确性”的算法,就不合适了。所以,在召回或个性化推送场景下,我们一般采用Pairwise LearningToRank(LTR)建模排序的“相对准确性”。就好比,

  • 由于负样本中的噪声,让我预测user不喜欢item-的精确程度,我信心不足;
  • 但是由于item-是从库中几百万的item中抽样得到的,大概率和用户兴趣八杆子打不着,让我预测“user对item ,要比user对item-,喜欢得多一点”,信心更加充足一些。

0 人点赞