一、好的推荐系统
1.什么是推荐系统
从某种意义上说,推荐系统和搜索引擎对于用语来说是两个互补的工具。搜索引擎满足了用户有明确目的时的主动查找需求,而推荐系统能够在用户没有明确目的的时候帮助他们发现感兴趣的内容。
分为社会化推荐,基于内容的推荐和基于协同过滤的推荐。
2.个性化推荐系统的应用
推荐系统应用都是由前台的展示页面,后台的日志页面,以及推荐算法系统组成。
音乐推荐如下特点:
- 物品空间大
- 消费每首歌的代价很小
- 物品种类丰富
- 听一首歌耗时很少
- 物品重用率很高
- 用户充满激情
- 上下文相关
- 次序很重要
- 很多播放列表资源
- 不需要用户全神贯注
- 高度社会化
目前广告投放的技术主要分三种:
- 上下文广告
- 搜索广告
- 个性化展示广告
好的推荐系统不仅仅能够准确预测用户的行为,而且能够扩展用户的视野,帮助用户发现那些题目可能会感兴趣,但却不那么容易发现的东西。
3.推荐系统实验方法
- 离线实验:用户日志(训练集,测试集)
- 用户调查:优点风险低,出现错误容易弥补,缺点是招募代价大
- 在线实验:把用户分组,不同组不同算法,切分流难度大
评分预测的预测准确度一般通过均方根误差(RMSE)和破军绝对误差(MAE)计算。(公式见课本25页)
假设我们用records存放用户评分数据,令records[i]=[u,i,rui,pui],其中rui是用户对物品i的实际评分,pui是算法预测出来的用户u对物品i的评分,那么下面的代码分别实现了RMSE和MAE的计算过程:
def RMSE(records):
return math.sqrt(sum([rui-pui]*(rui-pui) 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))
Netflix认为RMSE加大了对预测不准的用户物品评分的惩罚,因此更加苛刻。研究表明,对预测结果取整会降低MAE的误差
TopN推荐一般是给用户一个个性化的推荐列表。准确率通过准确率(precision)/召回率(recall)度量。(公式见课本26页)
下面的代码准确计算量准确率和召回率:
def PrecisionRecall(test, N):
hit = 0
n_recall = 0
n_precision = 0
for user, item in test.items():
rank = Recommend(user, N)
hit += len(rank & items)
n_recall += len(items)
n_precision += N
return [hit / (1.0 * n_recall), hit / (1.0 * n_precision)]
召回率曲线,选取不同的推荐列表长度N。
覆盖率描述一个推荐系统对物品长尾的发掘能力。(公式见课本27页)
热门排行榜的推荐覆盖率是很低的,它只会推荐那些热门的物品,这些物品在总物品中占比例很小。一个好的推荐系统不仅需要比较高的用户满意度,也需要较高的覆盖率。信息论和经济学中有两个著名的指标可以用来定义覆盖率,第一个是信息熵,第二个是基尼系数,见课本27页。
下面代码可以用来计算给定物品流行度分布后的基尼系数:
def GiniIndex(p):
j = 1
n = len(p)
G = 0
for item, weight in sorted(p.items(), key=itemgetter(1)):
G += (2 * j - n - 1) * weight
return G / float(n-1)
推荐系统的初衷是为了消除马太效应,使得各种物品都能被展示给对他们感兴趣的某一类人群。
多样性描述了推荐列表中物品两两之间的不相似性。公式见28页。给用户的推荐列表也需要满足用户广泛的兴趣。
新颖性是指给用户推荐那些他们以前没有听说过的物品。如果推荐结果中物品的平均热门程度较低,那么推荐结果就可能有比较高的新颖性。
惊喜度是指如果推荐结果和用户的历史兴趣不相似,但却让用户觉得满意,那么就可以说推荐结果的惊喜度很高。而推荐的新颖性仅仅取决于用户是否听说过这个推荐结果。
信任度如果用户信任该系统,那么就会增加用户和推荐系统的交互。增加有两种方法:一是增加推荐系统的透明度,二是考虑社交网络的信息。
实时性首先推荐系统需要实时更新推荐列表来满足用户新的行为变化。其次推荐系统需要能够加入系统的物品推荐给用户。
健壮性衡量的是一个推荐系统抗作弊的能力。可以使用健壮性高的算法,或者使用代价高的用户行为,或者数据清洗。
商业目标一般来说,就是平均一个用户给公司带来的盈利。
一个推荐算法,可能在某种情况下性能比较好,而增加评测维度的目的就是知道一个算法在什么情况下性能最好,比如用户维度(活跃度,是否新用户),物品维度(物品属性,平均分),时间维度(季节,周末)。
网友评论