1、关联规则及相关算法,主要内容,关联规则概述 Apriori算法 CARMA算法 序列模式,关联规则概述,数据关联是数据库中存在的一类重要的可被发现的知识。若两个或多个变量的取值之间存在某种规律性,就称为关联。 关联规则挖掘的一个典型例子是购物篮分析。 啤酒与尿布的故事,啤酒与尿布的故事,在一家超市里,有一个有趣的现象:尿布和啤酒赫然摆在一起出售。但是这个奇怪的举措却使尿布和啤酒的销量双双增加了。这不是一个笑话,而是发生在美国沃尔玛连锁店超市的真实案例,并一直为商家所津津乐道。,啤酒与尿布的故事,沃尔玛拥有世界上最大的数据仓库系统,为了能够准确了解顾客在其门店的购买习惯,沃尔玛对其顾客的购物行为
2、进行购物篮分析,想知道顾客经常一起购买的商品有哪些。沃尔玛数据仓库里集中了其各门店的详细原始交易数据。 在这些原始交易数据的基础上,沃尔玛利用数据挖掘方法对这些数据进行分析和挖掘。,啤酒与尿布的故事,一个意外的发现是:跟尿布一起购买最多的商品竟是啤酒! 经过大量实际调查和分析,揭示了一个隐藏在“尿布与啤酒”背后的美国人的一种行为模式: 在美国,一些年轻的父亲下班后经常要到超市去买婴儿尿布,而他们中有30%40%的人同时也为自己买一些啤酒。产生这一现象的原因是:美国的太太们常叮嘱她们的丈夫下班后为小孩买尿布,而丈夫们在买尿布后又随手带回了他们喜欢的啤酒。,关联可分为简单关联、时序关联、因果关联。
3、关联分析的目的是找出数据库中隐藏的关联,并以规则的形式表达出来,这就是关联规则。,基本概念,一个样本称为一个“事务” 每个事务由多个属性来确定,这里的属性我们称为“项” 多个项组成的集合称为“项集”,k-项集,由k个项构成的集合 牛奶、啤酒都是1-项集; 牛奶,果冻是2-项集; 啤酒,面包,牛奶是3-项集。 每个事务其实就是一个项集,关联规则的表示,X和Y是项集 X称为规则前项(或者前件,antecedent) Y称为规则后项(或者后件,consequent) 支持度s是数据库中包含 的事务占全部事务的百分比置信度c是包含 的事务数与包含X的事务数的比值,频繁项集,用户预先定义最小支持度阈值(
4、min_sup)和最小置信度阈值(min_conf)。 如果某个项集的支持度大于等于设定的最小支持度阈值min_sup,称这个项集为“频繁项集”(也称为“大项集”,LargeItemsets),所有的“频繁k-项集”组成的集合通常记作Lk。,关联规则挖掘过程主要包含两个阶段 第一阶段先从数据集中找出所有的频繁项集,它们的支持度均大于等于最小支持度阈值min_sup第二阶段由这些频繁项集产生关联规则,计算它们的置信度,然后保留那些置信度大于等于最小置信度阈值min_conf的关联规则。,关联规则挖掘算法,广度优先算法 Apriori:频繁项集的非单调性 AprioriTid: AprioriHy
5、brid 深度优先算法 FP-growth Eclat H-Mine,Apriori算法是挖掘布尔关联规则频繁项集的算法 Apriori算法利用频繁项集性质的先验知识(prior knowledge),通过逐层搜索的迭代方法,即将k-项集用于探察(k+1)-项集,来穷尽数据集中的所有频繁项集。 先找到频繁1-项集集合L1,然后用L1找到频繁2-项集集合L2,接着用L2找L3,直到找不到频繁k-项集,找每个Lk需要一次数据库扫描。,Apriori算法 (1),以表5-1为例 min_sup=0.22,频繁1-项集为 L1=牛奶,果冻,啤酒,面包,花生酱 频繁2-项集为 L2=牛奶,果冻,牛奶,啤
6、酒,牛奶,花生酱,果冻, 啤酒,果冻, 面包,果冻, 花生酱 频繁3-项集为 L3=牛奶,果冻,啤酒,牛奶,果冻,花生酱,2. 由频繁项集产生关联规则 由上一步得到的频繁项集集合 L2 和 L3 中的每一个频繁项集 l 都可以产生关联规则。 以下用 L3 中频繁项集 l = I1, I2, I5 进行说明。 L2 和 L3 中的其它频繁项集的关联规则同理可得。l I1, I2, I5 的所有的非空子集为:I1, I2,I1, I5,I2, I5,I1,I2 和 I5,对于 l 的每个非空子集 s,计算 s l-s 的置信度并输出规则: I1I2 I5,confidence = 2/4 = 50
7、% I1I5 I2,confidence = 2/2 = 100% I2I5 I1,confidence = 2/2 = 100% I1 I2I5,confidence = 2/6 = 33% I2 I1I5,confidence = 2/7 = 29% I5 I1I2,confidence = 2/2 = 100% 如果最小置信度阈值为70%,则只有2、3 和最后一个规则可以输出,因为只有这些是强的。,在Clementine中应用Apriori算法,应用Apriori节点来对某超市的客户采购数据集进行购物篮分析。该数据集包含有21个属性(这些属性包括:COD、pasta、milk、water
8、、biscuits、coffee、brioches、yoghurt、frozen vegetables、tunny、beer、tomato、souce、coke、rice、juices、crackers、oil、frozen fish、ice cream、mozzarella、tinned meat。其中“COD”是记录编号,其它20个属性代表20种商品),共46243个记录。每个属性代表某种商品,其取值为“0”或者“1”,“0”表示没有购买该商品,“1”表示购买了该商品。,数据源,设置“类型”节点,设置“Apriori”节点,“Apriori”节点的高级选项,浏览模型,作业: 关联规则的两个
9、例子: http:/www.tipdm.org/information/index.jhtml,四、CARMA 算法, CARMA 算法原理 1. 算法组成 2. 算法中的符号定义 3. 算法的基本过程 实例说明 4. 用一个简单的例子说明算法原理。 CARMA 算法描述 5. 用自然语言描述算法的实现过程。,已有的一些关联规则挖掘算法在运行之前要求用户输入最小置信度和最小支持度。而对用户来讲,确定合适的最小置信度和最小支持度比较困难,需要运行算法多次判断最小置信度和最小支持度是否过高或过低。 Christian Hidber 1999年提出了在线挖掘关联规则的算法 CARMA (Contin
10、uous Association Rule Mining Algorithm),此算法在运行过程中给用户以反馈,用户可根据反馈信息随时调整最小支持度,如果用户对输出结果已感到满意,可随时终止算法的运行。,所谓在线算法是相对于批处理式算法而言, 有以下特点: 算法执行过程中即能不断产生部分计算结果,供用户参考; 在算法执行过程中,用户能根据产生的部分计算结果控制算法如何进行下去; 算法给出的结果必须是精确的。 在线挖掘关联规则的算法允许用户随时调整最小支持度(阈值),以得出合理的结果,如果中间结果已经令人满意,用户也可以随时终止算法的执行。,在线算法相对于离线的批处理式的算法而言,可交互性较好。
11、CARMA 算法最多需要遍历交易集合两次,因为第二次遍历不一定需要进行完,如果满足某条件,算法可能在第二次遍历未结束时就终止。在第一次遍历过程中,算法逐步建立起一个潜在的数据项频集的集合 L,对 L 中的每一个数据项集,CARMA 计算其支持度的上界和下界。每处理一条交易之后,算法向用户输出根据当前集合 L 计算出的关联规则以及每条关联规则的支持度和置信度的上界和下界,用户可以根据输出信息调整最小支持度和最小置信度的数值。注意这种调整是随时发生的。如果用户对输出的中间结果满意,可提前结束算法运行。,1. 算法组成 第一步 找出所有频繁项集第一阶段 Phase I 产生潜在频繁项集 V (支持栅
12、格)。在该阶段中可以随时调整最小支持度。第二阶段 Phase 对潜在频繁项集 V 进行删减得到最终的频繁项集。 第二步由频繁项集产生关联规则 与 Apriori 算法相应部分相同,在此不重复。, CARMA 算法原理,四、 CARMA 算法,在Clementine中应用CARMA算法,对某超市的交易数据进行关联分析,研究销售商品见的关联关系,目的是为超市货架的摆放提供科学的依据,对促销决策提供参考建议。 事务数据集为Clementine自带的Baskets1n数据集,存放在Clementine安装目录下的Demos文件夹中(.clementine12.0DemosBASKETS1n),包含了1
13、000个数据样本,每个样本包含了顾客的卡号、性别、年龄、收入、付款方式等一系列个人信息,以及其购买的各种食品清单,是一个Tabular格式的数据集。,这是一个超市数据库,有18个字段,1000条记录,该例子中数据字段包含如下:,实例研究购物篮分析,六、关联规则挖掘实践,读取文本数据 可以使用“变量文件节点”读取定界文本数据。可以从选项板中添加变量文件节点,方法是单击源选项卡找到此节点,或者使用收藏夹选项卡。 然后,双击新添加的节点以打开相应的对话框。,单击以“” 标记的按钮,浏览 Clementine 安装目录,打开demos 目录,选择文件 BASKETS1n。 选择从文件读取字段名,并注意
14、已载入对话框中的字段和值。,3. 添加表 在已载入数据文件中,可以浏览一下某些记录的值。其中一个方法就是构建一个包含“表节点”的流。 要将表节点添加到流中,可双击选项板中的表节点图标或将其拖放到工作区。,要查看表,单击工具栏上的绿色箭头按钮执行流,或者右键单击表节点,然后选择执行。,表节点可以临时连接流中的不同节点,以便查看这些节点处理后的中间结果。不用时可以删除表节点。,4. 字段处理 对于关联规则中的输入输出字段要求,可以用一个“类型节点”来处理 。 要将“类型节点”添加到流中,可双击选项板中的图标或将其拖放到工作区。,双击流中“类型节点”,然后进行设置。,点击“读取值”按钮将各个字段类型
15、实例化。,5. 构建模型 用前面方法把 “Apriori 节点”和 “Carma 节点” 加到流中。,设置 “Apriori 节点” 选项 (采用默认值)。要产生关联规则,单击工具栏上的绿色箭头执行流,或单击节点“执行”按钮,可产生“Apriori 模型”。,设置 “Carma 节点” 选项 单击节点“执行”按钮,可产生“Carma 模型”,6. 浏览模型 执行“Apriori节点”时,生成的“Apriori模型”将被添加到窗口右上角的“模型”选项卡中。右键单击此图标,然后从菜单中选择浏览。,“啤酒蔬菜罐头冻肉”87% “啤酒冻肉蔬菜罐头”86% “冻肉蔬菜罐头啤酒”84%,全部显示对于“CA
16、RMA模型”可以用同样操作,浏览模型内容。,模型的 7 项信息的含意 规则 ID (Rule ID) 规则编号。通过规则 ID,可以标识哪些规则要应用于某个给定的预测。通过规则 ID,还可以在以后合并附加的规则信息,如部署能力、产品信息或条件。 实例 ( Instances) 数据集中包含规则前项的事务数量的。 例如,规则为“冻肉蔬菜罐头啤酒”的实例数为 173,表示训练数据中有 173 个事务包含条件项集冻肉,蔬菜罐头。, 支持度 (Support) 规则条件(前项)支持度 即包含规则前项的事务数量在训练数据中的比例。 例如,规则“冻肉蔬菜罐头啤酒”的支持度为: (173/1000)100%
17、=17.3% 规则支持度 (Rule Support) 规则的条件和结果均为真的事务的比例。 例如练数据中有 146 个事务包含项集 冻肉, 蔬菜罐头, 啤酒,则规则“冻肉蔬菜罐头啤酒” 的规则支持度为 : 146/1000=14.6%, 置信度 (confidence) 规则支持度与条件支持度的比。 例如,规则“冻肉蔬菜罐头啤酒”的置信度为: 14.6%/17.3% = 84.393% 提升 (lift) 规则置信度与结果(后项)的支持度的比。 例如,训练数据中有 293个事务包含项集啤酒,即规则“冻肉蔬菜罐头啤酒”的后项其支持度为29.3%,则规则提升为: 84.393%/29.3%=2.
18、88,其含义是:在1000个客户组成的人群中,购买“啤酒”的概率为29.3%,如果把人群限制在购买“冻肉”和“蔬菜罐头”的客户中,那么这个人群购买“啤酒”的概率为84.393%,通过限制人群可以使购买“啤酒”的概率提高 2.88 倍。 如果某个规则提升接近1,这就意味着前项条件限制并没有使规则后项发生的概率造成太大的影响。总之,提升不为 1 的规则比提升接近 1 的规则的相关性更强。因此更有价值。,1000个客户,包含 “冻肉”和 “蔬菜罐头” 的事务,包含“啤酒” 的事务 (占29.3%),提升值越大,共同部分越大,说明前项和后项的关系越密切。,为规则指定过滤器 规则算法 (如 Aprior
19、i、CARMA 和序列) 可能会生成非常大量的规则。为了在浏览时增强明确度,或者为了简化规则评分,应该考虑过滤规则,以便更加显著地显示相关的结果和条件。 使用规则浏览器“模型”选项卡上的过滤选项,可以打开一个用于指定过滤条件的对话框。,用前面方法先打开 “Carma 模型”; 要创建过滤器,请单击扩展面板右侧的编辑过滤器按钮 (漏斗图标)。这样将打开一个对话框, 可指定约束条件。,过滤后的内容如下图所示。,关联规则模型概要 关联规则模型的“概要”选项卡显示模型类型 (如 Apriori 或 CARMA)、发现的规则数量,以及规则集中规则的最大和最小支持度、提升和置信度。 可以行到,共生成了11
20、条规则。另外,在模型对话框的“汇总”标签下,可以看到关于本次建模的信息概要。,其中“有效事务数”为 940。( 全部事务效为 1000 ) 通过对原原始数据的分析,不难发现,在 1000 个事务中,有 60 个事务所有的输入变量均为“F”也以是说有 60 个顾客什么都没有买,所以 CARMA 算法将它们过滤掉了。 注意:Apriori 算法没有这个功能。,7. 从关联模型生成规则集 “生成规则集”命令,可以指定一个项 (目标字段) 从规则集中将那些规则后项包含了目标字段的规则全部提取出来,生成一个规则集节点。进而将这个规则集节点放入数据流中对每行记录是否含有目标字段进行段预测。 首先打开的关联
21、模型,单击“生成”菜单的“规则集”命令 。 打开“生成规则集”对话框。,可以指定下列选项,将规则转换为规则集: 规则集名称 指定生成“规则集节点”的名称。 创建节点位置 控制新生成规则集节点的位置。选择(流)工作区、GM 选项板(模型窗口)或两者。 目标字段 确定哪个输出字段将用于生成的规则集节点。从列表中选择一个输出字段。根据该字段从总关联集中提出相应的对于这个字段进行预测的规则。,最小支持度 指定生成的规则集中要保留的的最小规则支持度。支持度小于指定值的规则不会显示在新的规则集中。 最小置信度 指定生成的规则集中要保留的规则的最小置信度。置信度小于指定值的规则不会显示在新的规则集中。 默认
22、值 即“规则节点”判断每个样本不是指定的目标字段值 (即不满足“规则节点”中规则的条件的样本) 就预测为“默认值”。这里设定为“F”,,例如想研究哪些客户有可能会购买cannedveg, “生成规则集”对话框,可以设置如下图。 设置完成后,单击“确定”按钮,即可在数据流区域生成“Cama(Cannedveg)节点”。 打开浏览窗口; 单击“全部”, 按钮可以浏览该节点 的详细设置。,可以看到,该规则集是前面Carma 模型中的3个规则,ID分别为2、5、7。,建立“类型”节点到“Carma(cannedveg)”节点的连接,并在“Carma(cannedveg) ”节点后添加“表”节点,,预测
23、的置信度(判 别为T的规则置信度的均值),可得到“cannedveg”节点对数据集中每个样本的预测结果。,预测的结果,8.关联规则模型设置(用模型对数据进行预测) 此“设置”选项卡用于为关联模型 (Apriori 和 CARMA)指定评分选项。此选项卡仅在生成的模型添加到用于评分的流之后可用。 建立“类型”节点到 “Carma 模型”的连接,并在“Carma 模型”后添加“表”节点; 双击模型节点,在模型标签下,对模型进行设置。,以上设置完毕,双击“表”节点,并执行之;所得结果如图所示。( 参考 Carma 模型) 可以看到,在表的最后六列数据,是预测结果置信度最高的两条规则所预测的结果。,预
24、测值,置信度,ID号,对比Carma模型的11条规则,检测预测结果。,序列模式,序列模式挖掘要发现的是事件在发生过程中的先后顺序上的规律 一个顾客在租借影碟时,先租借“星球大战”,然后是“帝国反击战”,最后是“杰达武士归来”(三部影片是以故事发生的时间先后而情节连续的)。 顾客在租借了前两部影片之后,他租借第三步影片的概率是比较高的。这就是一个顾客在租借影片时的序列模式。,序列与序列模式,序列,就是一个或多个项集有序地排列后组成的列表。例如,顾客6产生了这样一个序列:crackers bread。 在一个序列集中,如果某个序列s不包含于任何其它序列中,则称s是“极大序列”,在进行数据挖掘时,由
25、用户指定一个最小支持度阈值。把那些支持度大于等于这个阈值的序列称为“频繁序列”。长度为k的频繁序列记作“频繁k-序列”。 给定一个事务数据库D,那么序列模式挖掘就是要从数据中找出所有的频繁序列,并从中取出那些极大序列,每一个这样的序列都代表了一个序列模式。,目前的序列模式挖掘算法大多都是Apriori类算法的改进,如AprioriALL、AprioriSome和GSP算法等。 AprioriAll 算法与Apriori 类似,首先遍历数据库生产候选序列并利用 Apriori 的特性进行剪枝来得到频繁序列。每次遍历时通过连接上一次得到的频繁序列来生长度加1的候选序列。然后对每个候选序列进行扫描,
26、按照最小支持度来确定哪些频繁序列。,五、序列模式挖掘算法,序列模式挖掘算法介绍,AprioriAll 算法的不足在于容易生成数量庞大的候选序列,同时还需要多次扫描数据库。 AprioriSome 与 AprioriAll 只是在序列阶段有所不同,AprioriAll 是首先生成所有频繁序列,然后在极大序列阶段删除那些非极大的序列。 AprioriSome 将序列分成两部分分别计数,前半部分只对一定长度的序列计数,后半部分跳过己经计数的序列。在实际过程中两个部分是混合在一起的,以减少候选序列占用的资源。,GSP 算法是AprioriAll 的扩展算法,其算法的执行过程和 AprioriAll 类
27、似,最大的不同就在于GSP 引入了时间约束、滑动窗口和分类层次技术,增加了扫描的约束条件,有效地减少了需要扫描的候选序列的数量,同时还克服了基木序列模型的局限性,更切合实际,减少多余的无用模式的产生。 另外GSP利用哈希树来存储候选序列,减小了需要扫描的序列数量。,在Rakesh Agrawal 关于序列模式挖掘的论述中,将序列模式挖掘的一般步骤分为5个阶段,即: 排序阶段 频繁项集阶段 转换阶段 序列阶段 选极大序列阶段,五、序列模式挖掘算法,AprioriAll 算法,在Clementine中应用序列模式挖掘,对某超市的顾客购物事务数据库进行分析以提取序列模式。从事务数据库中随机抽取10个
28、顾客,每个顾客都有多次购物记录,组成训练数据集,共67个训练样本,存放在sequence.xls文件中。样本属性包括顾客ID、购物时间以及商品名称,这里,对某超市的顾客购物事务数据库进行分析以提取序列模式。从事务数据库中随机抽取10个顾客,每个顾客都有多次购物记录,组成训练数据集,共67个训练样本。样本属性包括: 顾客ID,购物时间,以及商品名称,其中购物时间已经做了数值化处理,如表5所示。其中,“T” 表示购买了某商品,“F ” 表示未购买某商品。 数据存放于ftp上。,六、关联规则挖掘,实例研究序列模式分析,构建模型,图 序列建模数据流,节点设置 点击“序列节点”,对参数进行设置,情况如下
29、:,序列节点字段属性,建模基本设置,建模高级设置,2. 浏览模型 右击生成的“序列模型”节点,在快捷菜单中选择“浏览”,打开浏览窗口,单击工具栏中 “显示/隐藏标准”按钮,并选择“显示全部”,(参考Apriori模型浏览)即可浏览所有生成的序列模式,如左图。,3. 生成的序列模型用于预测 生成的序列模型节点可以添加到某个数据流中对数据进行预测。例如,直接将生成模型添加到数据流中来对样本数据进行预测。 将生成的“序列模型”节点加入到数据流区域,并建立由“序列数据库.xls ”节点到“序列模型”节点的连接,然后在“序列模型”节点后添加 “表”节点。 打开“表”节点并执行之,即可得到预测结果,如图所
30、示。,图 序列建模数据流,可以看到,在原有的数据基础上,结果中多了 6 列数据。这 6 列数据是用所有的序列模式来对某个样本进行预测时,置信度最高的前 3 个预测结果以及它们的置信度。 之所以只显示3个预测结果,是因为在设置建模参数时,将“要添加到流的预测”设置为 3,如果想减少或增加预测结果,可以改变该参数的设置。,例如图中的第一个记录的预测结果: $S-序列-1糕点 $SC-序列-1= 0.700 $S-序列-2饼干 $SC-序列-2= 0.600 $S-序列-3牛奶 $SC-序列-3=0.500 其含义是:就该顾客的这次购物来看,其下次购物时购买糕点的概率是70%,购买饼干的概率是60%,购买牛奶的概率是50%。 对于可预测数量小于所请求预测数量的记录,其没有的预测值和置信度显示为 $null$。,