推荐系统是一个看似简单但和业务逻辑联系紧密的问题,了解什么是“优秀”的推荐系统至关重要。
- 什么是推荐系统
- 推荐系统的主要任务
- 推荐系统和搜索引擎的区别
- 推荐系统的评测指标
1.1 什么是推荐系统
从以往的分类浏览到现在信息过载的时代,面对海量信息,人们难以描述和真正知道自己需要的是什么。当然搜索引擎可以解决一部分问题,但前提是用户首先知道自己想要什么。
用户需要从大量信息中找到自己想要的,信息生产者想要自己的信息脱颖而出。推荐系统的目的就是来解决这个矛盾的问题,其任务是:联系用户和信息,帮助用户发展对自己有价值的信息,同时让信息能够展现在感兴趣用户的面前,实现用户和信息生产者的双赢。
推荐系统不需要用户提供明确的需求,通过分析用户的历史行为进行建模。主动给用户推荐能满足用户兴趣需求的你信息。所以推荐系统和搜索引擎是两个互补的工具:搜索引擎满足了用户有明确需求的信息检索需求,推荐系统满足了用户无明确目的的信息检索需求。
物品的记录符合长尾规律(80/20定律),即80%的销售额来自20%的热门品牌。主流商品代表了绝大用户的共同需求,但长尾商品代表了小部分用户和大部分用户的个性化需求。推荐系统的目的可以用“千人千面”这个词语代替,即对每个用户都能够找到个性化需求,将长尾物品进行推荐。
推荐系统的工作方式:
- 社会化推荐(Social Recommendation):询问好友得到信息。
- 内容推荐(Content-Based Recommendation):找用户已有信息内容上相似的物品。
- 协同过滤(Collaborative Filtering):找到相似和用户和物品。
推荐系统就是将用户与物品进行联系的工具。
1.3 推荐系统评测
推荐系统能够满足用户的需求,也能够把合适信息推荐给用户,同时还能不断在反馈中进度。准确的预测并不是好的预测,可能热门商品很准确,但并不嫩能够满足用户的个性化需求。推荐系统还能够扩展用户的视野。
1.3.1 推荐系统的实验方法
1.离线实验
- 收集用户行为数据,形成数据集;
- 划分为训练数据和测试数据;
- 在训练数据上训练兴趣模型,在测试数据进行测试;
- 使用离线指标在测试集上进行预测;
推荐系统可以在离线数据上完成,但不能关注点击率和转化率等,很难找到商业指标。
2.用户调查
离线实验不能得到用户的主观感受,通过用户调查可以得到用户的主观感受指标,但成本高。
3.在线实验
将新推荐算法上线做AB测试,将用户随机分为几组,并采用不同的算法,通过统计不同组用户的评测指标来比较算法的性能。AB测试的优点是可以公平获得算法的性能精度对比,以及商业评价指标,但测试周期比较长。
1.3.2 评测指标
1.用户满意程度
用户满意是推荐系统的最重要的指标,但用户满意度无法离线计算,只能通过在线调查获得。用户满意度可以从用户的行为数据中获得,比如用户的购物行为、用户反馈和用户点赞。
2.预测准确度
预测准确度用来衡量推荐算法预测用户行为的能力,是重要的离线评测指标。
- 评分预测:预测用户对物品的评分
评分预测一般使用均方误差(RSME)和平均绝对误差(MAE)计算。对于用户u和物品i,tui表示用户u对物品i的实际评分,则RSME定义为:
![](http://latex.codecogs.com/gif.latex?$$RMSE=\frac{\sqrt{\sum_{u,i \in T}(r_ui-\hat{r}_ui)^2}}{|T|}$$)
MAE采用绝对值计算预测误差,定义为:
![](http://latex.codecogs.com/gif.latex?$$MAE=\frac{\sum_{u,i \in T}| r_ui - \hat{r}_ui|}{|T|}$$)
Netflix认为RMSE架打了对预测不准的惩罚,对于系统要求高。
- TopN 推荐:给用户个性化的推荐列表
TopN 推荐一般使用准确率(precision)和召回率(recall)度量。假设$R(u)$为用户在训练数据上给用户做出的推荐列表,T(u)为用户在测试数据上的列表。则推荐结果的召回率定义为:
![](http://latex.codecogs.com/gif.latex?$$Recall=\frac{\sum_{u \in U}|R(u)\bigcap T(u)|}{\sum_{u \in U}|T(u)|}$$)
准确率定义为:
![](http://latex.codecogs.com/gif.latex?$$Precision=\frac{\sum_{u \in U}|R(u)\bigcap T(u)|}{\sum_{u \in U}|R(u)|}$$)
评分预测一直是推荐系统的研究热点,关注与RSME的优化。但TopN 才更加适合实际的应用需求,因为预测的目的是用户感兴趣的信息,而不是得分。
3.覆盖率
覆盖率(coverage)评价的是推荐系统对长尾物品的发掘能力。覆盖率有不同的定义方法,最简单是为推荐系统能推荐物品占总物品的比例,是信息产生者关注的指标。为了细致描述推荐系统的长尾能力,需要统计推荐列表中不同物品出现的次数。如果所有的物品都出现在推荐列表中,且出现的次数不多,则推荐系统发掘长尾能力比较好,即可以通过研究推荐列表中出现次数的分布来描述推荐系统挖掘长尾的能力。若分布比较平均,则覆盖率较高;反之或曲线比较陡峭,说明覆盖率较低。可以使用以下两个指标来定义覆盖率:
第一个是信息熵:
![](http://latex.codecogs.com/gif.latex?$$H=-\sum^n_{i=1}p(i)log , p(i)$$)
其中p(i)表示物品i的流行度除以所有物品流行度之和。
第二个指标是基尼指数(Gini Index):
其中$i_j$是按照物品流行程度p()来从小到大排序物品中第j个物品。
4.多样性
推荐列表应该能够覆盖用户不同的兴趣领域,增加用户找到物品的概率。多样性描述推荐列表中物品两两之间的不相似性,假设$s(i, j)\in[0,1]$为物品i和j之间的相似度,则用户u的推荐列表R(u)的多样性定义如下:
![](http://latex.codecogs.com/gif.latex?$$Diversity=1-\frac{\sum_{i,j \in R(u) and i , \neq , j}s(i, j)}{\frac{1}{2}|R(u)|(|R(u)|-1)}$$)
而整个推荐系统的多样性可以定义为所有用户推荐列表多样性的平均值:
![](http://latex.codecogs.com/gif.latex?$$Diversity=\frac{1}{|U|}\sum_{u \in U}Diversity(R(u))$$)
所以不同物品相似度量函数$s(i,j)$定义了不同的多样性。如果用物品内容来描述物品相似度,则得到内容多样性函数;如果用协同过滤的相似度函数,则得到协同过滤相似度函数。
5.新颖性
新颖的推荐是给用户推荐他们没有听所的物品,可以直接在推荐列表中过滤掉用户以评分的相似物品。评测新颖性可以简单的利用推荐结果的平均流行程度,一般情况下冷门物品会给人感觉很有惊喜。
6.惊喜度
惊喜度和新颖性有点类似,但有本质的区别。惊喜度侧重于推荐与用户历史不相似,但能让用户满意的结果;新颖性侧重于用户是否听说该物品。
定义惊喜度首先需要定义推荐结果和用户历史上喜欢物品的相似成都,其次需要定义用户对推荐物品的满意程度。即获得了用户观看电影的历史,得到电影演员和导演集合,给用户推荐不属于该集合的电影,而得到用户满意,这就是惊喜的推荐。
7.信任度
如果用户信任推荐系统,就会增加和推荐系统的交互。提高信任度的主要办法是给用户解释推荐原理,比如显示列表的同时显示推荐的理由(如物品相似、好友推荐或者流行度等)。
8.实时性
推荐系统的实时性包括两个方面:首先推荐系统需要实时更新推荐列表来满足用户的行为变化,特别是在购物电商网站;其次推荐系统需要实时将新的物品推荐给用户,这就涉及到物品冷启动的问题。
9.健壮性
健壮性衡量了推荐系统抗击作弊的能力,可以通过模拟攻击进行评测。
10.商业目标
1.3.3 评测维度
评测维度能够知道算法在什么情况下性能最好,为融合不同算法提供参考。一般维度分为以下三种:
- 用户维度:用户统计信息
- 物品维度:物品属性信息和流行程度等
- 时间维度:周末或节日等
网友评论