今天我们开始来学习相似性推荐和协同推荐,前面已经介绍过购物篮与关联规则,通过之前的内容我们了解到购物篮与关联规则并不是真正的个性化推荐,而是通过购物发现强关联商品,如果客户购买了其中一件就给他推荐另一件,也就是说和客户买的东西有关,而不是和人有关。本次我们介绍的相似性推荐和协同过滤是针对的人的。
基于相似性的推荐流程分为三个步骤:(1)收集用户偏好,(2)根据用户偏好计算相似性,(3)匹配用户,推荐产品。
未经许可请勿转载
更多数据分析内容参看这里
一. 如何收集用户偏好
有各种各样的用户行为都可以收集为用户偏好,如下所示
大多数情况我们提取的用户行为都多于一种,如何组合这些不同的用户行为,基本上有以下两种方式:
(1)将不同的行为分组
一般可以分为“查看”和“购买”等等,然后基于不同的行为,计算不同的用户 / 物品相似度。
(2)加权操作
根据不同行为反映用户喜好的程度将它们进行加权,得到用户对于物品的总体喜好。一般来说,显式的用户反馈比隐式的权值大,但比较稀疏,毕竟进行显示反馈的用户是少数;同时相对于“查看“,”购买”行为反映用户喜好的程度更大,比如:“关注”,“加入购物车”,“下订单后取消”,“付款”反应用户的喜好度不同。但这也因应用而异。
二. 相似性的计算
收集了用户行为数据,经过一定的预处理和归一化,得到一个用户偏好的二维矩阵,一维是用户列表,另一维是物品列表,值是用户对物品的偏好,一般是 [0,1] 或者 1, 1] 的浮点数值。在用户 物品偏好的二维矩阵中,我们可以将一个用户对所有物品的偏好作为一个矢量来计算用户之间的相似度,或者将所有用户对某个物品的偏好作为一个矢量来计算物品之间的相似度。相似度和距离在定义上是相反的概念, 常用的距离衡量方式如下:
- 闵式(Minkowski)距离/欧式距离 ,
- 杰卡德(Jaccard)相似系数
- 余弦相似度(cosine similarity)
- Pearson相似系数
- 相对熵(K-L距离)
- Hellinger距离
欧式距离(Euclidean Distance)是最易于理解的一种距离计算方法,源自欧式空间中
两点间的距离公式
上图中,行1,2,3代表三个用户,列1,2,3,4,5代表五个产品,矩阵的每个值代表了用户对产品的评分,并经过了归一化处理。通过欧式距离我们可以计算出三个用户之间的关系。R中实现的代码很简单:dist(aa,p=2)
下面我们再来看一下杰卡德相似系数,它一般用在布尔值类型数据上。两个集合 A 和 B 的交集元素在 A B 的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号 J(A,B) 表示。与杰卡德相似系数相反的概念是杰卡德距离 Jaccard distance) 。杰卡德距离可用如下公式表示ÿ