对于商品推荐模型,在上一家公司时,就当做课题进行了研究、学习,并取得一定的成果,现在就发博文贴出来,供后面再回头看看,也供大伙参考。
商品推荐模型可以分为两种:基于内容推荐、协同过滤推荐
一:基于内容的推荐
举个简单的小例子,我们已知道
用户u1喜欢的电影是A,B,C
用户u2喜欢的电影是A, C, E, F
用户u3喜欢的电影是B,D
我们需要解决的问题是:决定对u1是不是应该推荐F这部电影
基于内容的做法:要分析F的特征和u1所喜欢的A、B、C的特征,需要知道的信息是A(战争片),B(战争片),C(剧情片),如果F(战争片),那么F很大程度上可以推荐给u1,这是基于内容的做法,你需要对item进行特征建立和建模。
二:基于协同过滤的推荐
举个简单的小例子,我们已知道
用户u1喜欢的电影是A,B,C
用户u2喜欢的电影是A, C, E, F
用户u3喜欢的电影是B,D
我们需要解决的问题是:决定对u1是不是应该推荐F这部电影
协同过滤的做法:那么你完全可以忽略item的建模,因为这种办法的决策是依赖user和item之间的关系,也就是这里的用户和电影之间的关系。我们不再需要知道ABCF哪些是战争片,哪些是剧情片,我们只需要知道用户u1和u2按照item向量表示,他们的相似度比较高,那么我们可以把u2所喜欢的F这部影片推荐给u1。
基于系统过滤的推荐分为以下三类:
1.基于用户的协同过滤推荐
2.基于项目的协同过滤推荐
3.基于模型的协同过滤推荐
1.基于用户的协同过滤推荐
基于用户的协同过滤推荐算法:先使用统计技术寻找与目标用户有相同喜好的邻居。然后根据目标用户的邻居的喜好产生向目标用户的推荐。
基本原理就是利用用户访问行为的相似性来互相推荐用户可能感兴趣的资源,如下图:
上图示意出基于用户的协同过滤推荐机制的基本原理
假设用户 A 喜欢物品 A、物品 C,用户 B 喜欢物品 B,用户 C 喜欢物品 A 、物品 C 和物品 D;那么从用户的历史喜好信息中,我们可以发现用户A和用户C的口味和偏好是比较类似的,同时C还喜欢物品D,那么我们可以推断用户A可能也喜欢物品D,因此可以将物品 D 推荐给用户 A。
2.基于项目的协同过滤推荐
根据所有用户对物品或者信息的评价,发现物品和物品之间的相似度,然后根据用户的历史偏好信息将类似的物品推荐给该用户
上图表明基于项目的协同过滤推荐的基本原理:用户A喜欢物品A和物品C,用户B喜欢物品A、物品B和物品C,用户C喜欢物品A,从这些用户的历史喜好中可以认为物品A与物品C比较类似,喜欢物品A的都喜欢物品C,基于这个判断用户C可能也喜欢物品C,所以推荐系统将物品C推荐给用户C。
3.基于模型的协同过滤推荐
基于模型的协同过滤推荐就是基于样本的用户喜好信息,训练一个推荐模型,然后根据实时的用户喜好的信息进行预测,计算推荐。
基于协同过滤的推荐机制是现今应用最为广泛的推荐机制,它有以下几个显著的优点:
它不需要对物品或者用户进行严格的建模,而且不要求物品的描述是机器可理解的,所以这种方法也是领域无关的。
这种方法计算出来的推荐是开放的,可以共用他人的经验,很好的支持用户发现潜在的兴趣偏好。
它也存在以下几个问题:
a.方法的核心是基于历史数据,所以对新物品和新用户都有“冷启动”的问题。
物品冷启动就是指无法将新加入的物品推荐给相关用户的问题。
用户冷启动就是指无法给新加入的用户进行推荐的问题
b.推荐的效果依赖于用户历史偏好数据的多少和准确性。
c.在大部分的实现中,用户历史偏好是用稀疏矩阵进行存储的,而稀疏矩阵上的计算有些明显的问题,包括可能少部分人的错误偏好会对推荐的准确度有很大的影响等等。
d.对于一些特殊品味的用户不能给予很好的推荐。
e.由于以历史数据为基础,抓取和建模用户的偏好后,很难修改或者根据用户的使用演变,从而导致这个方法不够灵活。
主要流程图如下:
Spark基于协同过滤的推荐主要有以下步骤:
1.准备样本数据(数据来源)
一般情况下,推荐引擎所需要的数据源包括: