推荐系统学习(选择性偏差)
推荐系统中的Selection bias
推荐系统中的bias
Selection bias:当用户能够自由地选择给哪些物品打分的时候,则评分数据不是随机丢失的(missing not at random, MNAR),观测到的交互数据的分布将不能代表整体数据的分布。(当用户拥有自由选择权的时候,更倾向于给自己喜欢的物品打分。)
Conformity bias:用户的打分会倾向于和群体一致,即使群体的打分有时候和用户的判断是有区别的,用户的这种倾向将使得评分并不能准确反映用户的偏好。大部分人都有从众的倾向,当用户发现自己的判断与大众不一致时,很可能改变自己的评分,而让自己的评分向大众的评分靠拢。
Exposure bias:用户只会暴露在一部分的物品上,因此没有交互过的物品不一定是用户不喜欢的,还可能是用户没看到。用户和物品没有交互存在两种可能性:用户没看到物品、用户不喜欢物品,直接讲没有交互过的物品当作负样本(用户不喜欢)会引入偏差。
Position bias:用户更倾向于和推荐列表中位置比较靠前的物品交互,因此在推荐列表中用户和物品的交互不仅由用户的兴趣决定,还很大程度上由物品的排名决定。相关研究表明,用户在垂直展示的列表中,更倾向于点击排名靠前的物品,而忽略排名靠后的物品。
Selection bias
Berkson悖论:相互独立的两个变量,在给定第三个变量的条件下,可能不是条件独立的。
选择性偏差指的是在研究过程中因样本选择的非随机性而导致得到的结论存在偏差,包括自选择偏差(self-selection bias)和样本选择偏差(sample-selection bias),我们主要讨论后者。
样本选择偏差是指样本选择不是随机的,使样本不能反映总体的某些特征,从而使估计量产生偏差。
例子:
- 在大学中开展社会调查,实际上是condition on受访者上过大学
- 使用某个在线网站上的数据做分析,实际上是condition on用户会访问该网站
- 分析从战场返回的战斗机上的弹孔位置,实际上是condition on飞机没有被击落
如果样本的选择过程依赖了某个变量(是否上过大学/是否会访问该网站),而这个变量恰好是你关注的的变量的共同结果,则会导致选择性偏差。
解决:数据填充(Data Imputation);倾向分数等。
Selection bias研究现状:
ESMM
介绍
ESMM,有效解决了真实场景中CVR预估面临的数据稀疏以及样本选择偏差这两个关键问题。不同于CTR预估问题,CVR预估面临两个关键问题:
- Sample Selection Bias (SSB) 转化是在点击之后才“有可能”发生的动作,传统CVR模型通常以点击数据为训练集,其中点击未转化为负例,点击并转化为正例。但是训练好的模型实际使用时,则是对整个空间的样本进行预估,而非只对点击样本进行预估。即是说,训练数据与实际要预测的数据来自不同分布,这个偏差对模型的泛化能力构成了很大挑战。
- Data Sparsity (DS) 作为CVR训练数据的点击样本远小于CTR预估训练使用的曝光样本。
先阐述三个概念:
- CTCVR:**“item被点击,然后被转化”**的概率
- CVR:**“假设item被点击,那么它被转化”**的概率
- CTR:**“item被点击”**的概率
很显然,这三个是有条件关系:
其中 , 分别表示conversion转化和click点击。注意到,在全部样本空间中,CTR对应的label为click,而CTCVR对应的label为click & conversion,这两个任务是可以使用全部样本的。所以ESMM做了通过这学习两个任务,再根据上式隐式地学习CVR任务。这样,就不会产生“有偏差的样本选择”问题了。
原理:

-
共享Embedding :CVR-task和CTR-task使用相同的特征和特征embedding,即两者从Concatenate之后才学习各自部分独享的参数;
-
隐式学习pCVR :这里pCVR(粉色节点)仅是网络中的一个variable,没有显示的监督信号。
具体地,反映在目标函数中:
即利用CTCVR和CTR的监督信息来训练网络,隐式地学习CVR,这正是ESMM的精华所在。
再思考下,ESMM的结构是基于“乘”的关系设计——,是不是也可以通过“除”的关系得到,即 ?例如分别训练一个CTCVR和CTR模型,然后相除得到,其实也是可以的,但这有个明显的缺点:真实场景预测出来的pCTR、pCTCVR值都比较小,“除”的方式容易造成数值上的不稳定。
总结:
ESMM模型的特别之处在于我们额外**关注了任务的Label域信息,通过展现>点击>购买所构成的行为链,巧妙地构建了multi-target概率连乘通路。**传统MTL中多个task大都是隐式地共享信息、任务本身独立建模,ESMM细腻地捕捉了契合领域问题的任务间显式关系,从feature到label全面利用起来。
Propensity scores
倾向评分(propensity score,PPS)这一概念最早出现在1983年rosenbaum与rubin合写的一篇名为《倾向评分对于观察研究中因果效应的中心作用》的论文中。2010年之后,这一方法日益受到人们的关注。国际上越来越多的研究者将倾向性评分法应用到流行病学、健康服务研究、经济学以及社会科学等许多领域。
在推荐系统中,推荐可以视为类似于用特定药物治疗患者的干预措施。在这两个任务中,我们只知道某些患者(User)从某些治疗(Item)中获益的程度,而大多数患者治疗(user-item)的结果却不被观察到。对于这两个任务,一个很有效的策略是用相反的倾向分数加权(inverse propensity scores)观察结果。
metricATOP
Steck等人提出的无偏的metricATOP来评估推荐性能,它有两个假设:
- 相关(高)ratings值在观察数据中随机缺失;
- 对于其他rating值,我们允许任意缺失数据机制,只要它们以高于相关rating值的概率丢失。
Propensity scores和ATOP是弥补Selection Bias的两种策略,但它们仍然有两个弱点。基于IPS的估计器的无偏性只有在真实倾向可用的情况下才能得到保证。如果不正确地指定倾向性,IPS估计量仍然是有偏的。只有当这两个假设成立时,才能保证ATOP的无偏性。在实践中,缺失机制往往很复杂,假设并不总是有效的。开发一个强大而有效的系统仍然是一个挑战。
(这部分先To be continued…)
可能的解决方法:
为了解决“Sample Selection Bias”问题,在召回或者粗排模型训练的时候,应该调整下负例的选择策略,使得它尽量能够和模型输入的数据分布保持一致。可能的做法:
-
曝光未点击数据
这就是上面说的导致Sample Selection Bias问题的原因。我们的经验是,这个数据还是需要的,只是要和其它类型的负例选择方法,按照一定比例进行混合,来缓解Sample Selection Bias问题。当然,有些结论貌似是不用这个数据,所以用还是不用,可能跟应用场景有关。
-
全局随机选择负例
就是说在原始的全局物料库里,随机抽取做为召回或者粗排的负例。这也是一种做法,Youtube DNN双塔模型就是这么做的。从道理上讲,这个肯定是完全符合输入数据的分布一致性的,但是,一般这么选择的负例,因为和正例差异太大,导致模型太好区分正例和负例,所以模型能学到多少知识是成问题的。
-
Batch内随机选择负例
只包含正例,训练的时候,在Batch内,选择除了正例之外的其它Item,做为负例。这个本质上是:给定用户,在所有其它用户的正例里进行随机选择,构造负例。它在一定程度上,也可以解决Sample Selection Bias问题。比如Google的双塔召回模型,就是用的这种负例方法。
-
曝光数据随机选择负例
在给所有用户曝光的数据里,随机选择做为负例。
-
基于Popularity随机选择负例
这种方法的做法是:全局随机选择,但是越是流行的Item,越大概率会被选择作为负例。目前不少研究证明了,负例采取Popularity-based方法,对于效果有明显的正面影响。它隐含的假设是:如果一个例子越流行,那么它没有被用户点过看过,说明更大概率,对当前的用户来说,它是一个真实的负例。同时,这种方法还会打压流行Item,增加模型个性化程度。
-
基于Hard选择负例
它是选择那些比较难的例子,做为负例。因为难区分的例子,很明显给模型带来的loss和信息含量比价多,所以从道理上讲是很合理的。但是怎样算是难的例子,可能有不同的做法,有些还跟应用有关。比如Airbnb,还有不少工作,都是在想办法筛选Hard负例上。
参考:
[1] 选择性偏差(selection bias)指的是什么
[4] Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate