推荐入门
首先,一个推荐算法的最终上线,要经过以下三个实验:
- 通过离线实验证明它在很多离线指标上不低于现有的算法
- 通过用户调查确定它的用户满意度不低于现有的算法
- 通过在线的AB测试确定它在我们关心的指标上优与现有的算法
推荐系统关键技术:
- 召回(Match):基于内容匹配的召回和基于协同过滤的召回
- 排序(Rank):特征抽取和打分模型学习训练
推荐系统评测指标
-
用户满意度
-
预测准确度
- 评分预测
均方根误差(RMSE)和平均绝对误差(MAE) - TpoN推荐
通过准确率(precision)和召回率(recall)来度量
$$Recall=\frac{\sum_{u\in U}\left|R\left(u\right)\bigcap T\left(u\right)\right|}{\sum_{u\in U}\left|T\left(u\right)\right|}$$
$$Precision=\frac{\sum_{u\in U}\left|R\left(u\right)\bigcap T\left(u\right)\right|}{\sum_{u\in U}\left|R\left(u\right)\right|}$$
注:准确率衡量的是推荐出来的数据有多少是准确的;召回率是指推荐的全不全。参考此文章
- 评分预测
-
覆盖率
描述的是一个推荐系统对物品长尾的发掘能力,即不只推荐热门的商品,而是所有的商品都有机会被推荐到
可用信息熵和基尼系数来定义
基尼系数:$G=\frac{1}{n-1}\sum _{j=1}^{n}(2j-n-1)p(i_j)$ i,j是按照物品流行度p()从小到大排序的物品列表中第j个物品

另外,基尼系数可用来判断马太效应(强者更强,弱者更弱):如果G1是从初始用户行为中计算出的物品流行度的基尼系数,G2是从推荐列表中计算出的物品流行度的基尼系数,那么如果G2 > G1,就说明推荐算法具有马太效应。 -
多样性
为满足用户广泛的兴趣,推荐列表要覆盖不同的兴趣领域。多样性描述了推荐列表中物品两两之间的不相似性。因此,多样性和相似性是对应的。假设s(i, j)属于[0,1]定义了物品i和j之间的相似度,那么用户u的推荐列表R(u)的多样性定义如下:$$Diversity=1-\frac{\sum _{i,j\in R(u),i\neq j}s(i,j)}{\frac{1}{2}\left | R(u) \right|(\left|R(u)\right|-1)}$$
而推荐系统的整体多样性可以定义为所有用户推荐列表多样性的平均值:$Diversity=\frac{1}{\left | U \right |}\sum _{u\in U}Diversity(R(u))$ -
新颖性
推荐用户那些他们没有听说过的内容 -
惊喜度
若推荐的结果和用户的历史兴趣不相似,却让用户觉得满意,那么就说推荐结果的惊喜度很高 -
信任度
用户对推荐系统的信任程度 -
实时性
第一,推荐系统要实时更新推荐列表来满足用户新的行为变化;第二,推荐系统需要能够将新加入系统的物品推荐给用户 -
健壮性
衡量一个系统对恶意破坏的抵抗性,如淘宝的恶意刷单、豆瓣的大量水评等等
提高健壮性的手段:- 设计推荐系统时尽量使用代价比较高的用户行为。比如,如果有用户购买行为和用户浏览行为,那么主要应该使用用户购买行为,因为购买需要付费,所以攻击购买行为的代价远远大于攻击浏览行为。
- 在使用数据前,进行攻击检测,从而对数据进行清理。
-
商业目标
营业额、广告点击量等等

评测维度
- 用户维度 主要包括用户的人口统计学信息、活跃度以及是不是新用户等。
- 物品维度 包括物品的属性信息、流行度、平均分以及是不是新加入的物品等。
- 时间维度 包括季节,是工作日还是周末,是白天还是晚上等。
用户行为数据

基于邻域的算法
-
基于用户的协同过滤算法(UserCF)
- 找到和目标用户兴趣相似的用户集合。
- 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。
关键是首先计算两个用户之间的相似度,可通过Jaccard公式$W_{uv}=\frac{\left | N(u)\cap N(v) \right |}{\left | N(u)\cup N(v) \right |}$或余弦相似度$W_{uv}=\frac{\left | N(u)\cap N(v) \right |}{\sqrt{|N(u)| |N(v)| }}$计算
之后给用户推荐与其相似程度高的用户的内容 -
基于物品的协同过滤算法(ItemCF)
- 计算物品之间的相似度。
- 根据物品的相似度和用户的历史行为给用户生成推荐列表。
首先计算物品之间的相似程度,当用户购买一件物品时,推荐与这件物品相似的其他物品。不过,ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度
对物品的相似度进行归一化可提高推荐的多样性
UserCF的推荐结果着重于反映和用户兴趣相似的小群体的热点,而ItemCF的推荐结果着重于维系用户的历史兴趣。换句话说,UserCF的推荐更社会化,反映了用户所在的小型兴趣群体中物品的热门程度,而ItemCF的推荐更加个性化,反映了用户自己的兴趣传承。

实际环境中一般用户数是大于物品数的,更适用于ItemCF
隐语义模型LFM(latent factor model)
首先考虑对用户进行推荐还有一种方法,可以对书和物品的兴趣进行分类。对于某个用户,首先得到他的兴趣分类,然后从分类中挑选他可能喜欢的物品。
但对物品进行分离比较难,于是隐语义模型出现了,隐含语义分析技术采取基于用户行为统计的自动聚类方式,LFM通过如下公式计算用户u对物品i的兴趣:
$Preference(u,i)=r_{ui}=p_u^{T}q_i=\sum_{f=1}^{F}p_{u,k}q_{i,k}$
基于图的模型

那么给用户u推荐物品的任务就可以转化为度量用户顶点$v_u$和与$v_u$没有边直接相连的物品节点在图上的相关性,相关性越高的物品在推荐列表中的权重就越高
两个相关性比较高的顶点具有如下特征:
- 两个顶点之间有很多路径相连;
- 连接两个顶点之间的路径长度都比较短;
- 连接两个顶点之间的路径不会经过出度比较大的顶点。
根据以上三个特点,研究出了基于随机游走的PersonalRank算法来计算相关性

但由于算法迭代到收敛需要的时间复杂度比较高,所以比较耗时,但将其转换为矩阵形式则会将实践减少,令M为用户物品二分图的转移概率矩阵,即:$M(v,v’)=\frac{1}{|out(v)|}$,则迭代公式可转化为:$r=(1-\alpha)r_0+\alpha M^Tr$,即:$r=(1-\alpha)(1- \alpha M^T)^{-1}r_0$,故只需计算一次$(1- \alpha M^T)^{-1}$
冷启动问题
- 用户冷启动
用户冷启动主要解决如何给新用户做个性化推荐的问题。当新用户到来时,我们没有他的行为数据,所以也无法根据他的历史行为预测其兴趣,从而无法借此给他做个性化推荐。 - 物品冷启动
物品冷启动主要解决如何将新的物品推荐给可能对它感兴趣的用户这一问题。 - 系统冷启动
系统冷启动主要解决如何在一个新开发的网站上(还没有用户,也没有用户行为,只有一些物品的信息)设计个性化推荐系统,从而在网站刚发布时就让用户体验到个性化推荐服务这一问题。
解决方法:推荐热门排行榜;利用注册信息进行分析推荐;对于新加入的物品可以利用内容信息,将它们推荐给喜欢过和它们相似的物品的用户;在系统冷启动时可以引入专家的知识,通过一定的高效方式迅速建立起物品的相关度表。
用户标签数据
研究用户给物品打标签的行为,如何通过分析通过这种行为给用户做个性化推荐,用户给物品打的标签为UGC(User Generated Content,用户生成的内容)标签
标签系统中的推荐问题主要有以下两个:
- 如何利用用户打标签的行为为其推荐物品(基于标签的推荐)?
- 如何在用户给物品打标签时为其推荐适合该物品的标签(标签推荐)?
对于第一点:
- 统计每个用户最常用的标签。
- 对于每个标签,统计被打过这个标签次数最多的物品。
- 对于一个用户,首先找到他常用的标签,然后找到具有这些标签的最热门物品推荐给这个用户。
标签清理方法:
- 去除词频很高的停止词;
- 去除因词根不同造成的同义词,比如 recommender system和recommendation system;
- 去除因分隔符造成的同义词,比如 collaborative_filtering collaborative-filtering。
利用图模型做基于标签数据的个性化推荐

上下文信息
上下文包括用户访问推荐系统的时间、地点、心情等,例如当一个用户在夏天买了一件短袖,你不能在冬天的时候推荐短袖
时间上下文信息
地点上下文信息
推荐系统架构
外围架构
主要讨论推荐系统是如何和网站的其他系统接口的

数据收集与存储:

按照前面数据的规模和是否需要实时存取,不同的行为数据将被存储在不同的媒介中。一般来说,需要实时存取的数据存储在数据库和缓存中,而大规模的非实时地存取数据存储在分布式文件系统(如HDFS)中。
系统架构

- 该部分负责从数据库或者缓存中拿到用户行为数据,通过分析不同行为,生成当前用户的特征向量。不过如果是使用非行为特征,就不需要使用行为提取和分析模块了。该模块的输出是用户特征向量。
- 该部分负责将用户的特征向量通过特征-物品相关矩阵转化为初始推荐物品列表。
- 该部分负责对初始的推荐列表进行过滤、排名等处理,从而生成最终的推荐结果。

