Introduction to Recommender System 之 Module 2 Non-Personalized Recommenders

本文介绍了非个性化推荐系统的基本原理,包括简单平均预测方法、产品关联和用户偏好建模。简单平均虽然直观但效果有限,产品关联通过考虑购买行为改善推荐,而用户偏好建模则关注显式和隐式反馈。文中还讨论了计算推荐分数时的时间因素,如Dampen Means和Hacker News、Reddit的算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

所谓non-personalized,就是在做prediction或者recommendation的时候不考虑具体person。
这一讲也是沿着这个主线展开的:
1 因为non-personalized,所以最直观的预测方法就是-》Simple Average
2 Simple Average效果太差,除了non-psersonalized的原因外,还未考虑context,所以有了Production Association
3 效果稍微好了些,再加上time等因素。引出实际计算分数是采用的几种方法——Dampen Means考虑时间的方法

最简单的推荐预测方法——Simple Average

这是最最简单的思路了。直接统计用户评分的平均值或者是用户点赞的数量来对某个item进行评估,并以此评估值作为物品的推荐指数。据说直接采用这种方法来对netflix举办的某届比赛的数据进行评价,得到的结果的RMSE大概是1.1296(Global Average)、1.0651(User Average)、1.0533(Movie Average),而当时Netflix采用的方法得到的RMSE也仅仅为0.9514[2]。可以看到这种简单粗暴的方法还是有一定的作用的(Better than nothing)。
造成简单平均效果差的一个很重要的原因就是他根本没有考虑一些context的啊。因此,做一个小小的改进,就有了

Product Association

简单的思想就是用户在购买商品X时,有可能会和商品Y一起买。我们对这些因素进行综合考虑,选出用户买了X后的最有可能买的Y,这就是一个比较有说服力的解决方法了。因此,有了下面的指标:

#(X+Y)#X

表示同时购买X和Y的用户占购买X的用户的比例。
但是上面的公式存在着一个问题,当Y时一个非常popular的Item的时候,那么无论我们买了什么样的X,系统总会给我们推荐这个Y的。因此,需要考虑Y是否popular,就有了下面的改进公式:

#(X+Y)#X#(!X+Y)#!X

这样,通过下面的购买Y未购买X的用户数量占未购买X用户的比例,就可以看出商品Y是否是popular的。另外,可以讲下面的公式换成任意的能够表示Y的popular程度的指标。
考虑了context之后,这一课程又讲了一下关于用户preference建模的东西。

用户Preference建模

主要分为两种形式:
explicit——rating、review、vote
implicit——click、follow、purchase
还有现在的引擎一般都采用organic的方式来进行推荐,就是一种non-intrusive的方式,体现在推荐采用的措辞上面。比较喜欢用likely、maybe等等。
这一课的最后,讲了一下在计算recommendation的得分时如何考虑时间的影响。

具体的计算分数的方法

1 Dampen means
主要是对评分人数太少的item进行一个平滑。采用如下的方法:

urui+kμn+k

其中, rui 表示用户 u 对商品i的评分。 k 表示虚拟的用户的数量,μ表示这几个用户的评分,这两个参数都是用户自己根据需要设置的。
(补充:这里的Dampen Means,其实是一种Bayesian average。具体的含义就是——对于不知道的评分结果,我们都假定他拥有一个平均得分mu,假定总是已经有k个人进行了评分。这种形式的评分在IMDB的Top 250上就有应用[3]
2 考虑时间时的做法
考虑时间的影响主要是为了让最新的最受欢迎的item上浮到最上面来,同时防止旧的item一直霸占着排行榜的前面位置。主要参考的时两个公司的方法:
Hacker News:

(UD1)α(tnowtpost)γ×P

其中, U 表示一个商品的up的次数,D表示一个商品down的次数, α 一般小于1,原因就是使得一篇文章的up的数量过多时,它的得分增加的并没有一开始的快(下面的log函数的作用也是如此)。下面的 γ 一般选择大于1。最后的 P 表示一个Panelty,根据文章的类型活着商业方面的考虑进行一个惩罚。
Reddit:

log10max(1,|UD|)+sign(UD)tpost45000

各个字母的含义同上。最后一项分母中的45000是表示时间影响的,45000秒,就是12.5小时,大概就是半天,也就是说,半天前发表的文章,想和半天之后发表的文章保持同样的得分的话,就必须在前一项log中up的数量足够多,使得log之后的值能够增加1,在这里,可想而知,时间久远的文章是很难排到前面的。

参考文献

[1] Cousera上的Introduction to Recommender System Module 2
[2] Coursera上的Mining Massive Datasets第4讲关于Recommender System的部分
[3] 阮一峰的网络日志 基于用户投票的排名算法(六):贝叶斯平均

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值