最近看下推荐系统的入门书籍《推荐系统实践》,\color{red}{项亮老师}的这本书应该是国内推荐系统中最受好评的。虽然有电子版,但是对于比较经典的书籍,还是会买纸质版的。
第一章主要介绍的是什么是RS系统、RS系统的分类、RS系统的应用、RS系统的评测指标等


上面的例子中用户是有明确地需求:买花生米。如果用户周六想看一部电影,面对电影网站上万部的电影,该如何抉择?用户会手足无措,不知道该看哪部电影
在互联网快速发展的时代,人们从信息匮乏的时代步入了一个信息过载的时代,信息量过大从而导致无法确定选择。
如果有一个自动化的工具,分析用户的历史兴趣,从庞大的电影库中找到几部符合用户习惯和口味的电影供其选择,就完美了,不用自己去抉择。
这个工具就是个性化推荐系统,解决信息过载问题

解决信息过载的两个方法:
搜索引擎需要用户提供关键词来寻找信息;推荐系统不需要用户提供明确的需求,通过分析用户的历史行为给用户的历史行为建模,从而主动给他们推荐满足他们需求的信息。
主流商品满足绝大部分用户的需求,而长尾商品往往代表了一小部分用户的个性化需求。推荐系统通过发掘用户的行为,找到用户的个性化需求,从而将长尾商品准确地推荐给需要它的用户。
推荐算法的本质:通过一定的方式将用户和物品联系起来,而不同的推荐系统利用了不同的推荐方式

个性化推荐系统之王:\color{bule}{亚马逊},下图是亚马逊的个性化推荐列表

亚马逊的三种推荐方式:
Netflix,项亮老师也曾在该公司举办的比赛Netflix Prize中获得很好的名次
最为成功的是Facebook。最为重要的两个数据:
提供的API接口:Instant Personalization

开发EdgeRank算法对用户的每次会话(分享和评论)进行排序

第一个个性化邮件推荐系统:Tapestry。通过分析用户阅读邮件的历史行为和习惯来对新邮件进行排序,提高用户的工作效率。采用的是基于协同过滤筛选信息。
个性化广告投放技术分为3种:

主要是有3种方法来评测推荐系统效果的实验方法:
重要的组成步骤:
离线方法的优缺点:

离线指标和实际的商业指标之间存在差距。一般的,高预测准确率不等于高用户满意度。
很多离线时没有办法评测的与用户主观感受有关的指标都可以通过用户调查获得。用户调查的过程中需要注意的2点:
在完成离线实验和必要的用户调查后,可以将推荐系统上线做AB测试。AB测试是常用的在线评估算法的实验方法:
优点 | 缺点 |
|---|---|
公平地获得不同算法实际在线时的性能指标包含商业上的指标 | 周期长,必须进行长期的实验才能获得可靠的结果 |
做AB测试的时候注意切分流量

主要是通过问卷调查的方式来获得
最重要的推荐系统离线评测指标
MASEMAE
利用Python实现上面的两个指标:
# records列表存放用户评分数据,records[i] = [u, i, rui, pui]
# rui:用户u对物品i的实际评分,pui:是算法预测出来的评分
import numpy
import math
def RMSE(records):
return math.sqrt(sum([(rui - pui) ** 2 for u, i, rui, pui in records]) / float(len(records))) # (实际分数 - 算法得出的分数)的平方除以总长度
def MAE(records):
return sum([abs(rui - pui) for u, i, rui, pui in records]) / float(len(records)) # (实际分数 - 算法得到的平均分数)的绝对值除以总长度网站在提供服务时,一般是给用户一个个性化的推荐列表,这种方式叫做TopN推荐。推荐结果召回率和准确率的定义:

利用Python实现召回率和准确率:
def PrecisionRecall():
hit = 0
n_recall = 0
n_precision = 0
for user, items in test.items():
rank = Recommand(user,N)
hit += len(rank & items)
n_recall += len(items)
n_precision += N
return [hit / (1.0 * n_recall), hit / (1.0 * n_precision)]覆盖率是描述一个推荐系统对物品长尾的发掘能力,定义为:
推荐系统能够推荐出来的物品占总物品集合的比例

两个评测指标:

def Gini(p):
j = 1
n = len(p)
G = 0
for item, weight in sorted(p.items(), keys = itemgetter(1)):
G += (2 * j - n -1) * weight
return G / float(n - 1)关于马太效应:强者更强,弱者更弱。推荐系统的初衷是消除马太效应。评测推荐系统是否具有马太效应的简单办法就是使用基尼系数。
如果G2>G1,则说明推荐算法具有马太效应
多样性描述的是物品两两之间的不相似性。多样性和相似性是对应的。

推荐系统整体多样性可以定义为所有用户推荐列表多样性的平均值:
不同的物品相似度度量函数s(i,j)可以定义不同的多样性
评测新颖性的最简单方法就是利用推荐结果的平均流行度,因为越不热门的物品,用户越觉得新颖
令用户惊喜的推荐结果是和用户历史上喜欢的物品不相似,但是用户却觉得满意的推荐。
RS的信任度只能是通过问卷调查的方式来获取,提高信任度的两种方法:
推荐系统的实时性包含2个方面:
健壮性(robust,鲁棒性),是衡量一个推荐系统抗击作弊能力的重要指标,主要是利用模拟攻击:

评测维度分为3种: