关联规则压缩与协同过滤:个性化推荐的深度解析
1. 关联规则信息压缩
在审查规则时,我们发现信息可以被压缩。例如规则 #1,从置信度来看它似乎是一个很有前景的规则,但实际上可能毫无意义。规则 #1 表述为:“如果购买了意大利烹饪书籍,那么就会购买烹饪书籍”,很明显意大利烹饪书籍只是烹饪书籍的一个子集。规则 14、15 和 16 涉及相同的三本书籍,只是前件和后件不同,规则 17 和 18 以及 19 和 20 也是如此。通过查找具有相同支持度的行,很容易追踪到这样的规则对和规则组。不过,这并不意味着这些规则没有用,相反,从商业角度来看,它可以减少需要考虑采取行动的项集数量。
2. 协同过滤概述
推荐系统是提供大量产品或服务的网站的重要组成部分。像亚马逊提供数百万种不同的产品,网飞有数千部电影可供租赁,谷歌搜索大量网页,互联网广播网站如 Spotify 和 Pandora 包含各种艺术家的大量音乐专辑,旅游网站提供众多目的地和酒店,社交网络网站有许多群组。推荐引擎根据用户信息以及相似用户的信息为用户提供个性化推荐,这里的信息指的是表明偏好的行为,如购买、评分和点击。
协同过滤是推荐系统常用的技术,它基于从大量项目中为特定用户识别相关项目(“过滤”),同时考虑许多用户的偏好(“协作”)。《财富》杂志的文章《亚马逊的推荐秘诀》描述了亚马逊不仅使用协同过滤提供个性化产品推荐,还为每个用户定制整个网站界面。其推荐系统基于一些简单元素,如用户过去购买的商品、虚拟购物车中的商品、评分和喜欢的商品,以及其他客户查看和购买的商品,亚马逊将这种算法称为“项到项协同过滤”,并用于为回头客高度定制浏览体验。
3. 协同过滤的数据类型和格式
协同过滤需要所有项目 - 用户信息。对于每个项目 - 用户组合,我们应该有用户对该项目偏好的某种度量,偏好可以是数值评分或二元行为,如购买、点赞或点击。
对于 n 个用户(u1, u2, …, un)和 p 个项目(i1, i2, …, ip),数据可以看作是一个 n×p 的矩阵,n 行代表用户,p 列代表项目。每个单元格包含对应于用户对项目偏好的评分或二元事件。通常并非每个用户都会购买或评分每个项目,因此购买矩阵会有很多零(稀疏矩阵),评分矩阵会有很多缺失值,这些缺失值有时表示“不感兴趣”。
当 n 和 p 都很大时,将偏好数据(ru,i)存储在 n×p 的表中不切实际,数据可以存储为许多三元组(Uu, Ii, ru,i)的行,每个三元组包含用户 ID、项目 ID 和偏好信息。
| 项目 ID | I1 | I2 | … | Ip |
|---|---|---|---|---|
| 用户 ID | ||||
| U1 | r1,1 | r1,2 | … | r1,p |
| U2 | r2,1 | r2,2 | … | r2,p |
| … | … | … | … | … |
| Un | rn,1 | rn,2 | … | rn,p |
4. 网飞大奖竞赛案例
2006 年,北美最大的电影租赁服务提供商网飞宣布了一项价值一百万美元的竞赛,目的是改进其名为 Cinematch 的推荐系统。参赛者获得了多个数据集,每个电影一个数据集,每个数据集包含该电影的所有客户评分(以及时间戳)。我们可以将其看作一个大型组合数据集 [客户 ID, 电影 ID, 评分, 日期],其中每条记录包含特定客户在特定日期对特定电影的评分,评分范围为 1 - 5 星。
有趣的是,获胜团队不仅考虑了电影的评分,还考虑了某个客户是否对某部电影进行了评分,这一信息比单纯的 1 - 5 星评分信息更能反映客户的偏好。这表明将评分信息转换为已评分/未评分的二元矩阵是有用的。
5. 用户基协同过滤
用户基协同过滤通过找到具有相似偏好的用户,并推荐他们喜欢但目标用户尚未购买的项目来为用户生成个性化推荐。该算法有两个步骤:
1.
寻找相似用户
:通过比较目标用户的偏好与其他用户的偏好,找到与目标用户最相似的用户(邻居)。这需要选择一个距离(或接近度)度量来衡量目标用户与其他用户之间的距离,常用的接近度度量是皮尔逊相关系数和余弦相似度。
-
皮尔逊相关系数
:对于用户 U1 和 U2,其相关系数定义为:
[Corr(U1, U2) = \frac{\sum(r_{1,i} - \bar{r}
1)(r
{2,i} - \bar{r}
2)}{\sqrt{\sum(r
{1,i} - \bar{r}
1)^2}\sqrt{\sum(r
{2,i} - \bar{r}
2)^2}}]
其中求和仅针对两个用户共同评分的项目。例如,在网飞的小样本数据中,计算客户 30878 和客户 823519 的相关系数,先计算他们的平均评分:
(r
{30878} = (4 + 1 + 3 + 3 + 4 + 5) / 6 = 3.333)
(r_{823519} = (3 + 1 + 4 + 4 + 5) / 5 = 3.4)
共同评分的电影 ID 为 1、28 和 30,计算得到相关系数为 0.34。
-
余弦相似度
:它与相关系数公式的不同之处在于不减去均值,减去均值在相关系数公式中用于调整用户不同的整体评分方式。例如,上述两个网飞客户的余弦相似度为 0.972。当数据为二元矩阵时,余弦相似度必须在任一用户购买的所有项目上计算,而不能仅限于共同购买的项目。
2.
推荐项目
:只考虑目标用户尚未购买的项目,推荐邻居用户最喜欢的项目。对于二元购买数据,最佳项目是最常购买的项目;对于评分数据,可能是评分最高、评分最多或两者的加权。
然而,协同过滤存在冷启动问题,即无法直接为新用户或新项目创建推荐。当数据库中的用户数量很大时,最近邻方法的计算成本可能很高,一种解决方案是使用聚类方法将用户按偏好分组,然后测量目标用户与每个聚类的距离,不过聚类的代价是推荐的准确性会降低。
6. 项目基协同过滤
当用户数量远大于项目数量时,找到相似项目比找到相似用户在计算上更便宜(且更快)。当用户对某个特定项目表示兴趣时,项目基协同过滤算法有两个步骤:
1.
找到相关项目
:找到与目标项目被共同评分或共同购买的项目。
2.
推荐最佳项目
:在相似项目中推荐最受欢迎或相关性最高的项目。
例如,在网飞的小样本数据中,计算电影 1 和电影 5 的相关性为 0,这是因为对电影 1 评分的用户对电影 5 给出了相反的评分。可以离线计算所有电影之间的相似度,实时为对某部电影评分较高的用户查找电影相关表,并推荐与该用户新评分电影正相关性最高的电影。
根据开发亚马逊项到项推荐系统的研究人员的行业报告,项目基算法可以实时生成推荐,适用于大规模数据集,并能生成高质量的推荐。但项目基推荐的缺点是项目之间的多样性较少,推荐往往比较明显。
以下是使用 recommenderlab 包对类似网飞数据的模拟数据进行协同过滤的 R 代码:
# simulate matrix with 1000 users and 100 movies
m <- matrix(nrow = 1000, ncol = 100)
# simulated ratings (1% of the data)
m[sample.int(100*1000, 1000)] <- ceiling(runif(1000, 0, 5))
## convert into a realRatingMatrix
r <- as(m, "realRatingMatrix")
library(recommenderlab)
# user-based collaborative filtering
UB.Rec <- Recommender(r, "UBCF")
pred <- predict(UB.Rec, r, type="ratings")
as(pred, "matrix")
# item-based collaborative filtering
IB.Rec <- Recommender(r, "IBCF")
pred <- predict(IB.Rec, r, type="ratings")
as(pred, "matrix")
7. 协同过滤的优缺点
协同过滤依赖于用户偏好的主观信息。如果数据库包含足够多的相似用户,它可以为“长尾”项目提供有用的推荐,但它不能为新用户或新项目生成推荐,有多种方法可以应对这一挑战。
用户基协同过滤关注高评分或偏好的项目,但对低评分或不需要的项目数据不敏感,因此不能直接用于检测不需要的项目。当用户数量非常大时,协同过滤的计算会变得困难,解决方案包括项目基算法、用户聚类和降维,最常用的降维方法是奇异值分解(SVD)。
虽然协同过滤的输出常被称为“预测”,但它本质上是无监督方法。它可以为用户生成预测评分或购买指示,但实际中通常没有真实的结果值。提高协同过滤推荐质量的一个重要方法是获取用户反馈,许多推荐系统会鼓励用户对推荐提供反馈。
8. 协同过滤与关联规则的比较
协同过滤和关联规则都是用于生成推荐的无监督方法,但它们在几个方面有所不同:
1.
频繁项集与个性化推荐
:关联规则寻找频繁的项目组合,仅为这些项目提供推荐;而协同过滤为每个项目提供个性化推荐,适合满足具有不寻常品味的用户。关联规则需要大量的“购物篮”(交易)数据来找到包含特定项目组合的足够多的购物篮,而协同过滤不需要很多“购物篮”,但需要尽可能多的用户对尽可能多的项目的数据。关联规则在购物篮级别操作,而协同过滤在用户级别操作。
2.
交易数据与用户数据
:关联规则基于项目在许多交易/购物篮中的共同购买来推荐项目;而协同过滤基于即使是少数其他用户的共同购买或共同评分来推荐项目。考虑不同的购物篮在相同项目被反复购买时有用,考虑不同的用户在每个项目通常只被购买/评分一次时有用。
3.
二元数据和评分数据
:关联规则将项目视为二元数据(1 = 购买,0 = 未购买),而协同过滤可以处理二元数据或数值评分。
4.
单个或多个项目
:在关联规则中,前件和后件可以各自包含一个或多个项目,推荐可能是感兴趣项目与多个项目的捆绑;而在协同过滤中,相似度是在项目对或用户对之间测量的,推荐可能是单个项目或多个不相关的单个项目。
这些区别在非热门项目的购买和推荐中更为明显。当考虑为购买热门项目的用户推荐时,关联规则和项目基协同过滤可能会为单个项目给出相同的推荐,但用户基推荐可能会有所不同。例如,一个每周购买牛奶和很少被其他客户购买的无麸质产品的客户,关联规则可能会推荐购买饼干,项目基协同过滤也可能推荐饼干,而用户基协同过滤更有可能推荐客户未购买的热门无麸质产品。
关联规则压缩与协同过滤:个性化推荐的深度解析
9. 协同过滤与关联规则应用场景分析
为了更清晰地理解协同过滤和关联规则在不同场景下的应用,我们可以通过以下表格进行对比分析:
| 比较维度 | 关联规则 | 协同过滤 |
| ---- | ---- | ---- |
| 推荐针对性 | 生成通用、非个性化规则,适用于设置通用策略,如产品摆放、诊断测试顺序 | 生成用户特定的个性化推荐,满足用户个性化需求 |
| 数据需求 | 需要大量交易数据(“购物篮”)以找到特定项目组合 | 不需要大量“购物篮”,但需要大量用户对众多项目的数据 |
| 数据类型处理 | 主要处理二元数据(购买/未购买) | 可处理二元数据或数值评分数据 |
| 推荐项目形式 | 推荐可能是项目组合捆绑 | 推荐可能是单个项目或多个不相关单个项目 |
| 适用项目类型 | 适合热门项目组合推荐 | 更适合“长尾”项目以及满足用户特殊偏好的推荐 |
从这个表格可以看出,关联规则和协同过滤各有其适用的场景。关联规则在处理大量交易数据、寻找通用的项目组合关系方面表现出色,适合用于制定一些通用的商业策略。而协同过滤则更注重用户的个性化需求,能够根据用户的偏好为其提供更贴合个人口味的推荐。
10. 协同过滤技术的优化思路
协同过滤虽然是一种强大的推荐技术,但也存在一些问题,如冷启动问题和计算复杂度高的问题。针对这些问题,我们可以进一步探讨优化思路。
冷启动问题的解决
- 引入外部数据 :可以引入用户的基本信息(如年龄、性别、地理位置等)和项目的元数据(如电影的类型、书籍的主题等)。例如,对于新用户,可以根据其年龄和性别推荐一些热门的、符合该群体偏好的项目。
- 基于内容的推荐初始化 :在用户没有足够的行为数据时,根据项目的内容特征进行推荐。比如,对于新电影,可以根据其剧情简介、演员阵容等推荐给可能感兴趣的用户。
计算复杂度优化
- 分布式计算 :利用分布式计算框架(如 Hadoop、Spark 等)将计算任务分配到多个节点上进行并行计算,从而提高计算效率。
- 采样技术 :在大规模数据集上进行采样,只使用部分数据进行计算,以减少计算量。但需要注意采样的合理性,避免影响推荐的准确性。
11. 协同过滤的实际应用案例分析
为了更好地理解协同过滤在实际中的应用,我们以电商平台为例进行分析。
假设一个电商平台有大量的用户和商品,平台希望通过协同过滤为用户提供个性化的商品推荐。
- 数据收集 :平台收集用户的购买记录、浏览记录、商品评分等数据,构建用户 - 商品矩阵。
- 相似度计算 :使用皮尔逊相关系数或余弦相似度等方法计算用户之间或商品之间的相似度。
- 推荐生成 :根据相似度找到与目标用户相似的用户或与目标商品相似的商品,然后为目标用户推荐相似用户购买过但目标用户未购买的商品,或者推荐与目标商品相似的商品。
以下是一个简化的流程图,展示了电商平台协同过滤推荐的基本流程:
graph LR
A[数据收集] --> B[构建用户 - 商品矩阵]
B --> C[相似度计算]
C --> D[找到相似用户/商品]
D --> E[推荐生成]
12. 关联规则与协同过滤的结合应用
在实际应用中,关联规则和协同过滤并不是相互排斥的,而是可以结合使用,以发挥各自的优势。
例如,在电商平台中,可以先使用关联规则找出频繁购买的商品组合,然后将这些组合作为基础推荐给用户。同时,使用协同过滤为用户提供个性化的推荐,对关联规则的推荐进行补充和优化。
具体步骤如下:
1.
关联规则挖掘
:使用 Apriori 等算法挖掘频繁项集和关联规则。
2.
基础推荐生成
:根据关联规则生成通用的商品组合推荐。
3.
协同过滤推荐
:使用协同过滤算法为用户生成个性化推荐。
4.
推荐融合
:将关联规则的推荐和协同过滤的推荐进行融合,为用户提供更全面、更个性化的推荐。
13. 总结
综上所述,关联规则和协同过滤都是重要的推荐技术,它们在不同的场景下各有优劣。关联规则适合寻找频繁的项目组合,制定通用的商业策略;而协同过滤则更擅长为用户提供个性化的推荐,满足用户的特殊需求。
在实际应用中,我们可以根据具体的业务需求和数据特点选择合适的推荐方法,也可以将两者结合使用,以提高推荐的准确性和个性化程度。同时,针对协同过滤存在的冷启动和计算复杂度高的问题,我们可以采用相应的优化策略,进一步提升推荐系统的性能。
随着数据量的不断增加和技术的不断发展,推荐系统将在更多的领域得到应用,为用户提供更加精准、个性化的服务。我们需要不断地研究和探索,以适应不断变化的市场需求。
超级会员免费看
1231

被折叠的 条评论
为什么被折叠?



