所谓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的用户的比例。
但是上面的公式存在着一个问题,当Y时一个非常popular的Item的时候,那么无论我们买了什么样的X,系统总会给我们推荐这个Y的。因此,需要考虑Y是否popular,就有了下面的改进公式:
这样,通过下面的购买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进行一个平滑。采用如下的方法:
其中,
rui
表示用户
u
对商品
(补充:这里的Dampen Means,其实是一种Bayesian average。具体的含义就是——对于不知道的评分结果,我们都假定他拥有一个平均得分mu,假定总是已经有k个人进行了评分。这种形式的评分在IMDB的Top 250上就有应用[3])
2 考虑时间时的做法
考虑时间的影响主要是为了让最新的最受欢迎的item上浮到最上面来,同时防止旧的item一直霸占着排行榜的前面位置。主要参考的时两个公司的方法:
Hacker News:
其中,
U
表示一个商品的up的次数,
Reddit:
各个字母的含义同上。最后一项分母中的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] 阮一峰的网络日志 基于用户投票的排名算法(六):贝叶斯平均