上一篇我们讲了关联分析的几个概念,支持度,置信度,提升度。以及如何利用Apriori算法高效地根据物品的支持度找出所有物品的频繁项集。

这次呢,我们会在上次的基础上,讲讲如何分析物品的关联规则得出关联结果,以及给出用apyori这个库运行得出关联结果的代码。

一. 基础知识

上次我们介绍了几个关联分析的概念,支持度,置信度,提升度。这次我们重点回顾一下置信度和提升度:

置信度(Confidence):置信度是指如果购买物品A,有较大可能购买物品B。计算方式是这样:

置信度( A -> B) = (包含物品A和B的记录数量) / (包含 A 的记录数量)

举例:我们已经知道,(牛奶,鸡蛋)一起购买的次数是两次,鸡蛋的购买次数是4次。那么置信度Confidence(牛奶->鸡蛋)的计算方式是Confidence(牛奶->鸡蛋)=2 / 4。

提升度(Lift):提升度指当销售一个物品时,另一个物品销售率会增加多少。计算方式是:

提升度( A -> B) = 置信度( A -> B) / (支持度 A)

举例:上面我们计算了牛奶和鸡蛋的置信度Confidence(牛奶->鸡蛋)=2/4。牛奶的支持度Support(牛奶)=3 / 5,那么我们就能计算牛奶和鸡蛋的支持度Lift(牛奶->鸡蛋)=0.83

当提升度(A->B)的值大于1的时候,说明物品A卖得越多,B也会卖得越多。而提升度等于1则意味着产品A和B之间没有关联。最后,提升度小于1那么意味着购买A反而会减少B的销量。

举个例子,有了这个指标,你就能看出卖越多的汉堡就会卖越多的番茄酱。但卖越多的沐浴露,则可能香皂的销量会下降。

二. 关联规则

我们前面已经用Apriori得到频繁项集了。那么我们就可以在频繁项集的基础上,找到这里面的关联规则。而计算关联规则所用到的,就是我们上面所说的置信度和提升度。

这里有一点要注意,当我们发现置信度(A->B)很高的时候,反过来的值置信度(B->A)不一定很高。

一个物品的关联结果是非常多的。但好在,我们上一节学习了Apriori思想。运用在置信度上也是合适的:

如果一个关联结果的置信度低,那么它的所有超集的置信度也低。

这样一来,我们就能节省很多的计算量。

三. Apriori关联规则实战

我们还是用mlxtend库,根据上一篇找到的频繁项集,计算出它们的关联规则。在此之前,还是先介绍一下相应API的参数。

association_rules(df, metric="confidence",

min_threshold=0.8,

support_only=False):

参数介绍:

- df:这个不用说,就是 Apriori 计算后的频繁项集。

- metric:可选值['support','confidence','lift','leverage','conviction']。

里面比较常用的就是置信度和支持度。这个参数和下面的min_threshold参数配合使用。

- min_threshold:参数类型是浮点型,根据 metric 不同可选值有不同的范围,

metric = 'support' => 取值范围 [0,1]

metric = 'confidence' => 取值范围 [0,1]

metric = 'lift' => 取值范围 [0, inf]

support_only:默认是 False。仅计算有支持度的项集,若缺失支持度则用 NaNs 填充。

完整代码如下:

import pandas as pd

from mlxtend.preprocessing import TransactionEncoder

from mlxtend.frequent_patterns import apriori

#设置数据集

dataset = [['牛奶','洋葱','肉豆蔻','芸豆','鸡蛋','酸奶'],

['莳萝','洋葱','肉豆蔻','芸豆','鸡蛋','酸奶'],

['牛奶','苹果','芸豆','鸡蛋'],

['牛奶','独角兽','玉米','芸豆','酸奶'],

['玉米','洋葱','洋葱','芸豆','冰淇淋','鸡蛋']]

te = TransactionEncoder()

#进行 one-hot 编码

te_ary = te.fit(records).transform(records)

df = pd.DataFrame(te_ary, columns=te.columns_)

#利用 Apriori 找出频繁项集

freq = apriori(df, min_support=0.05, use_colnames=True)

#导入关联规则包

from mlxtend.frequent_patterns import association_rules

#计算关联规则

result = association_rules(freq, metric="confidence", min_threshold=0.6)

这里我们根据置信度来计算,找出置信度大于0.6的关联规则。

计算结果如下:

antecedents consequents antecedent support consequent support support confidence lift leverage conviction

0 (洋葱) (芸豆) 0.6 1.0 0.6 1.00 1.00 0.00 inf

1 (芸豆) (洋葱) 1.0 0.6 0.6 0.60 1.00 0.00 1.000000

2 (洋葱) (鸡蛋) 0.6 0.8 0.6 1.00 1.25 0.12 inf

3 (鸡蛋) (洋葱) 0.8 0.6 0.6 0.75 1.25 0.12 1.600000

4 (芸豆) (牛奶) 1.0 0.6 0.6 0.60 1.00 0.00 1.000000

5 (牛奶) (芸豆) 0.6 1.0 0.6 1.00 1.00 0.00 inf

6 (酸奶) (芸豆) 0.6 1.0 0.6 1.00 1.00 0.00 inf

7 (芸豆) (酸奶) 1.0 0.6 0.6 0.60 1.00 0.00 1.000000

8 (芸豆) (鸡蛋) 1.0 0.8 0.8 0.80 1.00 0.00 1.000000

9 (鸡蛋) (芸豆) 0.8 1.0 0.8 1.00 1.00 0.00 inf

10 (洋葱, 芸豆) (鸡蛋) 0.6 0.8 0.6 1.00 1.25 0.12 inf

11 (洋葱, 鸡蛋) (芸豆) 0.6 1.0 0.6 1.00 1.00 0.00 inf

12 (鸡蛋, 芸豆) (洋葱) 0.8 0.6 0.6 0.75 1.25 0.12 1.600000

13 (洋葱) (鸡蛋, 芸豆) 0.6 0.8 0.6 1.00 1.25 0.12 inf

14 (芸豆) (洋葱, 鸡蛋) 1.0 0.6 0.6 0.60 1.00 0.00 1.000000

15 (鸡蛋) (洋葱, 芸豆) 0.8 0.6 0.6 0.75 1.25 0.12 1.600000

我们可以发现,除了置信度(confidence),提升度(lift)外,还有两个指标,leverage和conviction。这两个用得比较少,和置信度,提升度也有些类似,就不展开说了。

既然返回的结果是Dataframe,那么就可以很方便得用pandas的排序方法找出置信度或提升度高的物品组合,方法如下:

DataFrame.sort_values

比如上面例子中要找出最大的置信度,用

result.sort_values(by = ‘confidence’,ascending=False,axis=1)

上面例子中我们可以发现,{洋葱 -> 鸡蛋,芸豆} 的置信度是 1.00 ,而它们的提升度是 1.25 。这说明买了洋葱的人很可能会再购买 1.25 份的 {鸡蛋,芸豆} 。所以可以让它们放到一起出售。

OK,相信通过这个前面的介绍和这次的这个例子,已经能够明白Apriori算法的原理以及如何使用它。当然Apriori只能算是关联挖掘算法中比较基础的一个,还有其他的关联挖掘算法,比如FP-growth,以后有机会再介绍吧。

对了,我从网上找了个关联分析的数据和大概针对这个数据写了个小的demo代码。

数据是超市的购物清单,大概有7500条,足够我们来运算分析了。

python关联规则apriori算法_Python --深入浅出Apriori关联分析算法(二) Apriori关联规则实战...相关推荐

  1. pythonapriori算法特点_Python --深入浅出Apriori关联分析算法(一)

    在美国有这样一家奇怪的超市, 它将啤酒与尿布这样两个奇怪的东西放在一起进行销售,并且最终让啤酒与尿布这两个看起来没有关联的东西的销量双双增加 .这家超市的名字叫做沃尔玛. 你会不会觉得有些不可思议?虽 ...

  2. Python学习教程之算法讲解:深入浅出Apriori关联分析算法

    在美国有这样一家奇怪的超市,它将啤酒与尿布这样两个奇怪的东西放在一起进行销售,并且最终让啤酒与尿布这两个看起来没有关联的东西的销量双双增加.这家超市的名字叫做沃尔玛. 你会不会觉得有些不可思议?虽然事 ...

  3. Python --深入浅出Apriori关联分析算法(二) Apriori关联规则实战

    上一篇我们讲了关联分析的几个概念,支持度,置信度,提升度.以及如何利用Apriori算法高效地根据物品的支持度找出所有物品的频繁项集. Python --深入浅出Apriori关联分析算法(一) 这次 ...

  4. 使用Apriori进行关联分析(二)

    使用Apriori进行关联分析(二) 书接上文(使用Apriori进行关联分析(一)),介绍如何挖掘关联规则. 发现关联规则 我们的目标是通过频繁项集挖掘到隐藏的关联规则. 所谓关联规则,指通过某个元 ...

  5. 数据分析六、案例实战---Apr 算法之公众号关联分析

    案例实战---Apr 算法之公众号关联分析 一.案例背景 二.明确目标 三.数据处理 3.1关于数据清洗,略... 3.2数据整理 四.数据分析 五.数据展现 5.1 绘制多组柱状图 5.2案例展现 ...

  6. 关联分析(二)--FP-Growth算法

    转自:https://www.cnblogs.com/datahunter/p/3903413.html 关联分析又称关联挖掘,就是在交易数据.关系数据或其他信息载体中,查找存在于项目集合或对象集合之 ...

  7. FP-Growth关联分析算法在网络监控领域的应用

    关联分析算法在网络监控领域的应用: 在现今网络规模大,涉及专业多,告警总数大的现在,迫切需要提高对海量告警的分析能力,实现对告警数据的挖掘,提高对有价值告警的提取,简化监控人员的工作,提高排障效率.常 ...

  8. python --深入浅出Apriori关联分析算法Apriori关联...

     一.基础知识 上次我们介绍了几个关联分析的概念,支持度,置信度,提升度.这次我们重点回顾一下置信度和提升度: 置信度(Confidence):置信度是指如果购买物品A,有较大可能购买物品B.计算方式 ...

  9. python 关联分析算法的包_Python 极简关联分析(购物篮分析)

    关联分析,也称购物篮分析,本文目的: 基于订单表,用最少的python代码完成数据整合及关联分析 文中所用数据下载地址: 使用Python Anaconda集成数据分析环境,下载mlxtend机器学习 ...

最新文章

  1. html表格中加入斜线,在HTML中显示带斜线的表格
  2. java中怎样避免方法被重写
  3. [bzoj4590][Shoi2015]自动刷题机
  4. 程序员高薪盛宴背后:程序员正在消失?
  5. Python基础-----条件语句与初识基本数据类型(一)
  6. python 求组合数最快方法_Python-生成符合条件的大集合组合的最有效方法?
  7. 树形结构:二叉排列树,二叉搜索树
  8. oracle dbfile数,通过案例学调优之--Oracle参数(db_file_multiblock_read_count)
  9. 【python】详解类class的继承、__init__初始化、super方法
  10. deleted 表和 inserted 表
  11. 查找字符串中元素出现的次数
  12. 3000字长文:探讨报销系统使用满意度的NPS指标设计
  13. Linux netfilter hook源码分析(基于内核代码版本4.18.0-80)
  14. 第11章从 Web 抓取信息
  15. 移动通信核心网络技术总结(三)EPC网络的结构及原理
  16. Databricks:打造数据国度的“金砖四国”
  17. 文件上传漏洞原理和利用
  18. HotSpot垃圾回收器分类
  19. 手把手教你配置苹果APNS推送服务
  20. Zotero文献管理软件使用指南——进阶篇

热门文章

  1. Linux 系统管理 : last 命令详解
  2. unity3d导入xlua
  3. 【034】基于51单片机的HX711电子秤Proteus仿真设计
  4. JavaWeb仿twitter个人社交网络及微博服务网站
  5. android 启动画面广告,Android 应用启动欢迎界面广告的实现实例
  6. JZOJ 5539 psy
  7. android原生输入法皮肤,面向Android平台的输入法皮肤引擎的设计与实现
  8. C6657核心板资料:基于TI DSP TMS320C6657、XC7K325T的高速数据处理核心板 375
  9. yum makecache报错信息解决(浪费我大量时间)
  10. java 发 腾讯企业邮_(更新)Java + 腾讯企业邮箱 + javamail + SSL 发送邮件