关联规则分析也是一种比较常见的推荐算法,主要是根据历史数据统计不同规则出现的关系,比如:X−>Y X->YX−>Y,表示X XX事件发生后,Y YY事件也会有一定概率发生。
关联规则分析最著名的就是“啤酒-尿布”的经典案例,沃尔玛的超市管理人员通过数据发现,很多买尿布的人大概率事件会去购买啤酒。这是因为在美国很多妈妈在家带孩子,所以去超市买尿布的任务就交给了爸爸,而一般爸爸都会在买尿布的时候顺手买一罐啤酒喝,所以明明是不相关的两个东西就有了很大的关联。
关联规则分析的最终目标就是要找出强关联规则。一般使用Apriori 、FP−Growth、 Eclat算法。这里我们主要分析一下Apriori 。
Apriori算法
Apriori算法是生成频繁集的一种算法。Apriori原理有个重要假设,如果某个项集是频繁的,那么它的所有子集势必也是频繁的。如果一个项集是非频繁项集,那么它所对应的超集就全都是非频繁项集。传统的Apriori算法的计算量很大,当商品数据量大时基本上效率很低,所以后来有FP-Tree算法优化了该算法。
在电商平台中,常用的关联规则应用是单品推荐单品,即一般只需要知道频繁2项集即可。而且商品并不是全部平等销售的,组合、搭售、买赠、企业采购等订单都会影响频繁集的生成,若仅用支持度衡量物品之间的关联性,很容易导致出现假性关联。
在关联规则中,因为支持度表示在历史中A和B同时购买的概率,置信度表示A推荐B的可信程度。由此可以采用提升度=支持度(Support)*置信度(Confidence )的方式来表示A推荐B而A和B同时购买的概率。这样相比于单纯使用支持度更全面,同时避免了支持度中等或置信度中等的关联规则被淘汰。

- 实例分析
假设用户会同时购买多个手机,我们就不管手机用途了,送人也好,买了摔也行,我们搜集了下面四个用户的购买记录:

假设我们的最小支持度为0.5,最小置信度为0.75。首先计算最少个数项集的支持度
因为最小支持度为0.5,所以 {XR} 不符合,直接被剔除。将项集个数增加一位,如果拓展项集有子集{XR} ,直接去掉。




置信度
表示了这条规则有多大程度上值得可信。设条件的项的集合为A,结果的集合为B。置信度计算在A中,同时也含有B的概率。即Confidence(A==>B)=P(B|A)。例 如计算"如果Orange则Coke"的置信度。
支持度
计算在所有的交易集中,既有A又有B的概率。
计算每个规则的支持度,置信度,提升度。首先作变量声明:
f->i 表示具备特征f的用户购买商品i的事件
sf,i 表示规则f->i的支持度
cf,i 表示规则f->i的置信度
sf,i 计算方法为:统计表3中同时满足特征=f,商品=i,用户是否购买=0的记录条数记为
规则选择,规则可以通过以下条件进行过滤。

条件1:大于等于某个值,参考值取20-100。
条件2:对所有规则的支持度做降序,取75位数为参考值,sf,i>=这个值。
条件3:对所有规则的置信度做降序,取75位数为参考值,cf,i>=这个值。
Step4:给用户推荐商品
给定一个用户u和一个商品i,通过上述方法生成用户u的特征集合记为F. 我们用该用户特征集合下,所有对i有效特征的均值衡量用户u对该物品的购买可能性p(u,i):

通过上述公式对全库商品求top 10得分的商品推荐给用户。在实际计算当中,并非会进行全库计算,而是采用特征索引技术进行减少大量冗余计算。
代码
import sys
from itertools import chain, combinations
from collections import defaultdict
from optparse import OptionParser
def subsets(arr):
""" Returns non empty subsets of arr"""
return chain(*[combinations(arr, i + 1) for i, a in enumerate(arr)])
def returnItemsWithMinSupport(itemSet, transactionList, minSupport, freqSet):
"""calculates the support for items in the itemSet and returns a subset
of the itemSet each of whose elements satisfies the minimum support"""
_itemSet = set()
localSet = defaultdict(int)
for item in itemSet:
for transaction in transactionList:
if item.issubset(transaction):
freqSet[item] += 1
localSet[item] += 1
for item, count

本文深入探讨关联规则分析及FP-Growth算法在数据挖掘中的应用,详细讲解Apriori算法原理,以及如何利用FP-Tree优化频繁项集生成,提高推荐系统效率。
最低0.47元/天 解锁文章
2165

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



