协同过滤-相似物品推荐

问题背景

当用户在浏览商品详情页的时候,从行为上分析,意味着用户对这个款式和类型的商品感有兴趣,如何准确推荐这些用户感兴趣的商品成了一大问题,在其他电商平台中,经常会有“浏览此商品的顾客也同时浏览”或者“看了又看”的推荐商品场景,如下图Amazon的Customers who bought this item also bought,给顾客推荐“浏览过这个商品的顾客们所买的商品”。那么是怎么进行的呢?

浏览过这个商品的顾客们所买的商品.png

问题分析

根据网上找到的相关资料,这个方式为基于物品的协同过滤算法,通过分析的用户行为数据,计算物品之间的相似度,预测用户喜欢的商品,推荐给用户。

原理-基于物品的协同过滤

协同过滤算法分为以下两类

  • 基于用户的协同过滤算法(user-based collaboratIve filtering)

  • 基于物品的协同过滤算法(item-based collaborative filtering)

简单的说就是:人以类聚,物以群分。这里主要介绍基于物品的协同过滤算法。

基于物品的协同过滤算法,用于计算商品之间的相似度,即对商品 aa 有过行为的用户还对哪些商品有过行为。这里的行为可以是CLICK、FAV、CART和ORDER,代表用户对商品的态度和偏好。如果对商品 aa 有过行为的用户中大部分还对商品 bb 有过行为,则认为商品 aa 和商品 bb 比较相似。

基于物品的协同过滤.png

算法

以商品 aa 和商品 bb 为例,如何计算商品之间的相似度呢:

我们使用下面的公式定义物品的相似度:

其中,|N(i)|是喜欢物品i的用户数,|N(j)|是喜欢物品j的用户数,|N(i)&N(j)|是同时喜欢物品i和物品j的用户数。

从上面的定义看出,在协同过滤中两个物品产生相似度是因为它们共同被很多用户喜欢,两个物品相似度越高,说明这两个物品共同被很多人喜欢。

这里面蕴含着一个假设:就是假设每个用户的兴趣都局限在某几个方面,因此如果两个物品属于一个用户的兴趣列表,那么这两个物品可能就属于有限的几个领域,而如果两个物品属于很多用户的兴趣列表,那么它们就可能属于同一个领域,因而有很大的相似度。

举例,用户A对物品a、b、d有过行为,用户B对物品b、c、e有过行为,等等;

依此构建用户——物品倒排表:物品a被用户A、E有过行为,等等;

建立物品相似度矩阵C:

image.png

其中,C[i][j]记录了同时喜欢物品i和物品j的用户数,这样我们就可以得到物品之间的相似度矩阵W。

那个上面得出来公式应该是

也许到这里会有疑问,怎么跟第一条的公式不一样?

之所会这样,是因为考虑到下面几种情况,加入了相关的优化:

1.如果物品J很热门,很多人喜欢,那么第二条公式中的Wij就会无限接近于1。因此,为了避免推荐出热门的物品,需要对物品J的权重进行惩罚:

第一次公式优化

2.如果一个用户,他是做代理商的,在网站上浏览了很多商品,也进行了加入购物车行为,那么这个用户在系统中就产生了很多的相似度,但是实际上这个用户并不是真的感兴趣,真正的贡献度并不如一个普通用户。因此应该增加IUF参数来修正物品相似度的计算公式:

第二次公式优化

3.特殊用户的行为不纳入计算商品相似度的数据集范围中;

4.对于用户行为稀少的新商品,在上述基于物品的协同过滤算法中被过滤掉了,因此,在最终的推荐结果中不会出现这些商品。

5.行为的权重,不同的行为在计算相似度的时候,权重分配应该不一样;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容