网站开发构建工具,用模板做企业网站,青岛做网站的好公司,企业网站剖析关联规则分析 事务库 上表所示的购物篮数据即是一个事务库#xff0c;该事务库记录的是用户行为的数据。 事务 上表事务库中的每一条记录被称为一笔事务。在购物篮事务中#xff0c;每一次购物行为即为一笔事务#xff0c;例如第一行数据“用户1购买商品A,B,C”即为一条事…关联规则分析 事务库 上表所示的购物篮数据即是一个事务库该事务库记录的是用户行为的数据。 事务 上表事务库中的每一条记录被称为一笔事务。在购物篮事务中每一次购物行为即为一笔事务例如第一行数据“用户1购买商品A,B,C”即为一条事务。 项和项集 在购物篮事务中每样商品代表一个项项的集合称为项集。每样商品的组合构成项集例如“A,B”、 “A,C”、 “B,C”、 “A,B,C”都是一个项集其实也就是不同商品的组合。 关联规则 关联规则是形如X → Y的表达式X称为前件Y称为后件。 注意X和Y不是指单一的商品而是指上面提到的项集比如其形式可以为{A, B} →{C}其含义就是如果购买商品A和B的用户也会买C。 支持度(Support) 项集的支持度定义为包含该项集的事务在所有事务中所占的比例。 频繁项集 支持度大于等于人为设定的阈值该阈值也称为最小支持度的项集即为频繁项集其实也就是指该项集在所有事务中出现的较为频繁。 置信度(Confidence) 置信度表示在关联规则的先决条件X发生的条件下关联结果Y发生的概率
在购物篮事务当中关联规则X → Y的置信度为购买商品X的基础上购买商品Y的概率P(Y|X)据公式有 强关联规则
寻找强关联规则的主要步骤
先寻找满足最小支持度的频繁项集在频繁项集中寻找到满足最小置信度的关联规则
提升度(Lift)
提升度表示先购买X对Y的概率的提升作用用来判断规则是否有实际价值即使用规则后商品在购物车中出现的频率是否高于商品单独出现在购物车中的频率。如果大于1说明规则有效小于1则无效等于1则表示X与Y相互独立。 满足最小支持度和最小置信度的规则叫做“强关联规则”。然而强关联规则里又分为有效的强关联规则和无效的强关联规则。具体划分情况如下 若Lift(X→Y)1则规则“X→Y”是有效的强关联规则。
若Lift(X→Y)1则规则“X→Y”是无效的强关联规则。
若Lift(X→Y) 1则表示X与Y相互独立。 注意 关联规则分析与协同过滤算法都可以用来作为推荐系统的实现但仍有区别 协同过滤算法是基于用户或商品之间的距离或相似度进行推荐关联规则分析是通过寻找强关联规则后进行推荐 Apriori
Apriori 是一种数据挖掘算法用于发现数据集中的频繁项集和关联规则。它通常用于市场篮分析以确定哪些商品通常一起购买。这个算法基于先验原则它假设如果一个项集是频繁的那么它的所有子集也必须是频繁的。这一假设有助于减少搜索空间提高算法的效率
Apriori算法步骤
设定最小支持度和最小置信度根据最小支持度找出所有的频繁项集根据最小置信度发现强关联规则
以购物篮数据演示Apriori算法的计算步骤数据如下所示 设定最小支持度和最小置信度 首先设置最小支持度为2/5也即40%其次设置最小置信度为4/5也即80% 根据最小支持度找出所有的频繁项集 Apriori算法采用了一个精巧的思路来加快运算速度 先计算长度为1的项集然后挖掘其中的频繁项集再将长度为1的频繁项集进行排列组合从中挖掘长度为2的频繁项集然后以此推。核心逻辑是一个迭代判断的思想如果连长度为n-1的项集都不是频繁项集那就不用考虑长度为n的项集了例如如果在迭代的过程发现{A, B, C}不是频繁项集那么{A, B, C, D}必然不是频繁项集也就不用去考虑它了。 首先计算长度为1的候选项集扫描交易数据集统计每种商品出现的次数如下表 所示 将长度为1的频繁项集进行两两组合形成长度为2的候选集扫描交易数据集统 计各个候选项集在购物篮事务中出现的次数如下表所示 将长度为2的频繁项集进行两两组合形成长度为3的候选集扫描交易数据集统计各个候选项集在购物篮事务中出现的次数如下表所示 两个数据之间所以我们需要选择长度大于1的频繁项集长度大于1的所有频繁项 集如下表所示 根据最小置信度发现强关联规则
简单代码
transactions [[A, B, C], [A, B], [B, C], [A, B, C, D], [B, C, D]]from apyori import apriori
# 调用apriori函数指定最小支持度和最小置信度
rules apriori(transactions, min_support0.4, min_confidence0.8)
# 将生成器对象转化成列表
results list(rules)for i in results: # 遍历results中的每一个频繁项集for j in i.ordered_statistics: # 获取频繁项集中的关联规则X j.items_base # 关联规则的前件Y j.items_add # 关联规则的后件x , .join([item for item in X]) # 连接前件中的元素y , .join([item for item in Y]) # 连接后件中的元素if x ! : # 防止出现关联规则前件为空的情况print(x → y) # 通过字符串拼接的方式更好呈现结果