关联规则算法Apriori的学习与SQL简单实现购物篮分析

转载:关联规则算法Apriori的学习与SQL简单实现购物篮分析 关联规则挖掘用于寻找给定数据集中项之间的有趣的关联或相关关系。关联规则揭示了数据项间的未知的依赖关系,根据所挖掘的关联关系,可以从一个数据对象的信息来推断另一个数据对象的信息。例如购物篮分析。牛奶 ⇒ 面包 [支持度:3%,置信度:40%]支持度3%:意味3%顾客同时购买牛奶和面包。置信度40%:意味购买牛...
摘要由CSDN通过智能技术生成

转载:关联规则算法Apriori的学习与SQL简单实现购物篮分析

 

关联规则挖掘用于寻找给定数据集中项之间的有趣的关联或相关关系。

关联规则揭示了数据项间的未知的依赖关系,根据所挖掘的关联关系,可以从一个数据对象的信息来推断另一个数据对象的信息。

例如购物篮分析。牛奶 ⇒ 面包 [支持度:3%,置信度:40%]

支持度3%:意味3%顾客同时购买牛奶和面包。
置信度40%:意味购买牛奶的顾客40%也购买面包。
规则的支持度和置信度是两个规则兴趣度度量,它们分别反映发现规则的有用性和确定性。
这里就使用SQL做简单的购物篮分析(仅实现单维关联规则算法)。

声明1: 使用的数据全部都是随机造出的,因此,分析的结果不代表真实的场景。

声明2: 此次分析过程在Mysql中实现。

建表语句如下:
		
	CREATE TABLE shopcart (
	car VARCHAR(50),
	product VARCHAR(200) 
	) ENGINE=MyISAM DEF
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 数据准备 首先,需要准备购物篮数据集,该数据集包含多个顾客的购买记录,每条记录代表一个顾客购买的商品集合。为了方便演示,这里我们使用一个简单的数据集,包含以下几个顾客的购买记录: ``` 顾客1: 牛奶,面包,鸡蛋 顾客2: 牛奶,面包,饼干 顾客3: 牛奶,面包,鸡蛋,饼干 顾客4: 牛奶,鸡蛋 ``` 将数据集转化为二维数组形式: ``` [[1, '牛奶'], [1, '面包'], [1, '鸡蛋']], [[2, '牛奶'], [2, '面包'], [2, '饼干']], [[3, '牛奶'], [3, '面包'], [3, '鸡蛋'], [3, '饼干']], [[4, '牛奶'], [4, '鸡蛋']] ``` 2. 计算支持度 使用Apriori算法,需要先确定一个最小支持度,过滤出支持度高于最小支持度的项集。这里我们设定最小支持度为50%,即一个商品集合出现的次数占总记录数的50%以上才认为是频繁项集。 首先,需要统计每个商品出现的频次,计算支持度。代码如下: ```python from collections import defaultdict # 统计每个商品出现的次数 item_counts = defaultdict(int) for record in data: for item in record[1:]: item_counts[item] += 1 # 计算支持度 min_support = 0.5 total_records = len(data) frequent_items = {} for item, count in item_counts.items(): support = count / total_records if support >= min_support: frequent_items[(item,)] = support ``` 输出频繁项集: ``` {('牛奶',): 1.0, ('面包',): 1.0, ('鸡蛋',): 0.75, ('饼干',): 0.5} ``` 可以看到,牛奶和面包是出现频率最高的商品,它们的支持度都是100%。 3. 生成候选项集 使用频繁项集生成算法,可以根据频繁项集生成候选项集。在Apriori算法中,候选项集的大小比频繁项集的大小多1。因此,可以先生成大小为2的候选项集,再根据频繁项集生成大小为3的候选项集,以此类推。 生成大小为2的候选项集: ```python # 生成大小为2的候选项集 candidate_items = [] for item1, support1 in frequent_items.items(): for item2, support2 in frequent_items.items(): if item1 != item2: candidate = tuple(sorted(set(item1 + item2))) if candidate not in candidate_items: candidate_items.append(candidate) print(candidate_items) ``` 输出候选项集: ``` [('牛奶', '面包'), ('牛奶', '鸡蛋'), ('面包', '鸡蛋'), ('牛奶', '饼干'), ('面包', '饼干'), ('鸡蛋', '饼干')] ``` 可以看到,生成了6个大小为2的候选项集。 4. 计算支持度和剪枝 根据候选项集,可以统计它们出现的频次,计算支持度。同时,需要进行剪枝操作,过滤掉支持度低于最小支持度的候选项集。 ```python # 计算候选项集支持度 frequent_items = {} for candidate in candidate_items: count = 0 for record in data: if set(candidate).issubset(set(record)): count += 1 support = count / total_records if support >= min_support: frequent_items[candidate] = support print(frequent_items) ``` 输出频繁项集: ``` {('牛奶', '面包'): 1.0, ('牛奶', '鸡蛋'): 0.75, ('面包', '鸡蛋'): 0.75, ('牛奶', '饼干'): 0.5, ('面包', '饼干'): 0.5} ``` 可以看到,生成的候选项集中,有3个是频繁项集,分别是牛奶和面包、牛奶和鸡蛋、面包和鸡蛋。 5. 生成关联规则 根据频繁项集,可以生成关联规则。对于每个频繁项集,可以生成包含该项集的所有子集,然后计算置信度,过滤掉置信度低于最小置信度的规则。 ```python # 生成关联规则 min_confidence = 0.7 rules = [] for itemset, support in frequent_items.items(): if len(itemset) > 1: for i in range(1, len(itemset)): for subset in itertools.combinations(itemset, i): antecedent = subset consequent = tuple(sorted(set(itemset) - set(subset))) if antecedent in frequent_items: confidence = support / frequent_items[antecedent] if confidence >= min_confidence: rules.append((antecedent, consequent, confidence)) print(rules) ``` 输出关联规则: ``` [(('牛奶',), ('面包',), 1.0), (('面包',), ('牛奶',), 1.0), (('牛奶',), ('鸡蛋',), 0.75), (('鸡蛋',), ('牛奶',), 1.0), (('面包',), ('鸡蛋',), 0.75), (('鸡蛋',), ('面包',), 1.0)] ``` 可以看到,根据频繁项集生成了6条关联规则,其中有3条置信度为100%。这些规则可以用来指导促销策略和商品搭配推荐。例如,可以推荐顾客购买牛奶和面包的组合,或者鸡蛋和面包的组合。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值