目录

1.名词概念

2.频繁项集发现

3.Apriori算法关联分析

4.代码实现

5.参考文章

  通过组合交叉变量制定风控策略时有两种方法:一是通过决策树分箱进行变量交叉,可以见文章一个函数实现自动化风控策略挖掘;二是通过apriori算法进行关联分析。

  关联分析是从大规模数据集中寻找物品间的隐含关系,比如著名的例子“啤酒和尿布”,即发现买啤酒的顾客同时也会买尿布,商店通过挖掘这些规则更加了解客户的购买行为。但是,关联分析需要从大量数据集中寻找组合关系,计算代价很高,于是Aprior算法就应用于用合理的算法高效发掘组合规则(又叫频繁项集)。

  假设一个简单的交易清单如下,分别代表5笔交易情况。

  下面是关联分析中用到的一些名词概念。

1.项与项集

  项,指我们分析数据中的一个对象,如豆奶;项集,就是若干项的项构成的集合,如集合{豆奶,莴苣}是一个2项集。

2.支持度

  某项集在数据集中出现的概率。即项集在记录中出现的次数,除以数据集中所有记录的数量。如豆奶的支持度为4/5,{豆奶,尿布}的支持度为3/5。

  支持度体现的是某项集的频繁程度,只有某项集的支持度达到一定程度,我们才有研究该项集的必要。

3.置信度

  又叫可信度,是针对一条关联规则定义的。关联规则{A->B}的置信度为A与B同时出现的次数,除以A出现的次数。即在A发生的条件下,B发生的概率。

  比如{尿布->葡萄酒}=支持度(尿布->葡萄酒)/支持度(尿布)=3/5除以4/5=0.75。即在购买尿布的情况下,有75%的概率会购买葡萄酒。

4.提升度

  关联规则{A->B}中,提升度是指{A->B}的置信度,除以B的支持度。提升度体现的是组合(应用关联规则)相对不组合(不应用关联规则)的比值,如果提升度大于1,则说明应用该关联规则是有价值的。如果提升度小于1,说明应用该关联规则起到了负面影响。

  比如{尿布->葡萄酒}=置信度(尿布->葡萄酒)/支持度(葡萄酒)=0.75/0.6=1.25

寻找频繁项集

  一般支持度和置信度是用来量化关联分析是否成功的方法。比如对只有4个物品的集合{0,1,2,3},想要获得每种可能集合的支持度。首先,需要列出4个物品可能的组合数,一共有15种组合方法。

  比如需要计算{0,3}项集的支持度,就需要遍历每条记录,检查记录是否包含0和3,如果包含则计数值加1。如此便可以得到{0,3}项集的支持度,要获得每种可能集合的支持度需要重复上述过程。

  对于N种物品的数据集一共有(2的N次方-1)种项集组合,计算量巨大。为了降低计算所需的时间,可以采用Apriori来发现频繁项集。

Apriori算法原理

  Apriori在拉丁语中指“来自以前”,即先验知识或者假设条件。它的原理是如果某个项集是频繁的,那么它的所有子集也是频繁的。

  如上图中,如果{0,1}是频繁的,那么{0}、{1}也一定是频繁的。因为{0}、{1}的支持度一定大于或等于{0,1}。反过来,如果某一个项集是非频繁项集,那么它的所有超集也是非频繁的。如下图:

  如果{2,3}是非频繁的,那么{0,2,3}、{1,2,3}、{0,1,2,3}也一定是非频繁的,因为{2,3}的支持度一定大于等于它的超集的支持度。

使用Apriori算法发现频繁项集

  关联分析的目标分为两项:发现频繁项集和发现关联规则。首先需要找到频繁项集,然后才能获得关联规则。

  Apriori算法需要输入两个参数,一个是最小支持度,一个是数据集。步骤如下: 1.生成单个物品的项集 2.剔除支持度小于阈值的项,得到频繁1项集 3.将频繁1项集组合得到2项集 4.剔除支持度小于阈值的项,得到频繁2项集 5.重复上述步骤直到所有项集都去掉

  具体例子见下图:

  以上案例中得到频繁项集为{2}{3}{4}{2,4}。

从频繁项集中挖掘关联规则

  关联规则需要从频繁项集中产生,比如上例中产生一个频繁项集为{2,4},那么就有可能有一条关联规则为{2}->{4},意味着购买了2的人往往也会购买4。但是反过来就不一定成立。   对于关联规则的量化,则需要用到置信度。一条规则P->H的置信度定义如下:

  比如置信度{2|4}=4/5=0.8,置信度{4|2}=4/6=0.66,即在购买4的情况下有80%的概率购买2,在购买2的情况下只有66%的概率购买4。

  对于一个项集{0,1,2,3}产生关联规则,需要生成一个可能的规则列表,然后测试每条规则的可信度。可能的规则列表如下:

  可以发现具有以下性质:

  如果某条规则不满足最小置信度,那么该规则的所有子集也都不满足最小置信度。

  比如规则{0,1,2}->{3}不满足最小可信度要求,那么任何左部为{0,1,2}子集的规则也不会满足最小可信度要求,或者说所有以{3}作为后件的规则不会满足最小可信度要求。原因是这些规则的置信度的分子都相同,而{0,1,2}->3的分母{0,1,2}的支持度最小,导致这条规则的置信度最大。因此其他规则的置信度只会比这条更小,更不会满足最小可信度的要求。

  除了Apriori算法可以用来挖掘关联规则,FP-growth算法针对Apriori算法做了进一步的优化,能够显著加快发现频繁项集的速度。

代码实现(Python)

  sklearn库中没有Apriori算法,也没有 FP-Growth 算法。不过可以采用python的第三方库实现Aprior算法发掘关联规则。相关的库有mlxtend机器学习包、efficient-apriori等,先附上一个开源的实现Apriori的链接,AprioriDemo

  这里使用mlxtend库实现Aprior算法。

import pandas as pdfrom mlxtend.frequent_patterns import apriorifrom mlxtend.frequent_patterns import association_rulesdf = pd.read_excel('./Online Retail.xlsx')df.head()

  对数据进行预处理,描述Description字段去除首尾空格,删除发票ID"InvoiceNo"为空的数据记录,将发票ID"InvoiceNo"字段转为字符型,删除发票ID"InvoiceNo"不包含“C”的记录。   然后需要将数据集转换为购物篮格式的形式,如下图:

  列名为商品名称,每一行为一个订单。

  转换的方法有两种:

  方法一:使用pivot_table函数

import numpy as npbasket = df[df['Country'] =="France"].pivot_table(columns = "Description",index="InvoiceNo",              values="Quantity",aggfunc=np.sum).fillna(0)

  方法二:groupby后unstack

basket2 = (df[df['Country'] =="Germany"]          .groupby(['InvoiceNo', 'Description'])['Quantity']          .sum().unstack().reset_index().fillna(0)          .set_index('InvoiceNo'))

  然后将购物数量转为0/1变量,即是否购买该物品。

def encode_units(x):    if x <= 0:        return 0    if x >= 1:        return 1basket_sets = basket.applymap(encode_units)basket_sets.drop('POSTAGE', inplace=True, axis=1)

  使用算法包进行关联规则运算

frequent_itemsets = apriori(basket_sets2, min_support=0.05, use_colnames=True)rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1)

  frequent_itemsets 为频繁项集:

  Support列为支持度,即 项集发生频率/总订单量 rules为最终关联规则结果表:

  antecedants前项集,consequents后项集,support支持度,confidence置信度,lift提升度。选取置信度(confidence)大于0.8且提升度(lift)大于5的规则,按lift降序排序

参考文章

1.机器学习实战第11章

2.Python 极简关联分析(购物篮分析)

【作者】:Labryant

【原创公众号】:风控猎人

【简介】:某创业公司策略分析师,积极上进,努力提升。乾坤未定,你我都是黑马。

【转载说明】:转载请说明出处,谢谢合作!~

apriori算法c++_使用Apriori进行关联分析相关推荐

  1. apriori算法c++_关联分析——基于Apriori算法实现

    电子商务推荐系统主要是通过统计和挖掘技术,根据用户在网站上的行为,主动为用户提供推荐服务,从而提高网站体验.而根据不同的业务场景,推荐系统需要满足不同的推荐粒度,包括搜索推荐,商品类目推荐,商品标签推 ...

  2. apriori算法代码_资源 | 《机器学习实战》及代码(基于Python3)

    〇.<机器学习实战> 今天推荐给大家的是<机器学习实战>这本书. 机器学习作为人工智能研究领域中一个极其重要的研究方向(一文章看懂人工智能.机器学习和深度学习),在当下极其热门 ...

  3. apriori算法代码_sklearn(九)apriori 关联规则算法,以及FP-growth 算法

    是什么: apriori算法是第一个关联规则挖掘算法,利用逐层搜索的迭代方法找出数据库中的项集(项的集合)的关系,以形成规则,其过程由连接(类矩阵运算)与剪枝(去掉没必要的中间结果)组成.是一种挖掘关 ...

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

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

  5. Apriori算法进行关联分析实战

    使用Apriori算法进行关联分析(层次聚类) 一.基础知识 1.关联分析定义及存在的问题 定义:从大规模的数据集中寻找物品间的隐含关系,被称为关联分析或关联规则学习. 关联分析存在的主要问题:主要问 ...

  6. 使用Apriori算法进行关联分析

    目录 1.名词概念 2.频繁项集发现 3.Apriori算法关联分析 4.代码实现 5.参考文章   通过组合交叉变量制定风控策略时有两种方法:一是通过决策树分箱进行变量交叉,可以见文章一个函数实现自 ...

  7. 轻松入门机器学习数据挖掘算法——关联分析(Apriori算法)

    小故事:20世纪90年代,沃尔玛超市在对顾客的购物记录进行购物篮分析时,发现了一个奇怪的现象: "啤酒"和"尿布"两件看上去毫无关系的商品,经常出现在同一个购物 ...

  8. 【机器学习】关联分析Apriori算法详解以及代码实现

    Apriori算法以及统计学基础 什么是关联分析 简单的统计学基础 Apriori输出频繁集 从频繁项集中挖掘关联规则 什么是关联分析 从大规模数据集中寻找物品间的隐含关系被称作关联分析.而寻找物品的 ...

  9. 使用 Apriori 算法进行关联分析(机器学习)

    关联分析 关联分析是一种在大规模数据集中寻找有趣关系的任务. 这些关系可以有两种形式: 频繁项集(frequent item sets): 经常出现在一块的物品的集合. 关联规则(associatio ...

最新文章

  1. 难搞的偏向锁终于要被Java移除了
  2. 初始html(常用标签)
  3. mysql 触发器介绍
  4. linux deepin 20.4升级至20.5教程:升级系统和升级内核两个步骤(手动升级deepin内核命令)
  5. Java相关面试题总结+答案(一)
  6. HBase删除和修改操作
  7. mysql mysql常用的常用函数
  8. HttpServletRequest 常用方法讲解
  9. Mysql ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA
  10. 根据一个数字日期,判断这个日期是这一年的第几天
  11. vmare fusion:No Ethernet Connection VMware Fusion 12 macOS Big Sur
  12. 小程序坑 redirectTo 计时器 setInterval clearInterval
  13. WiFi图标在任务栏里不见了,提示:适配器Qualcomn Atheros QCA9377 Wireless Network Adapter遇到驱动程序或硬件相关的问题
  14. 一文搞懂HTML+CSS+JavaScript
  15. python3 pyv8 linux,Python3.5安装PyV8
  16. phpstudy使用数据库教程
  17. java log 乱码_Java日志文件乱码
  18. 微信老外产品经理:《中国移动应用设计趋势》
  19. service层调用service层的方法,并切换数据库调用不同数据库获取数据
  20. 【uniapp】icon图标的使用

热门文章

  1. ubuntu16.04 安装以及要做的事情
  2. iOS tabBarController 初始化就执行了 viewDidLoad
  3. emoji表情 与 iconfont 一锅炖
  4. 第七届杭州云栖大会召开 阿里云在人工智能领域发力
  5. 对于数据库中表示状态或类型字段表示方法的思考
  6. 网页性能管理详解:浅谈chrome-Timeline及window.requestAnimationFrame()方法
  7. Kruskal HDOJ 1233 还是畅通工程
  8. 挣值管理不是搞数字游戏
  9. jQuery中find()方法和filter()方法的区别
  10. golang 获取文件行数