一、简介
本文博主给大家讲解如何在自己开源的电商项目newbee-mall-pro中应用协同过滤算法来达到给用户更好的购物体验效果。
newbee-mall-pro项目地址:
二、协同过滤算法
协同过滤算法是一种基于用户或者物品的相似度来推荐商品的方法,它可以有效地解决商城系统中的信息过载问题。协同过滤算法的实践主要包括以下几个步骤:
- 数据收集和预处理。这一步需要从商城系统中获取用户的行为数据,如浏览、购买、评价等,然后进行一些必要的清洗和转换,以便后续的分析和计算。
- 相似度计算。这一步需要根据用户或者物品的特征或者行为,采用合适的相似度度量方法,如余弦相似度、皮尔逊相关系数、Jaccard指数等,来计算用户之间或者物品之间的相似度矩阵。
- 推荐生成。这一步需要根据相似度矩阵和用户的历史行为,采用合适的推荐策略,如基于邻域的方法、基于模型的方法、基于矩阵分解的方法等,来生成针对每个用户的个性化推荐列表。
- 推荐评估和优化。这一步需要根据一些评价指标,如准确率、召回率、覆盖率、多样性等,来评估推荐系统的效果,并根据反馈信息和业务需求,进行一些参数调整和算法优化,以提高推荐系统的性能和用户满意度。
在原有的商城首页为你推荐栏目是使用后台配置的商品列表,基于人为配置。在项目商品用户持续增长的情况下,不一定能给用户推荐用户可能想要的商品。
因此在v2.4.1版本中,商城首页为你推荐栏目添加了协同过滤算法。按照UserCF基于用户的协同过滤、ItemCF基于物品的协同过滤。 实现了两种不同的推荐逻辑。
-
UserCF:基于用户的协同过滤。当一个用户A需要个性化推荐的时候,我们可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的,而用户A没有听说过的物品推荐给A。
假设用户 A 喜欢物品 A、物品 C,用户 B 喜欢物品 B,用户 C 喜欢物品 A 、物品 C 和物品 D;从这些用户的历史喜好信息中,我们可以发现用户 A 和用户 C 的口味和偏好是比较类似的,同时用户 C 还喜欢物品 D,那么我们可以推断用户 A 可能也喜欢物品 D,因此可以将物品 D 推荐给用户 A。具体代码在
ltd.newbee.mall.recommend.core.UserCF
中。 -
itemCF:基于物品的协同过滤。预先根据所有用户的历史偏好数据计算物品之间的相似度,然后把与用户喜欢的物品相类似的物品推荐给用户。
假如用户A喜欢物品A和物品C,用户B喜欢物品A、物品B和物品C,用户C喜欢物品A,从这些用户的历史喜好中可以认为物品A与物品C比较类似,喜欢物品A的都喜欢物品C,基于这个判断用户C可能也喜欢物品C,所以推荐系统将物品C推荐给用户C。 具体代码在
ltd.newbee.mall.recommend.core.ItemCF
中。
三、推荐算法代码实践
3.1 数据收集和预处理
在newbee-mall-pro中,我们基于用户下单的商品数据进行收集和预处理。
/**
* 根据所有用户购买商品的记录进行数据手机
*
* @return List<RelateDTO>
*/
@Override
public List<RelateDTO> getRelateData() {
List<RelateDTO> relateDTOList = new ArrayList<>();
// 获取所有订单以及订单关联商品的集合
List<Order> newBeeMallOrders = orderDao.selectOrderIds();