文章目录
- 一、关联规则
一、关联规则
1.1 概念
关联规律挖掘:从交易数据中发现:买了X 还会买Y 的规则
关联规律挖掘‘购物篮分析’Market Basket Analysis(MBA)
关联规律->应用于推荐系统
基本概念:
通过数据的关联性进行分析挖掘,适合用于大数据样本中。
项集:包含0个或多个项的集合。包含k个项就是一个k项集
事务:表示事件
(比如每次去商场购买东西是一次事务,而实际购买到的东西就是项集)
关联规则的三个计算:
支持度 support
置信度 confidence
提升度 lift
支持度(support):
全部事务中,项集中{X,Y}同时出现的概率:
该指标作为建立强关联规则的第一个门槛,通过最小阈值(minsup)的设定,来剔除那些 “出镜率” 较低的无意义的规则.
而相应地保留下出现较为频繁的项集所隐含的规则。即筛选出满足:
项集Z,被称为频繁项集(Frequent Itemset)。
置信度(confidence):
在关联规则的先决条件 X 发生的条件下,关联结果Y发生的概率,
即含有X的项集条件下,同时含有Y的可能性:
在这里,也要对置信度设置 最小阈值(mincon) 来进一步筛选满足需要的强关联规则。因此,继产生频繁项集后,需从中进而选取满足:
提升度(lift):
表示在含有 X 的条件下同时含有 Y 的可能性与无条件下含有Y的可能性之比。
即在Y的自身出现的可能性P(Y)的基础上,X的出现对于Y的“出镜率” P(Y/X)的提升程度:
该指标与confidence同样用来衡量规则的可靠性,可以看作置信度的一种互补指标。
lift >1 X-y 正相关
lift <1 X-y 负相关
lift =1 X-y 无相关
Support较大的规则lift值会倾向于比较小
往往lift值特别大的规则,support会非常小
1.2 示例
TID | 面包 | 牛奶 | 尿布 | 啤酒 | 鸡蛋 | 可乐 |
1 | 1 | 1 | 0 | 0 | 0 | 0 |
2 | 1 | 0 | 1 | 1 | 1 | 0 |
3 | 0 | 1 | 1 | 1 | 0 | 1 |
4 | 1 | 1 | 1 | 1 | 0 | 0 |
5 | 1 | 1 | 1 | 0 | 0 | 1 |
考虑规则{牛奶,尿布}->{啤酒}。
由于项集{牛奶,尿布,啤酒}支持度计数2。事务总数5(购买5次)
所以支持度:2/5=0.4
由于项集{牛奶,尿布,啤酒}支持度计数2。项集{牛奶,尿布}支持度计数为3 所以该置信度:2/3=0.67
二、关联规则挖掘推论(Apriori 算法)
2.1 关联规则挖掘方法:
频繁项集(Frequent Itemset)的生成:生成所有supoort>= minsup的项集合
关联规则的生成:对每一个频繁项集(XY)进行二元划分,生成confidence最高的一系列规则(X->Y)
Apriori 算法思想:(购买A、B、C频繁则分别购买AB、BC、AC、ABC肯定频繁)
频繁项集的子集也是频繁项集
优点:使用先验性质,大大提高了频繁项集产生的效率;算法简单易理解,容易实施
缺点:候选频繁K项集数量巨大;需要对整个数据库进行扫描,非常耗时;数据集存放内存中,大数据处理有困难
关联规则应用方向:
交叉销售:向买A的用户推荐B
捆绑销售:把A和B打包销售
基于support,confidence和lift 筛选规则
2.3 FP-growth
每次由(k-1)项集L(K-1)产生K项集L(K)时,自连接产生采用枚举的方式,而且产生的项集每次都得去扫描一下数据库
如何提高Apriori算法的效率,有比较多的方法:基于散列,抽样等方式,比较出名的改进算法有FPGrowth算法。
apriori算法多次扫描交易数据库,每次利用候选频繁集产生频繁集;
FP-growth则利用树形结构,无需产生候选频繁集而是直接得到频繁集,大大减少扫描交易数据库的次数,从而提高了算法的效率。
但是apriori的算法扩展性较好,可以用于并行计算等领域。
使用Apriori算法进行关联分析。FP-growth算法来高效发现频繁项集。
sklearn 没有关联规则算法,寻求GitHub
https://github.com/asaini/Apriori Python Implementation of Apriori Algorithm
三、FP-growth原理
3.1 生成项头表
原始数据中共有10个事务。
首先根据原始数据并对1项集计数,我们发现F,O,I,L,J,P,M, N都只出现一次,支持度为1,低于2的阈值(此处假设我们设定一个阈值为2)。
去除后将剩下的A, C, E, G, B, D, F按照出现次数(即支持度)的大小降序排列,组成了项头表。 (一般使用降序排序)
3.2 生成FP tree以及节点链表
原始数据得到初步的整理后,开始生成FP tree以及节点链表。
首先把根节点设为null,也就是说根节点不包含任何项。这样做的好处是,任何一个事务都可以被视为是从一个空项开始的。
3.3 挖掘过程
首先挖掘频率低的项,然后逐次挖掘频率高的项。
首先挖掘频率最低的项F,因为其子树恰好较为简单,所以可以很容易地得到其条件模式基。
条件模式基(conditional pattern base):条件模式基是以所查找项为结尾的路径集合。每一条路径其实都是一条前缀路径。
简而言之,一条前缀路径是介于所查找元素项与树根节点之间的所有内容。
对于一颗conditional FP-tree(条件FP树),可以进行递归的挖掘(合并分支等)。
F挖掘完了,我们开始挖掘项D。
D比F复杂一些,因为其节点链表含有两个叶子节点。因此首先得到一颗conditional FP-tree 。
我们接着将所有的祖先节点计数设置为叶子节点的计数,即变成{A:2, C:2, E:1, G:1, D:1, D:1}。此时E和G由于在条件模式基里面的计数低于阈值2,被我们删除,最终得到条件模式基为{A:2, C:2}。(如右上图)