逆向倾向评分 (Inverse Propensity Scoring, IPS) 原理解析与MF算法的结合使用
当历史交互数据为MCAR(Missing Completely At Random,完全随机缺失)时,评级预测损失函数可以定义为:
LossNaive=1∣{(u,i):ou,i=1}∣∑(u,i):ou,i=1δu,i(Y,Y^)\mathcal{Loss}_{Naive}=\frac{1}{|\{(u,i):o_{u,i}=1\}|}\sum_{(u,i):o_{u,i}=1}\delta_{u,i}(Y,\hat{Y})LossNaive=∣{(u,i):ou,i=1}∣1(u,i):ou,i=1∑δu,i(Y,Y^)其中,Y^\hat{Y}Y^表示预测的评级;YYY 表示 uuu 对 iii 的实际评级;ou,i=1o_{u,i}=1ou,i=1 表示 uuu 对 iii 有评级;∣{(u,i):ou,i=1}∣|\{(u,i):o_{u,i}=1\}|∣{(u,i):ou,i=1}∣ 表示所有被浏览项目的数量;δu,i(Y,Y^)\delta_{u,i}(Y,\hat{Y})δu,i(Y,Y^) 表示 YYY 与 Y^\hat{Y}Y^ 之间匹配程度的度量,可以定义为:δu,iMSE(Y,Y^)=(yu,i−y^u,i)2\delta^{MSE}_{u,i}(Y,\hat{Y})=(y_{u,i}-\hat{y}_{u,i})^2δu,iMSE(Y,Y^)=(yu,i−y^u,i)2δu,iMAE(Y,Y^)=∣yu,i−y^u,i∣\delta^{MAE}_{u,i}(Y,\hat{Y})=|y_{u,i}-\hat{y}_{u,i}|δu,iMAE(Y,Y^)=∣yu,i−y^u,i∣
但是历史记录往往是MNAR(Missing Not At Random,非随机缺失)的,那么整体评级预测损失就是有偏的:E[LossNaive]=1∑u=1N∑i=1Mp(ou,i=1)∑u=1N∑i=1Mp(ou,i=1)δu,i(Y,Y^)≠1N⋅M∑u=1N∑i=1Mδu,i(Y,Y^)\begin{aligned} \mathbb{E}[\mathcal{Loss}_{Naive}] & = \frac{1}{\sum^{N}_{u=1}\sum^{M}_{i=1}p(o_{u,i}=1)}\sum^{N}_{u=1}\sum^{M}_{i=1}p(o_{u,i}=1)\delta_{u,i}(Y,\hat{Y}) \\ & \neq \frac{1}{N\cdot M}\sum^{N}_{u=1}\sum^{M}_{i=1}\delta_{u,i}(Y,\hat{Y}) \\ \end{aligned}E[LossNaive]=∑u=1N∑i=1Mp(ou,i=1)1u=1∑Ni=1∑Mp(ou,i=1)δu,i(Y,Y^)=N⋅M1u=1∑Ni=1∑Mδu,i(Y,Y^)其中,p(ou,i=1)p(o_{u,i}=1)p(ou,i=1) 是指 uuu 浏览 iii 的概率;1N⋅M∑u=1N∑i=1Mδu,i(Y,Y^)\frac{1}{N\cdot M}\sum^{N}_{u=1}\sum^{M}_{i=1}\delta_{u,i}(Y,\hat{Y})N⋅M1∑u=1N∑i=1Mδu,i(Y,Y^) 指的是所有 uuu 对所有 iii 平均评分损失,它是一种算术平均;E[LossNaive]\mathbb{E}[\mathcal{Loss}_{Naive}]E[LossNaive]指的是被浏览的 iii 的期望评分损失,它是一种加权平均。
加权平均是有偏的,它的偏差就来自于给不同自变量分配的权值,在推荐任务中,这个权值指的就是物品被观测(浏览)到的概率。一种减轻MNAR反馈中偏差的影响的IPS估计法这样定义评级预测损失函数:LossIPS=1N⋅M∑(u,i):ou,i=1δ(Y,Y^)p(ou,i=1)\mathcal{Loss}_{IPS}=\frac{1}{N\cdot M}\sum_{(u,i):o_{u,i}=1}\frac{\delta(Y,\hat{Y})}{p(o_{u,i}=1)}LossIPS=N⋅M1(u,i):ou,i=1∑p(ou,i=1)δ(Y,Y^)该公式的思想是消除权值(浏览概率)的影响,于是就有了无偏估计的公式:E[LossIPS]=1N⋅M∑u=1N∑i=1Mp(ou,i=1)δu,i(Y,Y^)p(ou,i=1)=1N⋅M∑u=1N∑i=1Mδu,i(Y,Y^)\begin{aligned} \mathbb{E}[\mathcal{Loss}_{IPS}] & = \frac{1}{N\cdot M}\sum^{N}_{u=1}\sum^{M}_{i=1}\frac{p(o_{u,i}=1)\delta_{u,i}(Y,\hat{Y})}{p(o_{u,i}=1)} \\ & = \frac{1}{N\cdot M}\sum^{N}_{u=1}\sum^{M}_{i=1}\delta_{u,i}(Y,\hat{Y}) \\ \end{aligned}E[LossIPS]=N⋅M1u=1∑Ni=1∑Mp(ou,i=1)p(ou,i=1)δu,i(Y,Y^)=N⋅M1u=1∑Ni=1∑Mδu,i(Y,Y^)注意到,LossIPS\mathcal{Loss}_{IPS}LossIPS 与 LossNaive\mathcal{Loss}_{Naive}LossNaive 的区别不仅仅在于消除权值,而且 LossIPS\mathcal{Loss}_{IPS}LossIPS 是整体的损失,而 LossNaive\mathcal{Loss}_{Naive}LossNaive 是浏览过的项目的损失。
所以要使这个公式真正起作用,必须知道全部项目的 p(ou,i=1)p(o_{u,i}=1)p(ou,i=1) 的具体值。在实际的应用中,历史交互数据中记录了部分评级数据,因此可以利用某种拟合方法来推断 p(ou,i=1)p(o_{u,i}=1)p(ou,i=1) 的模型,例如:
- 通过朴素贝叶斯进行倾向估计
p(ou,i=1∣yu,i=r)=p(y=r∣o=1)p(o=1)p(y=r)p(o_{u,i}=1|y_{u,i}=r)=\frac{p(y=r|o=1)p(o=1)}{p(y=r)}p(ou,i=1∣yu,i=r)=p(y=r)p(y=r∣o=1)p(o=1)其中 p(y=r∣o=1)p(y=r|o=1)p(y=r∣o=1) 和 p(o=1)p(o=1)p(o=1) 是通过MNAR数据集中的历史交互数据统计出来的。p(y=r)p(y=r)p(y=r) 是从一个MCAR数据集获取的,这样就能计算出MCAR的p(o(u,i)=1∣y(u,i)=r)p(o_{(u,i)}=1| y_{(u,i)}=r)p(o(u,i)=1∣y(u,i)=r)。这种方法必须要确保有部分可用的MCAR数据。并且它只能拟合出被评分过项目的浏览概率。 - 通过逻辑回归进行倾向估计
p(ou,i∣X,ϕ)=σ(ωTXu,i+βi+γu)p(o_{u,i}|X,\phi)=\sigma(\omega^TX_{u,i}+\beta_i+\gamma_u)p(ou,i∣X,ϕ)=σ(ωTXu,i+βi+γu)其中,σ(⋅)\sigma(\cdot)σ(⋅) 是Sigmoid函数,用于将数值归一化;Xu,iX_{u,i}Xu,i 是用户-项目对的特征;ϕ\phiϕ 代表参数集合,包括:ωT\omega^TωT 是权重参数、βi\beta_iβi 是项目的偏置项参数、γu\gamma_uγu 是和用户的偏置项参数。这种方法不需要实现筛选出一个MCAR数据集,且可以拟合所有项目的浏览概率。
获得了权重 p(ou,i=1)p(o_{u,i}=1)p(ou,i=1) 后就可以预测对应的无偏评级了。需要说明的是,通过朴素贝叶斯进行倾向估计是相对简单易实现的方法,但这种方法得到的结果是没法直接用来产生推荐的,但是下一步已经很好继续下去了。例如可以使用矩阵分解(matrix factorization,MF)来预测其余项目的评分。
我随手找了一张矩阵分解方法的示意图,可以认为,拟合出权重 p(ou,i=1)p(o_{u,i}=1)p(ou,i=1) 的项目的无偏评级就是上表中红色的数值,未拟合出权重的项目评级就是上表中的问号。矩阵分解通过下面的公式将用户-物品交互矩阵分解成两个隐特征矩阵:y^u,i=puTqi+au+bi+c\hat{y}_{u,i}=\pmb{p}_u^T\pmb{q}_i+a_u+b_i+cy^u,i=pppuTqqqi+au+bi+c其中 pu\pmb{p}_upppu 是用户的隐特征矩阵;qi\pmb{q}_iqqqi是项目的隐特征矩阵;aua_uau、bib_ibi、ccc分别是用户、项目和全局偏置项。那么此时,矩阵分解的损失函数就表达为:arg minP,Q,A(∑(u,i):ou,i=1δ(Y,Y^)p(ou,i=1)+λ(∥P∥F2+∥Q∥F2))\argmin_{\pmb{P},\pmb{Q},\pmb{A}}\biggl(\sum_{(u,i):o_{u,i}=1}\frac{\delta(Y,\hat{Y})}{p(o_{u,i}=1)}+\lambda(\Vert \pmb{P}\Vert^2_F+\Vert \pmb{Q}\Vert^2_F)\biggr)PPP,QQQ,AAAargmin((u,i):ou,i=1∑p(ou,i=1)δ(Y,Y^)+λ(∥PPP∥F2+∥QQQ∥F2))其中,∑(u,i):ou,i=1δ(Y,Y^)p(ou,i=1)\sum_{(u,i):o_{u,i}=1}\frac{\delta(Y,\hat{Y})}{p(o_{u,i}=1)}∑(u,i):ou,i=1p(ou,i=1)δ(Y,Y^)指的是无偏的预测评级与真实评级之间的损失,λ(∥P∥F2+∥Q∥F2)\lambda(\Vert \pmb{P}\Vert^2_F+\Vert \pmb{Q}\Vert^2_F)λ(∥PPP∥F2+∥QQQ∥F2)是为了防止过拟合加入的正则化项。优化的参数P,Q,A\pmb{P},\pmb{Q},\pmb{A}PPP,QQQ,AAA分别代表用户的隐特征矩阵、项目的隐特征矩阵和偏置项,最终的预测评级就表示为:Y^=PTQ+A\hat{Y}=\pmb{P}^T\pmb{Q}+\pmb{A}Y^=PPPTQQQ+AAA这时候,之前未拟合出权重的项目评级也可以通过公式 Y^=PTQ+A\hat{Y}=\pmb{P}^T\pmb{Q}+\pmb{A}Y^=PPPTQQQ+AAA 计算得到了。
逆向倾向评分 (Inverse Propensity Scoring, IPS) 原理解析与MF算法的结合使用相关推荐
- 倾向得分匹配(Propensity Score Matching) 通俗解析及在Stata里的运用
转载: http://blog.sina.com.cn/s/blog_626867f30101h3ea.html 倾向得分匹配法是一种研究方法,它在研究某项治疗.政策.或者其他事件的影响因素上很常见. ...
- 【Python笔记】倾向评分匹配(Propensity Score Matching)实战
文章目录 1 一个SPSS案例:带你理解PSM 2 Python实现 3 R实现 1 一个SPSS案例:带你理解PSM 倾向性评分案例实战 Python 中的 pymatch 和 R中的Matchin ...
- 在观察研究中减少数据偏倚:倾向评分(一)
在观察研究中减少数据偏倚:倾向评分(一) 说在前面: 本文主要参考的是文章An Introduction to Propensity Score Methods for Reducing the Ef ...
- SPSS进行倾向评分逆概率加权(IPTW)
基于 PS (倾向评分)的IPTW 法首先由Rosenbaum作为一种以模型为基础的直接标准化法提出,属于边际结构模型.简单来说,就是把许多协变量和混杂因素打包成一个概率并进行加权,这样的话,我只用计 ...
- R语言基于Matching包进行倾向评分匹配(PSM)
倾向评分匹配(Propensity Score Matching,简称PSM)是一种统计学方法,用于处理观察研究(Observational Study)的数据,在SCI文章中应用非常广泛.在观察研究 ...
- python倾向匹配得分_手把手教你做倾向评分匹配 -PSM
原标题:手把手教你做倾向评分匹配 -PSM 本文首发于"百味科研芝士"微信公众号,转载请注明:百味科研芝士,Focus科研人的百味需求. 各位科研芝士的朋友大家好,今天和大家分享一 ...
- 基于R语言3组以上倾向评分逆概率加权(IPTW)
基于 PS (倾向评分)的IPTW 法首先由Rosenbaum作为一种以模型为基础的直接标准化法提出,属于边际结构模型.简单来说,就是把许多协变量和混杂因素打包成一个概率并进行加权,这样的话,我只用计 ...
- 首发,pm3包,一个用于多组(3组)倾向评分匹配的R包
目前,本人写的第二个R包pm3包已经正式在CRAN上线,用于3组倾向评分匹配,只能3组不能多也不能少. 可以使用以下代码安装 install.packages("pm3") 什么是 ...
- JAVA逆向反混淆-追查Burpsuite的破解原理(转)
0x00 摘要: 本系列文章通过对BurpLoader的几个版本的逆向分析,分析Burpsuite的破解原理,分析Burpsuite认证体系存在的安全漏洞. 0x01 JD-GUI的用途与缺陷: JD ...
最新文章
- linux内核模块签名,如何签名内核模块Ubuntu 18.04
- 基础篇:如何做一名专业的软件测试工程师
- SAP UI5 的本地 Fiori sandbox Launchpad
- SAP ADBC和JDBC的对比
- node转发请求 .csv格式文件下载 中文乱码问题 + 文件上传笔记
- python中range 函数_pythonrange,range函数的用法
- 让程序暂停几秒_如何构建一个简单的Python提醒应用程序
- java中$和 的区别详解_MyBatis中#{}和${}的区别详解
- 剖析Elasticsearch集群系列之二:分布式的三个C、translog和Lucene段
- Android Studio - 安装插件GsonFormat
- Java实现:学生管理系统
- scala下载和环境搭建
- objectc foundation class hierachy
- 在燃烧的远征寻找冰封王座:电竞之春下的游戏直播
- 北斗导航公共服务平台首次落户四川
- Unity2019_音效系统
- 自然语言处理(三)——句法分析与依存句法分析
- RSA der加密 p12解密以及配合AES使用详解
- CSS设置高度等于动态的宽度
- iPhone微信防止撤销插件开发