啤酒与尿布的蝴蝶效应——关联分析

一、什么是关联分析

关联分析:世间万物都有一定的联系

  1. 定义:发现存在于大量数据集中的关联性或相关性,从而描述了一个事物中某些属性同时出现的规律和模式。

  2. 应用场景【超市购物、服装搭配、图书购买等等】

  3. 实质:关联规则学习

二、关联分析的基本概念

1、项、项集

项:一个个分析对象
项集:若干个项组成的集合

举例说明,今天去超市购买苹果、葡萄、包子、馒头,这些称之为项,今天买的总的称之为项集。

2、支持度:项集出现的频繁程度

含义:项集在数据集中出现的频率即项集出现的次数除以数据集中的数量
数学表达式为:
P ( A ) = c o u n t ( A ) / c o u n t ( d a t a s e t ) P(A)=count(A)/count(dataset) P(A)=count(A)/count(dataset)

3、置信度:体现关联规则的可靠程度

含义:产品A与产品B出现的次数除以A出现的次数
数学表达式为:
置 信 度 ( A − − > B ) = c o u n t ( A B ) / c o u n t ( A ) = P ( A B ) / P ( A ) = P ( B ∣ A ) 置信度(A-->B)=count(AB)/count(A) =P(AB)/P(A)=P(B|A) A>B=count(AB)/count(A)=P(AB)/P(A)=P(BA)

上述表达式的实质是概率公式,意为在A发生的前提下,B发生的概率。
对应现实生活中的啤酒和尿不湿捆绑销售,则表示为啤酒和尿不湿放在一定的前提下,用户在买啤酒的时候有多大的概率会买尿不湿。

4、提升度:置信度相对于支持度来说提升了多少

数学表达式为:
提 升 度 ( A − − > B ) = P ( B ∣ A ) / P ( B ) = P ( A B ) / P ( A ) ∗ P ( B ) 提升度(A-->B)=P(B|A)/P(B)=P(AB)/P(A)*P(B) A>B=P(BA)/P(B)=P(AB)/P(A)P(B)

提升度的取值范围:
  1. 大于1:产品A和产品B捆绑时B卖出的几率比单独卖产品B卖出的几率大,有研究的意义
  2. 等于1:捆绑卖与单独卖的效益相同,转换成数学思维的话就是产品A和产品B之间是独立的没有联系的。
  3. 小于1:捆绑卖反而没有单独卖效益高,产生了负作用。

5、频繁项集:项集出现比较频繁

支持度是描述项集出现的频繁程度,因此针对支持度设定一个阈值【标准】,大于等于阈值则被称之为频繁项集

三、关联分析过程

1. 在数据集中,找出频繁项集

首先看一下组合的流程图:

数据集
1
2
3
12
13
23
123

以上的流程图展示了,各项之间的组合,第一层是项,后两层是项集。
具体操作原理:
4. 遍历项,此时的每个项就是一个项集
5. 计算每个项集的支持度
6. 得到支持度大于指定阈值的项集

2.根据频繁项集生成关联规则

1.将符合条件的频繁项集拆分成两个非空子集,则这两个非空子集就构成关联规则。
2.针对每个规则分别计算置信度、提升度,选择符合要求且合适的关联规则

四、算法原理

1、Apriori算法

上述的寻找频繁项集的过程在数据集的项数多的情况下,数量会非常大。用Apriori算法优化,降低计算量。
原理:
1.如果一个项集是频繁项集,则其所有的非空子集也是频繁项集
2. 如果一个非空项集是非频繁项集,则其所有的父集也是非频繁项集
举例说明:若123是频繁项集,则断定12、13、23也是频繁项集;若12是非频繁项集,则123也是频繁项集,即其他数据集里只要含12都可直接判定其为非频繁项集。

2、Apriori算法流程

  1. 遍历数据集,生成候选项集Ck(k从1开始)C1表示1项集,每个项集中存在一个元素
  2. 计算Ck的支持度,排除低于阈值的项集,筛选出来的项集为频繁项集Lk(k从1开始)
  3. 频繁项集Lk进行组合得到候选项集C(k+1)
  4. 重复2、3的操作直到满足下述的条件之一时,停止。
  • 频繁K项集无法组合成候选的K+1项集【无候选项集可生成】
  • 所有的候选K项集的支持度都低于指定阈值,则无法生成频繁K项集【无频繁项集生成】
  • 简单来2步骤无法实现、3步骤无法实现,不得不终止。

3、Apriori算法代码实现

  1. 读取数据并整理数据

    def load_data(path):
    	    content = []
    	    with open(path, encoding="UTF 8") as f: #打开文件命名为f
    	        for line in f:
    	            line = line.strip("\n")  #清除开头结尾的换行符
    	            content.append(line.split(",")) #将每一层的内容以,分隔开作为一个整体装入列表中
    	    return content
    
    	dataset = load_data("data.txt")
    	print(len(dataset))
    

注:dataset 是一个二维列表,每个元素 一维列表 保存每个购物清单的商品记录。

  1. 寻找频繁K项集和关联规则

    # 导入算法包
    from efficient_apriori import apriori
    
    # 该函数会返回满足条件的频繁项集与关联规则
    '''itemsets,rules=apriori(transactions,
        min_support: float = 0.5, # min_support 支持度阈值
        min_confidence: float = 0.5) #  min_confidence 置信度阈值
    '''
    itemsets,rules=apriori(transactions=dataset,min_support= 0.04,min_confidence= 0.3)
    # 输出所有满足条件频繁k项集
    print(itemsets)
    # 输出关联规则
    print(rules)
    # 查看关联规则的支持度、置信度、提升度、确信度
    for r in rules:
        print(r)
        print("支持度",r.support)
        print("置信度",r.confidence)
        print("提升度",r.lift)
        print("确信度",r.conviction)
    

4、Apriori结果解读

rules 关联规则的结果

每个关联规则的4个指标
  • 支持度 support P(A)
  • 置信度 confidence P(B|A)
  • 提升度 lift P(B|A)/P(B)
  • 确信度 conviction 1-P(B)/1-P(B|A)
    上面只介绍了前3个指标,因此接下来要介绍一下确信度。
确信度

确 信 度 ( A − − > B ) = ( 1 − P ( B ) ) / ( 1 − P ( B ∣ A ) ) 确信度(A-->B)=(1-P(B))/(1-P(B|A)) A>B=(1P(B))/(1P(BA))
如某关联规则的确信度大,该规则的置信度大。

四、实际应用

在实际应用中最关键的是寻找合适的支持度、置信度阈值。最终的每个关联规则都会得到相应的四个指标,根据实际的应用场景,着重查看某指标,最终得到合适的关联规则,应用到实际的业务场景中去。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值