因果推断推荐系统工具箱 - CausCF: Causal Collaborative Filtering for Recommendation Effect Estimation(一)

文章名称

【CIKM-2021】CausCF: Causal Collaborative Filtering for Recommendation Effect Estimation

核心要点

通常我们都希望推荐系统能够更高效的推荐物品,但是高效率如何界定?文章作者认为最高效的物品是能够提高营收概率的物品(因为用户喜欢才会买,同时平台也因此而得到利润)。然而,推荐天然存在因果推断的根本问题(未被推荐的物品的效果是缺失的,并且存在混淆变量)。因此,之前的很多方法采用随机实验的方式来进行解决这一问题,但随机实验会严重影响用户体验,且效率低下。作者通过扩展协同过滤方法,提出CausCF,把原有的矩阵分解拓展为张量分解。最终,利用断点回归分析的方法进行离线验证。

方法细节

问题引入

在通常的推荐场景中,并没有考虑推荐策略对物品购买(或点击)概率的提升的影响,这样的推荐结果并不能为平台带来利润上的提升。因此,需要从购买概率提升的角度来评估user-item对(因为有些物品不推送,也会被这个用户买)。之前因果推断应用于推荐系统的文章更多的是对结果进行纠偏,因为偏差会影响推荐模型的性能。而这篇文更着重于计算user-item对的causal effect(可以理解为,之前主要解决因果推断基本问题里的分布存在偏差的问题,而本这篇文章是解决missing counterfactual的问题)。
虽然,有一些方法[1], [2]利用uplift-based optimization来优化排序列表,但这些方法仍存在缺陷。比如,1)不能够利用协同过滤的信息;2) 通常不区分用户侧和物品侧的causal effect;3)通常利用RCT来评估方法,比较低效。

具体做法

问题定义

我们定义被研究的个体为用户-物品元组(也就是用户和物品的笛卡尔积),其pre-treatment变量(干预前变量)包括用户的属性特征以及物品的描述信息等,用X = x表示,即给定的用户-物品元组的用户属性和物品属性可以被抽象为随机变量(向量)x

定义treatment为推荐系统是否对某个用户曝光指定物品,即X = x的是否被曝光,用随机变量T \in \{0,1 \}表示。可以看出作者定义的因果推断场景是一个binary treatment的场景,可以利用传统的potential outcome框架进行估计。

定义potential outcome为对某个用户曝光指定物品和不曝光指定物品下,该用户购买该物品的概率(purchase probability),用Y(T=1)Y(T=0)表示,其中0代表没有曝光。由于我们的causal effect(因果效应)是对于个人而言的,也就是ITE,所以个人维度的potential outcome被定义为Y(T=t|X=x)Causal effect表示为ITE(x) = Y(T=1|X=x) - Y(T=0|X=x),即在给定用户-物品元组的情况下,曝光这个元组的推荐项,相比于不曝光,带来的用户对该物品的购买概率的提升量

同其他研究因果推断的方法一样,文章要求满足SUTVA,Positivity以及Ignorability。也就是causal effect在个体之间是稳定的(个体之间不会互相交流,没有网络效应,个体多次受到同样的treatment因果效应不变),并且每个用户-物品元组都有被曝光的概率,给定用户-物品元组(pre-treatment变量)的情况下,曝光与否的potential outcome(潜在购买概率)和曝光的分配机制无关。

协同过滤方法

过去这些年协同过滤方在推荐算法领域去的了成功,并不断进化。协同过滤方法大致可以被分为两类1)基于NN的方法,考虑的是如何计算用户和物品是否相似,2)基于隐变量(隐向量空间)的方法,重点是学习用户和物品的在同一个空间中的向量表示。文章主要基于第二种方法中的矩阵分解方法,该方法可以被形式化为如下图所示的公式。

latent factor model

其中,\hat{y}_{u,i}表示用户u对物品i的评分,p_u \in R^, q_i \in R^分别表示用户和物品在共同的隐向量空间中的向量表示,矩阵分解方法的目的是通过重构一致的用户-物品评分矩阵中的值,来学习p_u \in R^, q_i \in R^,进而对未知的评分进行预测。

因果协同过滤

如上所述,文章主要解决的问题是估计“因推荐而带来的用户购买某物品的概率提升”。作者解释假设,兴趣相似的用户或类似物品的推荐(干预)带来的因果效应是相似,因此协同过滤的相似思想可以帮助更好的进行因果效应的估计。作者把矩阵分解(分解的是评分矩阵R = [y_{u,i,t}],其实这里应该叫购买矩阵)泛化到3个维度(用户m,物品n,是否曝光l),变为张量分解。由于用户可以通过推荐的曝光点击来购买物品,也可以通过其他方式来直接购买物品(比如直接搜索对应物品),因此“是否曝光”这个维度中,未曝光的数据可以由非推荐消费量来当做评分矩阵R的值。这样推荐中的因果推断问题被转化为如何进行张量分解并估算缺失值。假设用户、物品、干预的隐向量矩阵分别为\mathbb{P} = [p_u], \mathbb{Q} = [q_i], \mathbb{D} = [d_t],维度分别m \times k, n \times k, l \times kk表示隐向量的长度。评分(购买)矩阵可以用如下图所示公式表示(和估计)。

rating matrix factorization

其中,p_u = f(x_u), q_i = g(x_i), d_t = h(t)分别表示单独一个用户、物品和干预的隐向量表示,f(\cdot), g(\cdot),h(\cdot)分别表示从原始输入(文章中采用one-hot的形式,可以是各种常用的推荐系统离散特征或连续特征的表示形式)到用户隐变量的映射函数,这些函数的选择很多,可以是不同的深度神经网络,循环神经网络或者是图神经网络(推荐模型已经玩的不能在花了,所以根据场景选择就好)。作者采用的f, g是简单的神经网络,h是embedding查询函数(就是直接从one-hot映射到隐向量),目的是简单有效,计算速度快。

作者强调从因果腿短的角度,1)第一部分表示了用户对物品的偏好,是影响potential outcome的主要因素;2)第二部分是用户和曝光的交互,是用户特质决定的causal effect的部分(个人感觉可以理解为,把用户特质看作confounder,它引起的causal effect体现在了这个部分);3)同理,第三部分是物品对causal effect的影响。从计算速度角度,由于只进行了二阶交叉,所以速度快(感觉也可以利用高阶交叉学习更复杂的特征,具体看场景),整个的模型框架如下图所示。

causCF framework

到这里,我们已经讲述了问题的定义和如何建模,下一节,我们继续讲解如何进行训练和估计。另外,文章的亮点采用RDD离线评估因果效应的估计准确度,也在下节讲解。

心得体会

推荐收入

其实,这篇文章更偏向于电商推荐的场景,是有实际GMV收益可衡量的,因此可以更顺理成章的应用causal inference提升ROI的这个用途。其他推荐场景,如内容推荐等,也可以构造出这样的收益评估指标。只是看侧重是消除偏差以带来更准的指标估计,还是要估计某个推荐行为对指标的提升。

关于绝对量和提升量

虽然从因果推断和商业化投入的角度来说,我们更应该关注ROI。但是有些物品的原始购买率(绝对值)比较低,如5%,即便用因果推断的方法提升了购买率到10%,ROI很大,但是如果这个购买率10%的物品,要挤占一个本来购买率(绝对值)为90%,但提升量只有相对5%的物品的曝光资源。这仍然是需要权衡的。
涉及到如何构建treatment和effect。假设,我们要提升的是某一次推荐(曝光资源只有一次)用户购买物品的概率。那么,我们比较的是同一个user,对其曝光所有item的其中一个的情况下,购买率的相对提升。treatment是某个物品,outcome是这一次推荐购买某个物品的概率。
而这篇文章的角度似乎没有考虑曝光资源的问题,而是期望,每一次曝光都能有购买率的提升。即便购买率的绝对值可能仍然很低。考虑到是对某一个物品,要不要推荐给某一个用户。是从物品被购买概率的角度来说的。

你可能感兴趣的:(因果推断推荐系统工具箱 - CausCF: Causal Collaborative Filtering for Recommendation Effect Estimation(一))