本文主要参考中国大学mooc的数据挖掘和钟雪灵《Python金融数据挖掘》
一、基本概念
事务与项集
事务(transaction):关联规则分析的对象,可理解为一种商业行为;事务由序号和项集组成,序号是唯一确定一个事务的标志
超市顾客的购买行为是一种包含多个商品购买的事务,而一种商品可以视为一个项目;若干个项目的集合简称为项集。若项集包含k个项目,则称该项集为**k-项集
**
上图表示某超市的五个购物篮中的物品,TID唯一标识一个事务,即一个购物篮表示一个事务;TID为1的事务中有两种商品,一种商品视为一个项目,则这有两个项目,成为2-项集;
可以从上图得知,共有5个事务,其中有4个4-项集,1个2-项集
支持度计数
支持度计数:包含特定项集的事务个数
(即从各项事务中是特定项集为子集的事务个数)
如:k({Milk,Bread})=3
支持度、置信度与关联规则
支持度:包含项集的事务数与总事务数的比值;
如:s({Milk,Bread})=3/5
置信度:包含项目X的事务中也包含项目Y的概率,反映X出现的条件下Y出现的可能性
如
关联规则:形如X→Y的蕴含表达式,其中X和Y是不相交的项集
如:{Milk,Diaper}→{Beer}
关联规则表示不同项目集合之间的相互依存性和关联性
支持度可用于衡量规则在数据库中出现的概率(确定项集的频繁程度)
置信度用于衡量规则的强弱程度,置信度越高,说明X出现时,Y出现的可能性越高
最小支持度、最小置信度和强规则
最小支持度(minsup):用户定义的衡量支持的一个阈值;表示项目集在统计意义上的最低重要性
最小置信度(minconf):用户定义的衡量之心的的一个阈值;表示关联规则的最低可靠性
强规则:同时满足最小支持度阈值和最小置信度阈值的规则
频繁项集与项目集格空间理论
频繁项集是满足最小支持度阈值的所有项集
设计一个算法代替我们通过观察来找出频繁项集是关联规则挖掘的重要任务
最大频繁项集的直接超集都不是频繁的
如图:
项目集格空间理论(应用于后面的Apriori算法):
- 定理一:频繁项集的所有子集仍是频繁项集
- 定理二:非频繁项集的所有超集是非频繁项集
借助该理论可以显著减少待搜索匹配的候选项集
关联分析
用于挖掘大规模数据集中有意义和有价值的联系;
通常用关联规则或频繁项集的形式表示;
若两个或多个事物存在一定的关联关系,那么其中一个事物发生就能够预测与其相关联的其他事物的发生
二、关联规则挖掘问题
结合事务的集合T,关联规则发现是找出所有强规则
Ⅰ 解决步骤
1. 频繁项集的产生:根据最小支持度找出频繁项集
假设上图的最小支持度和最小置信度为50%,那么意味着一个项集至少要被购买两次,可以得出以下频繁项集
2. 规则的产生:从频繁项集中找出满足最小置信度的项集
置信度是通过一个项集来预测另一个项集的可能性,因此通常考虑频繁二项集及其以上的频繁项集;
在本例中只有{A,C}满足以上要求,而{A,C}有两种情况,一种是通过A预测C,另一种是通过C预测A,因此要算出这两种情况的置信度
先买商品A的情况有3种,在买A的情况下买C的情况有2种,因此置信度为2/3;同理,买C的情况有2种,买C又买了A的有2,置信度为1
由以上计算结果可知,两种情况的置信度都满足大于等于最小置信度,因此这两种情况可视为两条关联规则
Ⅱ 解决方法
原始方法
Brute-force approach
- 计算每个可能规则的支持度和置信度
- 计算代价过高,因为数据集规模庞大,可达指数级别
降低产生频繁项集计算复杂度的方法
Apriori算法
原理
利用项目集格空间理论(见上面基本概念部分)减少候选项集的数量,实现提前剪枝
实现过程(举例说明)
tid | items |
---|---|
0 | A,C,D |
1 | B,C,E |
2 | A,B,C,E |
3 | B,E |
设定最小支持度minsup=2(通常都把分母省去,留下分子)
- 对单项集计算支持度,得出如下表格
itemset | sup |
---|---|
{A} | 2 |
{B} | 3 |
{C} | 3 |
{D} | 1 |
{E} | 2 |
- 根据Apriori筛选出频繁项集
itemset | sup |
---|---|
{A} | 2 |
{B} | 3 |
{C} | 3 |
{E} | 2 |
- 连接单项形成2-项集,并计算其支持度
itemset | sup |
---|---|
{A,B} | 1 |
{A,C} | 2 |
{A,E} | 1 |
{B,C} | 2 |
{B,E} | 3 |
{C,E} | 2 |
- 第二次使用Apriori进行筛选
itemset | sup |
---|---|
{A,C} | 2 |
{B,C} | 2 |
{B,E} | 3 |
{C,E} | 2 |
- 连接项,形成3-项集并计算其支持度
得到最大频繁项集
itemset | sup |
---|---|
{B,C,E} | 2 |
注意问题:项的连接
此处来自该本博主博客的连接步骤
频繁(k-1)项集Lk-1的自身连接产生候选k项集Ck
Apriori算法假定项集中的项按照字典序排序。如果Lk-1中某两个的元素(项集)itemset1和itemset2的前(k-2)个项是相同的,则称itemset1和itemset2是可连接的。所以itemset1与itemset2连接产生的结果项集是{itemset1[1], itemset1[2], …, itemset1[k-1], itemset2[k-1]}。
算法特点:
- 多次扫描数据库
- 候选项规模庞大
- 支持度计算开销大
FPGrowth算法(待补充)
原理:通过替代将每个候选集与每个事务相匹配,可以使用更高级的数据结构,或存储候选项集或压缩数据集来减少比较次数