论文《Causal Inference for Recommender Systems》阅读

论文《Causal Inference for Recommender Systems》阅读

  • 论文概况
  • 论文动机(Introduction)
  • Methodology
    • Preliminaries
    • Classical Causal Inference & Causal Adjustment
    • Deconfounded Recommender
  • 总结

论文概况

今天给大家带来的是发表在推荐系统顶会 RecSys 2020 上的文章《Causal Inference for Recommender Systems》,文章聚焦 推荐系统中 曝光 (exposure) 和 评分(rating)之间的偏差问题,通过因果推断,完成了模型 Deconfounded Recommder

论文动机(Introduction)

在 Intro 部分,作者着重强调了当前主流推荐系统的不合理的地方,即
推荐系统推荐的核心是:用户看了电影以后会如何评分? 但这实际上是不经济不合理的,因为实际上应该给用户推荐的是用户没看过但是想去看的物品。

作者形象地将这一问题比喻为临床试验,相当于随机地给患者(用户)进行诊断(电影的曝光),然后要求患者对诊断给出反应(评分)。

这一现象的核心在于,一般用户看电影是有目的去看的,那么根据用户看过的电影的评分去判断用户喜好这一行为本身就是存在bias的。驱使用户去看某一点用的出发点,可能是电影导演,可能是电影类型,更多情况下,可能是没法儿测量的。

针对上述问题,作者提出了 deconfounded recommender模型,基于矩阵分解模型去除 unobserved confounder 。作者首先将作者对物品的交互分成两步:(1)曝光 exposure;(2)评分 rating。
由于用户只能对看过的电影进行打分,即评分这一行为是有偏的,这一行为将 exposure 和 rating 耦合在一起。后续的操作也是根据这两个步骤具体进行操作的。

Methodology

Preliminaries

作者使用 a u i a_{ui} aui 作者是否用户对物品进行了评分, y u i ( 1 ) y_{ui}(1) yui(1) 用于表示 用户 u u u 在看过 电影 i i i 的情况下给出的评分( y u i ( 1 ) ≠ 0 y_{ui}(1) \neq 0 yui(1)=0 当且仅当 用户看过之后且进行了评分)。 y u i ( 0 ) y_{ui}(0) yui(0) 表示用户 u u u 没看过电影 i i i(一般情况下, y u i ( 0 ) = 0 y_{ui}(0) = 0 yui(0)=0 )。

作者将数据集分成两部分:
(一)曝光数据集(binary,非0即1),具体形式表现为: { a u i , u = 1 , 2 , ⋯ , U , i = 1 , 2 , ⋯ , I } \{a_{ui}, u = 1, 2, \cdots, U, i=1, 2, \cdots, I\} {aui,u=1,2,,U,i=1,2,,I} 用于表示用户是否看过电影。
(二)评分数据集,具体为 { y u i f o r ( u , i ) s u c h t h a t a u i = 1 } \{y_{ui} \ for (u, i)\ \mathrm{such\ that \ a_{ui} = 1 } \} {yui for(u,i) such that aui=1}

推荐系统预测目标应该为 针对 a u i = 0 a_{ui} = 0 aui=0 ( u , i ) (u,i) (u,i),预测 y u i ( 1 ) y_{ui}(1) yui(1) 并推荐影片。即给未交互用户物品对预测评分。

针对上述目标,给出对应的矩阵分解模型如下:
y u i ( a ) = θ u ⊤ β i ⋅ a + ϵ u i , ϵ u i N ( 0 , σ 2 ) , (1) y_{ui}(a) = \boldsymbol{\theta}_u^\top \boldsymbol{\beta}_i \cdot a + \epsilon_{ui}, \qquad \epsilon_{ui} ~ \mathcal{N}(0, \sigma^2), \tag{1} yui(a)=θuβia+ϵui,ϵui N(0,σ2),(1)
a = 1 a=1 a=1,均值为 θ u ⊤ β i \boldsymbol{\theta}_u^\top \boldsymbol{\beta}_i θuβi。当 a = 0 a=0 a=0,分布为标准正态分布。

Classical Causal Inference & Causal Adjustment

作者这里提出一个 Ignorability(可忽略性?不知道怎么翻比较合适),要求对于任意用户 u u u,满足 { y u ( 0 ) , y u ( 0 ) } ⊥ ⁣ ⁣ ⁣ ⁣ ⊥ a u \{\mathbf{y}_{u}(0), \mathbf{y}_{u}(0)\} \perp\!\!\!\! \perp \mathbf{a}_{u} {yu(0),yu(0)}au,其中, y u ( a ) = ( y u 1 ( a ) , y u 2 ( a ) , ⋯ , y u I ( a ) ) \mathbf{y}_{u}(a)=( y_{u1}(a), y_{u2}(a), \cdots, y_{uI}(a) ) yu(a)=(yu1(a),yu2(a),,yuI(a))
a u = ( a u 1 , a u 2 , ⋯ , a u I ) \mathbf{a}_{u} = (a_{u1}, a_{u2}, \cdots, a_{uI}) au=(au1,au2,,auI)

上述要求即保证电影 i i i 是否 曝光给 用户 u u u,用户给出的对应评分都应与用户的观影历史无关。

矩阵分解一类的方法显然是无法做到的。

那么如何去偏呢?作者给出方案,假设我们得到一个针对每个用户的confounder w u \mathbf{w}_u wu,那么就可以满足 { y u ( 0 ) , y u ( 0 ) } ⊥ ⁣ ⁣ ⁣ ⁣ ⊥ a u ∣ w u \{\mathbf{y}_{u}(0), \mathbf{y}_{u}(0)\} \perp\!\!\!\! \perp \mathbf{a}_{u} \mid \mathbf{w}_u {yu(0),yu(0)}auwu。对于预测,则相应改为下式:
y u i ( a ) = θ u ⊤ β i ⋅ a + η ⊤ w u + ϵ u i , ϵ u i N ( 0 , σ 2 ) , (2) y_{ui}(a) = \boldsymbol{\theta}_u^\top \boldsymbol{\beta}_i \cdot a + \boldsymbol{\eta}^{\top}\mathbf{w}_u + \epsilon_{ui}, \quad \epsilon_{ui} ~ \mathcal{N}(0, \sigma^2), \tag{2} yui(a)=θuβia+ηwu+ϵui,ϵui N(0,σ2),(2)

这一过程需要得到所有用户的 confounder w u \mathbf{w}_u wu,这显示是做不到的。

Deconfounded Recommender

由上面的内容,作者提出了 去混淆推荐模型 (Deconfounded Recommender, DCR)。

作者利用 曝光 数据计算 不可观测的 Confounder w u \mathbf{w}_u wu
这一过程被称为 多重因果推理 (multiple causal inference)。假设对于用户 u u u 对 任意物品 i ∈ I i \in I iI 的曝光数据 a u i a_{ui} aui 作为一个 treatment,那么针对一个用户,就包含 I I I 个 treatment。 y u ( 1 ) \mathbf{y}_{u}(1) yu(1) 作为输出,是一个 I I I 维向量,只有部分评分数据能够观测。因此,作者利用 泊松分解(Poisson Factorization, PF)拟合 曝光数据,并填补空白数据,用于去掉bias。具体如下:
a u i ∣ π u , λ i ∼ Poisson ⁡ ( π u ⊤ λ i ) , ∀ u , i , (3) a_{u i} \mid \pi_u, \lambda_i \sim \operatorname{Poisson}\left(\pi_u^{\top} \lambda_i\right), \forall u, i,\tag{3} auiπu,λiPoisson(πuλi),u,i,(3)
其中, π u ∼ i i d Gamma ⁡ ( c 1 , c 2 ) and  λ i ∼ iid  Gamma ⁡ ( c 3 , c 4 ) \pi_u \stackrel{i i d}{\sim} \operatorname{Gamma}\left(c_1, c_2\right) \text { and } \lambda_i \stackrel{\text { iid }}{\sim} \operatorname{Gamma}\left(c_3, c_4\right) πuiidGamma(c1,c2) and λi iid Gamma(c3,c4),即拟合数据得到由 π u \pi_u πu λ i \lambda_i λi 控制的泊松分布曲线。根据曲线,就可以计算得到符合分布的重新计算的曝光矩阵 a ^ \hat{\mathbf{a}} a^,如下所示:
a ^ u i = E P F [ π u ⊤ λ i ∣ a ] . (4) \hat{a}_{u i}=\mathbb{E}_{\mathrm{PF}}\left[\pi_u^{\top} \lambda_i \mid a\right].\tag{4} a^ui=EPF[πuλia].(4)

将补充得到的去偏的评分数据 a ^ \hat{\mathbf{a}} a^ 融入PMF模型,得到新的预测函数如下:
y u i ( a ) = θ u ⊤ β i ⋅ a + γ u ⋅ a ^ u i + ϵ u i , ϵ u i ∼ N ( 0 , σ 2 ) , (5) y_{u i}(a)=\theta_u^{\top} \beta_i \cdot a+\gamma_u \cdot \hat{a}_{u i}+\epsilon_{u i}, \quad \epsilon_{u i} \sim \mathcal{N}\left(0, \sigma^2\right), \tag{5} yui(a)=θuβia+γua^ui+ϵui,ϵuiN(0,σ2),(5)
这里, γ u \gamma_u γu 是 用户 u u u 混淆因子 的 宏参系数。

进一步地,在PMF的基础上,作者重新设计outcome函数如下:
y u i ( a ) ∼ p ( ⋅ ∣ m ( θ u ⊤ β i , a ) , v ( θ u ⊤ β i , a ) ) , y_{u i}(a) \sim p\left(\cdot \mid m\left(\theta_u^{\top} \beta_i, a\right), v\left(\theta_u^{\top} \beta_i, a\right)\right), yui(a)p(m(θuβi,a),v(θuβi,a)),
其中, m ( θ u ⊤ β i , a ) m\left(\theta_u^{\top} \beta_i, a\right) m(θuβi,a)表示均值, v ( θ u ⊤ β i , a ) v\left(\theta_u^{\top} \beta_i, a \right) v(θuβi,a)表示方差。
上式可以改成多种形式,包括概率分布形式,weighted MF,PMF等。

具体地,作者使用下式作为主要的 output 函数:
y u i ( a ) ∼ p ( ⋅ ∣ m ( θ u ⊤ β i , a ) + γ u a ^ u i + β 0 , v ( θ u ⊤ β i , a ) ) . y_{u i}(a) \sim p\left(\cdot \mid m\left(\theta_u^{\top} \beta_i, a\right)+\gamma_u \hat{a}_{u i}+\beta_0, v\left(\theta_u^{\top} \beta_i, a\right)\right) . yui(a)p(m(θuβi,a)+γua^ui+β0,v(θuβi,a)).

函数整体流程如算法所示:
Algorithm

总结

本文从 反事实推理 的角度出发,通过将 exposure 和 rating 进行区分,将推荐系统中基于矩阵分解的 explicit rating 模型进行了优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/19943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac上Steam安装的游戏已经卸载,但游戏的快捷方式图标仍存在的解决方式

通过终端打开Applications文件夹 打开终端(Terminal)输入以下内容并回车。 open ~/Applications 以上实际上打开的是 /Users/改为你的用户名/Applications 文件夹下的内容。 因此也可以通过打开访达(Finder),前往文件…

Anaconda使用问题汇总

1. shell初始化失败 1.1. 现象 一般当我们首次使用conda命令的时候会出现下面的错误&#xff1a; CommandNotFoundError: Your shell has not been properly configured to use conda activate. To initialize your shell, run$ conda init <SHELL_NAME>Currently sup…

使用Spring Boot自定义注解 + AOP实现基于IP的接口限流和黑白名单

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

(delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)

13.6.2 嵌套的Finally代码块 ​ Finally代码块可能是确保程序安全最重要、最常用的技术。我不认为这是一个高级话题&#xff0c;但你是否在所有地方都使用了 finally&#xff1f;在边界情况下&#xff0c;例如嵌套操作中&#xff0c;你是否正确使用了finally&#xff0c;还是在…

IDEA启动jsp项目

1、背景 有个老项目的前端需要修改&#xff0c;整来源码之后发现是比较古老的jsp项目&#xff0c;需要在idea中启动下试试 2、代码配置流程 常规的配置流程网上都有 2.1 首先找到Project Structure 2.2 配置web.xml 注意下方的 web resource directory, web.xml中的写的相对…

Markdown 使用技巧之利用 Mermaid 进行绘制流程图

文章目录 前言一、基础语法1.1 声明图像类型1.2 声明排列方向1.3 声明节点1.4 声明节点形状1.5 声明节点间的连接1.5.1 基本连接线1.5.2 调整链接的长度1.5.3 调整链接的样式二、流程图-进阶使用2.1 自定义节点样式2.2 自定义形状大小2.3 自定义链接样式2.4 视图分组三、使用场…

【代码随想录算法训练营第37期 第二十四天 | LeetCode77. 组合】

代码随想录算法训练营第37期 第二十四天 | LeetCode77. 组合 一、77. 组合 解题代码C&#xff1a; class Solution { private:vector<vector<int>> result;vector<int> path;void backtracking(int n, int k, int startIndex){if(path.size() k){result.p…

校园安保巡逻机器人

2023年8月5日&#xff0c;陕西西安一高校实验室起火冒烟&#xff0c;导致学校化学实验室发生火灾。2022年8月3日&#xff0c;一名歹徒持械闯入江西吉安安福县城的一家私立幼儿园&#xff0c;对着无辜的幼儿行凶伤人&#xff0c;造成3死6伤。 像这样的事故有不断地发生&#xf…

Flutter 中的 DividerTheme 小部件:全面指南

Flutter 中的 DividerTheme 小部件&#xff1a;全面指南 Flutter 是一个功能强大的 UI 框架&#xff0c;由 Google 开发&#xff0c;允许开发者使用 Dart 语言来构建跨平台的移动、Web 和桌面应用。在 Flutter 的丰富组件库中&#xff0c;DividerTheme 是一个专门用于定义应用…

代码随想录leetcode200题之贪心算法

目录 1 介绍2 训练3 参考 1 介绍 本博客用来记录代码随想录leetcode200题之贪心算法相关题目。 2 训练 题目1&#xff1a;455. 分发饼干 C代码如下&#xff0c; class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {s…

161.二叉树:在每个树中找最大值(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

Kong网关代理MQTT的两种方法

我的前一篇文章&#xff0c;是关于Kong网关实现TCP流代理的方法。使用的目前最新版本的Kong网关软件&#xff0c;新版自带 Kong Manager UI界面。但2.*版本没有提供 UI界面&#xff0c;如果实现TCP流代理。有两种方法&#xff0c;一种是使用第三方 konga 的UI界面来操作&#x…

C语言王国——杨氏矩阵

目录 1. 引言 2. 了解杨氏矩阵 3. 思路分析 4. 代码 5. 总结 1. 引言 最近在做二维数组的训练的时候发现了一个很有意思的题&#xff1a; 一看这不是杨氏矩阵嘛&#xff0c;接下来就由姜糖我带大家了解一下这个著名的矩阵。 2. 了解杨氏矩阵 通过查阅百度得知&#xff1a; …

python数据分析——datetime数据类型1

参考资料&#xff1a;活用pandas库 1、python的datetime对象 # 导入datetime对象 from datetime import datetime# 获取当前日期和时间 nowdatetime.now() print(now)# 手动创建datetime t1datetime.now() t2datetime(1970,1,1) # 对datetime做数学运算 difft1-t2 print(diff…

儿童节快乐!探索图形化编程桌面的“童年”成长之路

在这个充满童真与快乐的儿童节&#xff0c;我要向在CSDN平台上努力拼搏的每一位朋友&#xff0c;送上我最热切、最深情的祝福&#xff01;愿你们心中那份孩童般的纯真与对世界无尽的好奇永不褪色&#xff0c;愿你们的人生道路如同这个美好的节日&#xff0c;流光溢彩、欢乐永恒…

lynis安全漏洞扫描工具

Lynis是一款Unix系统的安全审计以及加固工具&#xff0c;能够进行深层次的安全扫描&#xff0c;其目的是检测潜在的时间并对未来的系统加固提供建议。这款软件会扫描一般系统信息&#xff0c;脆弱软件包以及潜在的错误配置。 安装 方式1 git下载使用git clone https://github…

华为校招机试 - 字符串解析(20240515)

题目描述 已知存在某种字符串解析语法,其中的语法元素如下 N:用于匹配单个数字(0-9)A:用于匹配单个字母(a-z,A-Z)n():用于表示一个分组,分组中至少有一个N语法元素或者A语法元素,n为个数值,表示匹配 n 次,1 ≤ n ≤ 200 输入给定的解析语法和目标字符串,要求从中…

docker compose完成简单项目部署

1. 项目环境 centos7 docker mysql redis ruoyi项目 ruoyi项目链接&#xff1a;https://gitee.com/y_project/RuoYi-Vue.git 2. 进行项目前后端代码打包 后端打包&#xff1a; 修改mysql连接的相关配置文件 RuoYi-Vue/ruoyi-admin/src/main/resources/application-dru…

浙江零排参加全国水科技大会暨技术装备成果展览会(成都)并作主论坛演讲

2024年5月13日-15日中华环保联合会、福州大学、上海大学等联合举办的2024年全国水科技大会暨技术装备成果展览会在成都顺利举办。浙江零排城乡规划发展有限公司司受邀参加&#xff0c;首日有幸听取徐祖信院士、任洪强院士、汪华林院士等嘉宾的主旨报告。主旨报告后&#xff0c;…

Java过滤特殊空格nbsp;

现象&#xff1a; 用Java处理excel文件中的以下字符串时&#xff0c;想去除此空格&#xff0c;却发现用String.trim()没有直到预期效果&#xff1a; 原因&#xff1a; 在网上找了下&#xff0c;应该是这其实是html中经常使用的一种特殊空格字符&nbsp&#xff1b; 处理&a…