当历史交互数据为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=1M​p(ou,i​=1)1​u=1∑N​i=1∑M​p(ou,i​=1)δu,i​(Y,Y^)​=N⋅M1​u=1∑N​i=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⋅M1​u=1∑N​i=1∑M​p(ou,i​=1)p(ou,i​=1)δu,i​(Y,Y^)​=N⋅M1​u=1∑N​i=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) 的模型,例如:

  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数据。并且它只能拟合出被评分过项目的浏览概率。
  2. 通过逻辑回归进行倾向估计
    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​=p​p​​puT​q​q​​qi​+au​+bi​+c其中 pu\pmb{p}_up​p​​pu​ 是用户的隐特征矩阵;qi\pmb{q}_iq​q​​qi​是项目的隐特征矩阵;aua_uau​、bib_ibi​、ccc分别是用户、项目和全局偏置项。那么此时,矩阵分解的损失函数就表达为:arg min⁡P,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,Q​Q​​Q,AAAargmin​((u,i):ou,i​=1∑​p(ou,i​=1)δ(Y,Y^)​+λ(∥PPP∥F2​+∥Q​Q​​Q∥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​=1​p(ou,i​=1)δ(Y,Y^)​指的是无偏的预测评级与真实评级之间的损失,λ(∥P∥F2+∥Q∥F2)\lambda(\Vert \pmb{P}\Vert^2_F+\Vert \pmb{Q}\Vert^2_F)λ(∥PPP∥F2​+∥Q​Q​​Q∥F2​)是为了防止过拟合加入的正则化项。优化的参数P,Q,A\pmb{P},\pmb{Q},\pmb{A}PPP,Q​Q​​Q,AAA分别代表用户的隐特征矩阵、项目的隐特征矩阵和偏置项,最终的预测评级就表示为:Y^=PTQ+A\hat{Y}=\pmb{P}^T\pmb{Q}+\pmb{A}Y^=PPPTQ​Q​​Q+AAA这时候,之前未拟合出权重的项目评级也可以通过公式 Y^=PTQ+A\hat{Y}=\pmb{P}^T\pmb{Q}+\pmb{A}Y^=PPPTQ​Q​​Q+AAA 计算得到了。

逆向倾向评分 (Inverse Propensity Scoring, IPS) 原理解析与MF算法的结合使用相关推荐

  1. 倾向得分匹配(Propensity Score Matching) 通俗解析及在Stata里的运用

    转载: http://blog.sina.com.cn/s/blog_626867f30101h3ea.html 倾向得分匹配法是一种研究方法,它在研究某项治疗.政策.或者其他事件的影响因素上很常见. ...

  2. 【Python笔记】倾向评分匹配(Propensity Score Matching)实战

    文章目录 1 一个SPSS案例:带你理解PSM 2 Python实现 3 R实现 1 一个SPSS案例:带你理解PSM 倾向性评分案例实战 Python 中的 pymatch 和 R中的Matchin ...

  3. 在观察研究中减少数据偏倚:倾向评分(一)

    在观察研究中减少数据偏倚:倾向评分(一) 说在前面: 本文主要参考的是文章An Introduction to Propensity Score Methods for Reducing the Ef ...

  4. SPSS进行倾向评分逆概率加权(IPTW)

    基于 PS (倾向评分)的IPTW 法首先由Rosenbaum作为一种以模型为基础的直接标准化法提出,属于边际结构模型.简单来说,就是把许多协变量和混杂因素打包成一个概率并进行加权,这样的话,我只用计 ...

  5. R语言基于Matching包进行倾向评分匹配(PSM)

    倾向评分匹配(Propensity Score Matching,简称PSM)是一种统计学方法,用于处理观察研究(Observational Study)的数据,在SCI文章中应用非常广泛.在观察研究 ...

  6. python倾向匹配得分_手把手教你做倾向评分匹配 -PSM

    原标题:手把手教你做倾向评分匹配 -PSM 本文首发于"百味科研芝士"微信公众号,转载请注明:百味科研芝士,Focus科研人的百味需求. 各位科研芝士的朋友大家好,今天和大家分享一 ...

  7. 基于R语言3组以上倾向评分逆概率加权(IPTW)

    基于 PS (倾向评分)的IPTW 法首先由Rosenbaum作为一种以模型为基础的直接标准化法提出,属于边际结构模型.简单来说,就是把许多协变量和混杂因素打包成一个概率并进行加权,这样的话,我只用计 ...

  8. 首发,pm3包,一个用于多组(3组)倾向评分匹配的R包

    目前,本人写的第二个R包pm3包已经正式在CRAN上线,用于3组倾向评分匹配,只能3组不能多也不能少. 可以使用以下代码安装 install.packages("pm3") 什么是 ...

  9. JAVA逆向反混淆-追查Burpsuite的破解原理(转)

    0x00 摘要: 本系列文章通过对BurpLoader的几个版本的逆向分析,分析Burpsuite的破解原理,分析Burpsuite认证体系存在的安全漏洞. 0x01 JD-GUI的用途与缺陷: JD ...

最新文章

  1. linux内核模块签名,如何签名内核模块Ubuntu 18.04
  2. 基础篇:如何做一名专业的软件测试工程师
  3. SAP UI5 的本地 Fiori sandbox Launchpad
  4. SAP ADBC和JDBC的对比
  5. node转发请求 .csv格式文件下载 中文乱码问题 + 文件上传笔记
  6. python中range 函数_pythonrange,range函数的用法
  7. 让程序暂停几秒_如何构建一个简单的Python提醒应用程序
  8. java中$和 的区别详解_MyBatis中#{}和${}的区别详解
  9. 剖析Elasticsearch集群系列之二:分布式的三个C、translog和Lucene段
  10. Android Studio - 安装插件GsonFormat
  11. Java实现:学生管理系统
  12. scala下载和环境搭建
  13. objectc foundation class hierachy
  14. 在燃烧的远征寻找冰封王座:电竞之春下的游戏直播
  15. 北斗导航公共服务平台首次落户四川
  16. Unity2019_音效系统
  17. 自然语言处理(三)——句法分析与依存句法分析
  18. RSA der加密 p12解密以及配合AES使用详解
  19. CSS设置高度等于动态的宽度
  20. iPhone微信防止撤销插件开发

热门文章

  1. 镍离子去除专业吸附技术,深度除镍工程段工艺设计
  2. MATLAB数据预处理之缺失值插补
  3. Android之高仿QQ6.6.0侧滑效果(背景动画、透明+沉浸式状态栏、渐变效果)
  4. 问题 A: 【二维数组】计算三阶行列式的值
  5. 在vue项目中使用favicon.ico
  6. .NET 程序员有家了,微软推出官方技术社区论坛
  7. message broker
  8. python中的aliasing
  9. 初学python 没有动手没有发言权
  10. 软件生命周期管理系统ALM配置说明(二)