目录
一、常见的推荐算法原理(时间、位置影响)
(一)、基于内容的推荐
(二)、基于用户的协同过滤算法
(三)、基于物品的协同过滤算法
(四)、基于标签的推荐
(五)、隐语义模型 LFM
(六)、社会化推荐
(七)、根据时间上下文推荐
(八)、基于地理位置的推荐
二、推荐系统的冷启动问题
三、推荐系统的架构
四、推荐系统的度量
什么是好的推荐系统:
推荐系统的评价指标:
推荐算法的考核指标:
推荐系统的测试方法:
大部分人都听说过个性化推荐,也知道千人千面,那么个性化推荐系统到底是怎么样的?最近做了一点总结。
现在的人们面对信息过载问题日益严重,好的个性化推荐将能够很好的提升用户体验,提高用户使用产品完成任务的效率,更好的留住用户,进一步扩大产品的盈利。
对于一些电商类的产品,个性化推荐也能帮助减少马太效应和长尾效应的影响,使商品的利用率更高,盈利增长。
【注】
马太效应:产品中热门的东西会被更多人看到,热门的东西会变得更加热门,而冷门的东西更加冷门。
长尾理论:某些条件下,需求和销量不高的产品所占据的市场份额,可以和主流产品的市场份额相比。
对于推荐系统的解释总结分为 4 部分:
目前常见的一些推荐如下:
其中比较常见的就是前 4 种推荐,7、8 实际上是在基本的推荐算法上加上了一层根据时间和位置的加权筛选。
各种推荐算法是可以叠加在一起的,根据不同算法的权重调整,给用户最为精准智能的推荐。
基于内容的推荐是基础的推荐策略。如果你浏览或购买过某种类型的内容,则给你推荐这种类型下的其他内容。
基于内容的推荐好处在于易于理解,但不足在于推荐不够智能,多样性和新颖性不足。
比如下图中用户某一天想买的是单反,但购买单反不是一个频繁的行为,且买的是高端单反,那么接下来给用户推荐的全是高端单反,推荐的转化率就会低很多。
又或者是根据浏览历史推荐,但假如我已经买过了该物品,再给我推荐,重复购买的可能性会低很多。
基于用户的协同过滤(UserCF)算法,通过用户对不同内容的行为,来评测用户之间的相似性,基于用户之间的相似性做出推荐。这部分推荐本质上是给用户推荐和他相似的人感兴趣的东西。
比如你曾经喜欢(多次观看)的电影都是科幻类的电影,如异形,终结者、星球大战等,通过数据分析我找到了和你一样看过异形,终结者,星球大战的人,我发现他还经常看复仇者联盟的电影,那么我则可以推荐你很有可能也会喜欢看复仇者联盟,那么我就可以向你推荐复仇者联盟。
以下对 UserCF 进行比较详细的说明,其余的算法会类似:
用 jaccard 公式表示 u 和 v 的兴趣相似度:W(uv)=|N(u)∩N(v)|/|N(u)∪N(v)|
或者 用余弦相似度 W(uv)=|N(u)∩N(v)|/√|N(u)||N(v)|
对应的表如下,该表的意思是用户 A 对物品 {a,b,c} 有有过行为,对 {a,b,c} 是感兴趣的,用户 B 对 {a,c} 是感兴趣的
那么用余弦公式计算用户 A 和用户 B 的兴趣相似度就是 W(ab)=|{a,b,c}∩{a,c}|/√|{a,b,c}||{a,c}|=1/√6
实际上的话,很多用户之间并没有对同样的物品产生行为,即 | N(u)∩N(v)|=0,为了优化这种情况,我们可以先计算出 | N(u)∩N(v)|≠0 的用户 (u,v) 再除以分母√|N(u)||N(v)|
首先需要建立物品到用户的倒排表,对于每个物品都保存该物品产生过行为的用户列表,令稀疏矩阵 C[u][v]=|N(u)∩N(v)|,假设用户 u 和用户 v 同时属于倒排表 K 个物品对应的用户列表即 C[u][v]=K,接着扫描倒排表中每个物品对应的用户列表,将用户列表中两两用户对应的 C[u][v] 加 1,最终就可以得到所有用户之间不为 0 的 C[u][v]。
如图,建立了一个 4X4 的用户相似度矩阵,对于物品 a,将 W[A][B] 和 W[B][A] 加 1,对于物品 b,将 W[A][C] 和 W[C][A] 加 1,扫描完所有物品后,可以得到最终的 W 矩阵,这里的 W 就是余弦
相似度公式的分子,再除以分母√|N(u)||N(v)| 就可以得到最终的用户兴趣相似度。
得到了用户兴趣相似度后,根据 UserCF 算法给用户推荐和他兴趣最相似的 K 个用户喜欢的物品,以下的公式计算了 UserCF 中用户 u 对物品 i 的感兴趣程度,公式如下:
以上的算法公式还比较粗糙,如果两个人购买了同一个物品,不能说明他们的兴趣一定相同,因此可以对算法进行改进,提高算法的性能。
新的公式会通过降权惩罚用户 u 和用户 v 共同兴趣列表中热门物品对他们相似度的影响。
不同的算法有各自不同的效果,也会有不同的限制和缺点,在使用中也要结合产品的用户不停调整优化,达到最好的效果。
UserCF 的限制和缺点:用户数越来越大的话,计算用户之间的相似度矩阵,系统运行的时间,复杂度,整体的成本都会大幅度增加。
基于物品的协同过滤(ItemCF)算法,通过分析用户的行为记录计算物品之间的相似度,比如物品 A 和物品 B 具有很大的相似度是因为喜欢 A 的用户大都也喜欢物品 B。
比如下图中,我曾经搜索过桌面摆件招财猫,然后系统推荐给我了同样是桌面摆件的摩托车模型。
W(i,j)=|N(i)∩N(j)|/√|N(i)||N(j)|
N(i) 和 N(j) 表示喜欢物品 i 的用户数,ItemCF 的算法结构基本与 UserCF 的算法类似,这里不做过多说明了。
算法并不万能,需要不断调整和优化,或是根据形态简化算法。
UserCF
ItemCF
两种算法的一些限制:
基于标签的推荐一般分为两种,一种是通过给用户的某些特征打上标签,另一种则是让用户自己给物品打上标签,这里主要讲用户给物品打标签(UGC)。
基于 UGC 的标签推荐主要是利用用户打标签的行为为其推荐物品,在用户给物品打标签时也要提供合适该物品的标签。用户用标签描述对物品的看法,标签是反应用户兴趣的重要数据源。
一个用户行为的数据集一般由一个三元组的集合表示,其中记录 {u,i,b} 表示用户 u 给物品 i 打上了标签 b(当然实际中会包含用户属性、物品属性等,更为复杂)。
–(具体的算法这里隐去,了解原理即可)–
给用户提供标签一般有 这么几种方法 :
常见的基于标签 (UGC) 的推荐有豆瓣:
LFM 的核心思想:通过隐含特征联系用户兴趣和物品
对于某个用户,首先要得到他的兴趣分类,然后从分类中挑选他可能喜欢的物品,要得到他喜欢的的物品分类需要考虑到 3 个问题:
1. 如何给物品分类?
目前比较简单的做法是通过人工给物品分类,按照不同的物品分类方法。
另外则是通过隐含语义分析技术,采用基于用户行为统计的自动聚类来解决这个问题,比较著名的模型和方法有 pLSA,LDA,隐含类别模型,隐含主题模型,矩阵分析等等。
2. 如何确定用户对哪些物品感兴趣,以及感兴趣的程度?
推荐系统的用户行为分为隐性反馈和显性反馈,主要讨论隐性反馈数据集 ,这种数据集只有正样本(用户喜欢什么物品),没有负样本(用户对什么物品不感兴趣),在隐性反馈数据集上应用 LFM 解决推荐的问题需要给每个用户生成负样本,有这么几种方法:
采负样本的一些原则:
对于每个用户,采样时要保证正负样本的平衡。
对于每个用户采样负样本时,要选取那些热门,而用户没有行为的物品。
综合以上的方法结合用户行为频率计算确定用户感兴趣的物品和程度。
3. 对一个给定的类,选择哪些属于这个类的物品推荐给用户,以及如何确定这些物品在一个类中的权重?
这个问题主要的解决方法就是通过 1.2 的计算结果综合算法得出,根据算法计算调整不同物品的权重,通过迭代不断优化算法中的参数。
LFM 中重要的参数有(仅了解就可以,具体需要结合算法公式):
LFM 具有学习能力,能实现自我学习不断优化模型。
根据某机构的调查,在购买物品时,90% 左右的用户会相信朋友的推荐,70% 的用户会相信网上其他用户对商品的评论。
在互联网中最明显的社会化推荐则是利用社交网络数据进行推荐,利用社交网络数据推荐一般可以从以下几个方面入手:
基于社交信息的社会化推荐能够利用好友的关系,解决一部分冷启动的问题。
情况 1. 你通过朋友的分享进入的,你朋友在网站中玩的比较久,有推荐数据。由于你之前在该网站没有任何数据,那么我要想给你推荐物品,就可以根据你朋友的推荐列表来给你推荐你可能会喜欢的东西。
情况 2. 如果你是刚来到一个网站,你没有朋友, 我想给你做社会化推荐的话,可以根据你的注册信息、位置,共同兴趣等给你推荐好友,再给你做好友推荐。
上下文包括用户访问推荐系统的时间、地点、心情等,根据时间上下文的推荐是希望能够准确预测用户在某个特定时刻或某段时刻的兴趣。
比如电商产品在卖衣服时,冬天推荐的衣物和夏天推荐的衣物是不同的。如下图,淘宝网在冬季的推荐:
时间信息对用户兴趣的影响主要表现在以下几个方面:
考虑到时间信息后,推荐系统也从一个静态系统变成了一个时变的系统,而用户行为数据也变成了时间序列。
在给定数据集后,可以通过统计以下信息研究推荐系统的时间特性:
推荐系统的实时性
用户的兴趣是不断变化的,其变化体现在用户不断增加的新行为中,一个实时的推荐系统需要能够实时响应用户新的行为,让推荐列表不断变化,从而满足用户不断变化的兴趣。
实时的推荐系统应该满足:
推荐算法的时间多样性:推荐系统每天推荐结果的变化程度,有的推荐系统中用户经常能看到不同的推荐结果。
时间上下文的推荐算法
1. 推荐最新最热门的物品
2. 时间上下文的 ItemCF 算法,利用用户行为离线计算物品之间的相似度,根据用户的历史行为和物品相似度矩阵,给用户做在线个性化推荐。
物品的相似度计算:用户在像个很短的时间内喜欢的物品有更高的相似度。
在线推荐:用户近期行为相比用户很久之前的行为,更能体现用户现在的兴趣。
3. 时间上下文的 UserCF 算法
用户的兴趣相似度计算:如果两个用户同时喜欢相同的物品,则兴趣相似度越大。
相似兴趣用户的最近行为(推荐与其兴趣相似的用户最近喜欢的物品)。
基于位置的推荐算法(LARS)会根据用户所在的国家、城市、街道探寻规律进行推荐,找到用户地点和兴趣相关的特征,主要包括兴趣本地化和活动本地化。
LARS 的基本思想是将数据集根据用户的位置划分成很多子集,位置是一个树状结构,比如国家、省、市、区、县的结构,因此数据集也会划分成一个树状结构。
根据用户的位置,将其分配到一个叶子节点中,而该节点会包括了所有和他同一位置的用户行为数据集。
LARS 会利用该叶子节点上的用户行为数据,通过 ItemCF 或 UserCF 给用户推荐。
数据集会包括(用户、用户位置、物品、物品位置、物品评分)的记录
比如大众点评的推荐:
推荐系统的冷启动问题指的是,当推荐系统刚部署后,没有用户行为时或物品数据时,推荐系统并不能根据用户行为数据给用户推荐物品。一般分为用户冷启动、物品冷启动和系统冷启动。通常有一些办法可以缓和冷启动问题:
1. 利用用户注册信息推荐:即获取用户的注册信息,然后对用户分类,给用户推荐他所属分类中可能感兴趣的物品。 将关联的查询结果按照一个权重相加,利用的用户信息越多,就能越精准地匹配用户兴趣。
2. 给用户一些内容选择合适的物品启动用户的兴趣:选择一些热门的,有代表性、区分性、多样性的物品推荐给用户。
3. 利用物品的内容信息推荐给用户:可以通过人工筛选出一些用户会感兴趣的物品推荐。
如果一个系统中将各种用户行为、特征和任务都考虑进去,系统会非常复杂,难以配置。因此推荐系统需要由多个推荐引擎组成,每个推荐引擎负责一类特真和一种任务,而推荐系统只是
将推荐引擎的结果按照一定权重或优先级合并、排序,然后返回。
这样的优势在于:每一个引擎代表了一种推荐策率,可通过对单一的引擎调整来优化推荐系统。
如何设计一个推荐引擎成了推荐系统设计的核心部分。
用户特征向量一般包括两种:
通过用户行为生成特征(需要考虑以下几点):
特征 - 物品相关推荐:
在得到用户的特征向量后,根据离线的相关表得到初始化物品推荐表。
每个特征,在相关表中存储和它最相关的 N 个物品的 ID。
一个推荐引擎可以在配置文件中配置很多相关表以及他们的权重,推荐系统启动后会将相关表按配置的权重相加,最终的相关表保存在内存中,给用户推荐时,已经是加权后的相关表了。
候选物品结合(保证推荐结果只包含候选物品集合中的物品):
一般应用于产品需求,希望将某些物品推荐给用户。
过滤模块:
过滤掉不符合要求的物品,一般有以下几种
排名模块:
1. 新颖性排名(对某些旧的但仍然热门的物品降权处理)。
2. 多样性
3. 时间多样性
4. 用户反馈(用户对推荐结果点击情况的反馈)。
个性化推荐的核心还是推荐算法,依赖用户的行为数据,却决于定义的环境维度,不同维度下的算法的表现能力会不一样。
好的推荐系统不仅能预测用户的行为,能扩展用户的视野,帮助用户发现那些他们可能会买,但却不那么容易发现的东西,而非是本来就想要买的东西。