- 数据挖掘与机器学习-WEKA应用技术与实践(第二版)
- 袁梅宇编著
- 7477字
- 2021-04-02 21:26:50
2.5 关联
关联规则数据挖掘是数据挖掘领域的热点之一。关联规则反映一个对象与其他对象之间的相互依赖性,如果多个对象之间存在一定的关联关系,那么,其中一个对象就能够通过其他对象进行预测。
关联规则的典型问题是分析超市中的购物篮数据,通过分析顾客放入购物篮中的不同商品,发现商品之间的关系,从而分析顾客的购买习惯。另一些典型应用是,从海量商业交易记录中发现感兴趣的数据关联,以帮助商家决策。例如,商品分类设计、降价经销分析、货架摆放策略等。
众所周知的沃尔玛超市故事说明了发现关联规则的威力,沃尔玛是将数据挖掘结果应用到商业运作并取得很大成功的公司之一。沃尔玛曾经详细分析了数据仓库中一年多的原始交易数据,发现与尿布一起被购买最多的商品竟然是啤酒。借助于关联规则,发现隐藏在背后的事实是:30%~40%的年轻父亲在购买尿布时会顺便买一点爱喝的啤酒。沃尔玛及时调整了货架摆放位置,把尿布和啤酒放在一起销售,从而大大增加了销量。
关联规则可以采用与分类规则相同的方式产生。由于得到的关联规则数量庞大,通常需要根据覆盖率(coverage)和准确率(accuracy)进行修剪。覆盖率也称为支持度(support),支持度计数是应用规则后预测正确的实例数量,支持度是支持度计数与实例总数的比值。准确率也称为置信度(confidence),表示为支持度计数与应用规则的实例数量的比值。
由于仅对高覆盖量的关联规则感兴趣,因此关联只寻找能够达到预定的最小覆盖量的属性值对组合,这些组合称为项集(itemset),其中的任一个属性值对称为一个项(item)。套用购物篮分析案例,项就是购物篮中的商品,需要寻找的是购物篮中商品之间的关联。
2.5.1 Associate标签页的操作
Weka专门使用Associate(关联)标签页来处理关联问题,如图2.84所示。
图2.84 Associate标签页
Associate标签页中包含了学习关联规则的方案。从布局来看,关联规则学习器可以采用与聚类器、过滤器和分类器相同的方式来进行选择和配置,只不过该标签页更为简单。
Weka关联挖掘的一般步骤是,选择合适的关联规则学习器,并为关联规则学习器设置好合适的参数,然后单击Start按钮启动学习器,学习完成后可右击结果列表中的条目,以查看或保存结果。
2.5.2 关联算法介绍
关联分析主要用于发现隐藏在大型数据集中的有意义的联系,这些联系可以采用关联规则或频繁项集的形式表示。关联分析可用于购物篮数据分析,还可用于医疗诊断、网页挖掘和科学数据分析等领域。
关联分析有很多术语,以下简单介绍这些术语。
(1)购物篮事务:顾客购物数据的例子如表2.9所示,其中,TID是事务的唯一标识,项集是给定顾客购买商品的集合,二者合成一个事务。
表2.9 购物篮事务示例
(2)二元表示:采用表2.10所示的二元形式来表示购物篮数据,每行对应一个事务,每列对应一个项。项用二元变量表示,这种表示忽略所购商品的数量和价格,仅指示购买商品与否。
表2.10 购物篮数据的二元表示
(3)项集:设I={i1,i2,…,id}为购物篮数据中全部项的集合,T={t1,t2,…,tN}为所有事务的集合。每个事务ti包含的项集都是I的子集。包含0个或多个项的集合称为项集。特别地,包含k个项的项集称为k-项集,不包括任何项的项集为空集。
(4)支持度计数:支持度计数是指包括特定项集的事务个数。如果项集S是事务ti的子集,就称事务ti包括项集S。
(5)关联规则(association rule):关联规则是形如X→Y的蕴涵表达式,其中,X和Y是不相交的项集,即X∩Y=∅。
(6)支持度(support):支持度确定规则可以用于给定数据集的频繁程度,项集S的支持度sup(S)=(包含项集S的事务数量/T中总的事务数量的百分比)×100%。支持度是一种重要度量,低支持度的规则可能只是偶然出现,因此支持度可用于删除无意义的规则。
(7)置信度(confidence):置信度确定Y在包括X的事务中出现的频繁程度。置信度度量规则用于推理的可靠性,置信度越高,推理越可靠。
(8)频繁项集(frequent itemset):满足最小支持度阈值的所有项集,即若项集S的支持度大于等于给定最小支持度,称S为频繁项集。
(9)强规则(strong rule):从发现的频繁项集中提取的所有高置信度的规则。
1.Apriori算法
Apriori算法是第一个关联规则挖掘算法,它开创性地使用基于支持度的修剪技术,系统地控制了候选项集的指数增长。
算法2.9给出Apriori算法产生频繁项集部分的伪代码。设Ck为候选k-项集的集合,Fk为频繁k-项集的集合。
算法初始通过单遍扫描数据集,确定每个项的支持度。一旦完成该步,就得到所有频繁1-项集的集合F1。然后,算法使用上一次迭代发现的频繁(k-1)-项集,产生新的候选k-项集。使用apriori-gen函数产生候选项集。
为了对候选项集的支持度计数,算法再次扫描一遍数据集。使用subset函数确定包含在每一个事务t中的Ck中的所有候选k-项集。
计算候选项集的支持度计数之后,算法将删除支持度计数小于最小支持度阈值(minsup)的所有候选项集。
当没有新的频繁项集产生,即Fk=∅时,算法结束。
算法2.9 Apriori算法的频繁项集产生
k=1 Fk={i|i∈I∧σ({i}≥N × minsup)} // 发现所有的频繁1-项集 repeat k=k+1 Ck=apriori-gen(Fk-1) // 产生候选项集 for 每个事务 t∈T do Ct=subset(Ck, t) // 识别属于t的所有候选项集 for 每个候选项集c∈Ct do σ(c)=σ(c)+1 // 支持度计数增1 end for end for Fk={c|c∈Ck∧σ(c)≥N × minsup} // 提取频繁k-项集 until Fk=∅ Result=∪Fk
其中,apriori-gen函数通过候选项集的产生和修剪两个操作产生候选项集。候选项集的产生由前一次迭代发现的频繁(k-1)-项集产生新的候选k-项集,候选项集的修剪采用基于支持度的修剪策略,删除一些候选k-项集。
Weka提供Apriori算法的实现类。算法迭代减少最小支持,直到找到满足给定最小置信度的所需数量的规则。
2.FP-Growth算法
FP-Growth算法采用完全不同的方法来发现频繁项集。该算法不同于Apriori算法的“产生-测试”范型,而是使用一种称为FP树的紧凑数据结构组织数据,并直接从该结构中提取频繁项集。
FP树是一种输入数据的压缩表示,通过逐个读取事务,并将每个事务映射到FP树中的一条路径来构造。由于不同事务可能会有若干个相同的项,因此它们的路径可能部分重叠。路径相互重叠越多,使用FP树结构获得的压缩效果越好。如果FP树足够小,能够存放在内存中,就可以直接从内存结构中提取频繁项集,而不必重复扫描存放在硬盘上的数据。对于某些事务数据集,FP-Growth算法比标准Apriori算法要快几个数量级。
FP-Growth算法分两个过程,首先根据原始数据构建FP树,然后在FP树上挖掘频繁模式。下面分别介绍。
算法2.10 FP树构建算法
设数据集为D,最小支持度阈值为minsup 扫描事务数据集D,得到频繁1-项集F和支持度。对F按支持度降序排序,得到频繁项表L 创建一个FP树的根节点,标记为“null” 再次扫描数据集,对D中的每条事务Trans执行如下操作: 提取Trans中的频繁项并按L中的次序排序。令排序后的频繁项表为[p|P],这里p是指第一个元素,而P是指剩下的元素组成的列表。调用insert_tree([p|P], T)。该过程执行如下:如果T有子节点N使得N.item_name=p.item_name,则N的计数增1;否则生成一个新节点N,将计数置为1,链接到它的父节点 T,并且通过节点链结构将其链接到具有相同 item_name的节点上。如果 P 为非空,递归调用insert_tree(P, N)。
FP树构建算法需要对事务数据库扫描两次,最后将数据集压缩成一棵树,树中包含了频繁模式挖掘的全部信息。
算法2.11 FP-Growth算法
FP-growth(Tree, α) L初值为空 if Tree包含单条路径P then for 路径P中节点的每个组合(记作β) do 产生模式β∪α,其支持度设为β中节点的最小支持度 end for else // 包含多个路径 for 在Tree的头表中的每个频繁项αi do 产生模式β=αi∪α,其支持度support=α i·support 构建β的条件模式基,然后构建β的条件FP树Treeβ if Treeβ≠∅ then 调用FP-growth(Treeβ, β) end if end for end if
FP-Growth算法将发现长频繁模式的问题转化为递归地寻找短模式,然后连接后缀的问题。它将最不频繁的项作为后缀,极易选取。该方法较大地降低了搜索开销。
Weka提供名称为FPGrowth的FP-Growth算法的实现类,算法寻找大的项集而不产生候选项集,通过迭代降低最小的支持度,直到找到所需数量的满足给定最小度量的规则。
2.5.3 手把手教你用
1.Apriori关联规则挖掘
为了了解如何应用Apriori算法,加载weather.nominal.arff文件挖掘规则。注意到Apriori算法希望的是完全的标称型数据,如果有数值型属性,必须先进行离散化。在Preprocess标签页中加载数据后,切换至Associate标签页,如果当前的挖掘算法不是Apriori,则选择它,使用默认选项。然后单击Start按钮,启动Apriori运行,运行结果如图2.85所示。
图2.85 Apriori算法运行结果
Apriori算法输出的10条规则,按照每一条规则后括号内的置信度值进行排序。为便于研究,将10条规则列示如下:
1. outlook=overcast 4 ==> play=yes 4 <conf:(1)> lift:(1.56) lev:(0.1) [1] conv:(1.43) 2. temperature=cool 4 ==> humidity=normal 4 <conf:(1)> lift:(2) lev:(0.14) [2] conv:(2) 3. humidity=normal windy=FALSE 4 ==> play=yes 4 <conf:(1)> lift:(1.56) lev:(0.1) [1] conv:(1.43) 4. outlook=sunny play=no 3 ==> humidity=high 3 <conf:(1)> lift:(2) lev:(0.11) [1] conv:(1.5) 5. outlook=sunny humidity=high 3 ==> play=no 3 <conf:(1)> lift:(2.8) lev:(0.14) [1] conv:(1.93) 6. outlook=rainy play=yes 3 ==> windy=FALSE 3 <conf:(1)> lift:(1.75) lev:(0.09) [1] conv:(1.29) 7. outlook=rainy windy=FALSE 3 ==> play=yes 3 <conf:(1)> lift:(1.56) lev:(0.08) [1] conv:(1.07) 8. temperature=cool play=yes 3 ==> humidity=normal 3 <conf:(1)> lift:(2) lev:(0.11) [1] conv:(1.5) 9. outlook=sunny temperature=hot 2 ==> humidity=high 2 <conf:(1)> lift:(2) lev:(0.07) [1] conv:(1) 10. temperature=hot play=no 2 ==> outlook=sunny 2 <conf:(1)> lift:(2.8) lev:(0.09) [1] conv:(1.29)
规则采用“前件num.1==>结论num.2”的形式表示,前件后面的数字表示有多少个实例满足前件,结论后面的数字表示有多少个实例满足整个规则,这就是规则的支持度。因为在所有的10个规则中,这两个数相等,所以每个规则的置信度都正好是1。
在实践中,要找到最小支持度和置信度值以得到满意的结果,可能非常烦琐。因此,Weka的Apriori算法需要多次运行基本算法。它始终使用用户指定的同样的最小置信度值,该值由minMetric参数设定。支持度可以表示为0~1之间的一个比值,是满足整个规则的实例数与实例总数(在天气数据中其值为14)的比例。最低支持度始于某一个特定值(由upperBoundMinSupport指定,默认值为1.0)。在每一次迭代中,支持度减少一个固定的量(由delta指定,默认值为0.05,即5%的实例),直到已经生成一定数量的规则(由numRules指定,默认为10条规则),或者支持度达到一定的minimum水平(由lowerBoundMinSupport指定,默认值为0.1),这是因为,如果规则仅适用于数据集中低于10%的实例,则这些规则一般也没有什么意义。上述四个值都可以由用户指定。
这听起来很复杂,因此需要研究在天气数据中到底会发生什么情况。Associator output(关联规则输出)区域表明,该算法已经设法产生10条规则。算法的最小置信度为0.9,这是默认值,在输出中已经显示为Minimum metric <confidence>: 0.9。输出中还显示Number of cycles performed(执行的次数)为17,该值表明Apriori算法实际运行17次以产生这些规则。输出中还显示Minimum support(最小支持度),所生成的输出值为0.15(对应于0.15×14≈2实例)。
图2.86 Apriori参数
现在打开通用对象编辑器,研究如图2.86所示的Apriori参数。
可以看到,最低的支持度upperBound-MinSupport参数的初始值默认为1.0,delta参数值为0.05。由于1-17×0.05=0.15,这就解释了为什么经过17次迭代,最小支持度值会是0.15。需要注意的是,在Apriori算法第一次运行之前,upperBoundMinSupport参数值要先减少delta。
输出区域还显示,尝试最小支持度的最后一个值(本例为0.15)后,发现了多少个频繁项集。为方便起见,列示如下:
Generated sets of large itemsets: Size of set of large itemsets L(1): 12 Size of set of large itemsets L(2): 47 Size of set of large itemsets L(3): 39 Size of set of large itemsets L(4): 6
可以看到,在本例中给定一个最小支持度计数为2个实例时,显示Minimum support:0.15(2 instances),有12个大小为1的项集、47个大小为2的项集、39个大小为3的项集、6个大小为4的项集。
现在,设置outputItemSets为True,再次运行Apriori算法,会显示所有这些不同项集和支持的实例数,如图2.87所示。
图2.87 设置outputItemSets为True后的运行结果
Apriori算法还有一些其他参数。如果将significanceLevel设置为0~1之间的一个值,关联规则将根据所选择的显著性水平上的χ2检验进行过滤。然而,在这种情形下施加显著性检验是有问题的,因为存在多重比较问题:如果对数百个关联规则执行数百次测试,可能很偶然才会发现显著的影响,也就是说,一个关联似乎有统计学意义,但实际上不是。此外,χ2检验在样本量小的情形下是不准确的。
规则排序还有一些替代度量。除Confidence(置信度)外,Apriori算法还支持Lift(提升度)、Leverage(杠杆率),以及Conviction(确信度),可以在metricType下拉列表框中进行选择。更多信息可通过在通用对象编辑器中单击More按钮获得。
2.挖掘现实数据集
本示例挖掘美国国会议员投票信息,该数据集的详细情况可参见第1章。
该数据集的全部属性都是二元标称型,并带有一些现实数据集常见的缺失值,使用“?”来表示这些缺失值。要意识到,数据集中的“?”并不意味着该属性的值是未知的,而是意味着,该值既不是“yes”也不是“no”。通常将本数据集视为一个分类问题,任务是基于投票模式预测所属党派。然而,本示例另辟蹊径,在数据集中应用关联规则挖掘,以寻求有趣的关联。
在Preprocess标签页中加载vote.arff数据集,切换至Associate标签页,选择Apriori算法,保持默认选项不变,单击Start按钮,运行结果如下:
Apriori ======= Minimum support: 0.45 (196 instances) Minimum metric <confidence>: 0.9 Number of cycles performed: 11 Generated sets of large itemsets: Size of set of large itemsets L(1): 20 Size of set of large itemsets L(2): 17 Size of set of large itemsets L(3): 6 Size of set of large itemsets L(4): 1 Best rules found: 1. adoption-of-the-budget-resolution=y physician-fee-freeze=n 219 ==> Class=democrat 219 <conf:(1)> lift:(1.63) lev:(0.19) [84] conv:(84.58) 2. adoption-of-the-budget-resolution=y physician-fee-freeze=n aid-to-nicaraguan-contras=y 198 ==> Class=democrat 198 <conf:(1)> lift:(1.63) lev:(0.18) [76] conv:(76.47) 3. physician-fee-freeze=n aid-to-nicaraguan-contras=y 211 ==> Class=democrat 210 <conf:(1)> lift:(1.62) lev:(0.19) [80] conv:(40.74) 4. physician-fee-freeze=n education-spending=n 202 ==> Class=democrat 201 <conf:(1)> lift:(1.62) lev:(0.18) [77] conv:(39.01) 5. physician-fee-freeze=n 247 ==> Class=democrat 245 <conf:(0.99)> lift:(1.62) lev:(0.21) [93] conv:(31.8) 6. el-salvador-aid=n Class=democrat 200 ==> aid-to-nicaraguan-contras=y 197 <conf:(0.99)> lift:(1.77) lev:(0.2) [85] conv:(22.18) 7. el-salvador-aid=n 208 ==> aid-to-nicaraguan-contras=y 204 <conf:(0.98)> lift:(1.76) lev:(0.2) [88] conv:(18.46) 8. adoption-of-the-budget-resolution=y aid-to-nicaraguan-contras=y Class=democrat 203 ==> physician-fee-freeze=n 198 <conf:(0.98)> lift:(1.72) lev:(0.19) [82] conv:(14.62) 9. el-salvador-aid=n aid-to-nicaraguan-contras=y 204 ==> Class=democrat 197 <conf:(0.97)> lift:(1.57) lev:(0.17) [71] conv:(9.85) 10. aid-to-nicaraguan-contras=y Class=democrat 218 ==> physician-fee-freeze=n 210 <conf:(0.96)> lift:(1.7) lev:(0.2) [86] conv:(10.47)
首先,输出中列出最小支持度为0.45(196个实例),最小置信度为0.9,执行的次数为11。
然后,研究Apriori算法发现的10条规则。
第一条规则表明,支持“采纳预算决议”,并反对“冻结医疗费”的是“民主党”。
第二条规则表明,支持“采纳预算决议”,反对“冻结医疗费”,并支持“援助尼加拉瓜反政府”的是“民主党”。
第三条规则表明,反对“冻结医疗费”,并支持“援助尼加拉瓜反政府”的是“民主党”。
第四条规则表明,反对“冻结医疗费”,并反对“教育支出”的是“民主党”。
第五条规则表明,反对“教育支出”的是“民主党”。
第六条规则表明,反对“EL-萨尔瓦多援助”,并且类别为“民主党”的,会支持“援助尼加拉瓜反政府”。
第七条规则表明,反对“EL-萨尔瓦多援助”的,会支持“援助尼加拉瓜反政府”。
第八条规则表明,支持“采纳预算决议”,支持“援助尼加拉瓜反政府”,并且类别为“民主党”的,会反对“冻结医疗费”。
第九条规则表明,反对“EL-萨尔瓦多援助”,并支持“援助尼加拉瓜反政府”的是“民主党”。
第十条规则表明,支持“援助尼加拉瓜反政府”,并且类别为“民主党”的,会反对“冻结医疗费”。
不难推断出:“民主党”会支持“采纳预算决议”和“援助尼加拉瓜反政府”,反对“冻结医疗费”“教育支出”和“EL-萨尔瓦多援助”。
令人感到意外的是,全部的十条关联规则中,没有一条涉及“Class=republican”(类别为“共和党”的),这是为什么呢?
也许从数据中能看出些端倪。切换至Preprocess标签页,单击Visualize All按钮,Weka弹出如图2.88所示的可视化窗口。
图2.88 数据集可视化所有的结果
图中的蓝色(深色)代表民主党,红色(浅色)代表共和党。在前四行的16项属性中,有多项属性蓝色占据绝对的统治地位,基本上全是蓝色柱;而红色占据统治地位的只有很少几个属性,又因为覆盖率低而不具备竞争优势,故未能入选。在人数上民主党占优(267:168),加上有明确的政治观点,因此前十条关联规则都打上了民主党的烙印。
3.市场购物篮分析
购物篮分析将关联技术用于交易过程,特别是分析超市收银数据,找出那些以成组的形式同时出现的商品。对于大多数零售商来说,这是主要的用于数据挖掘的销售信息来源。例如,自动分析收银数据后发现:买啤酒的客户同时也买薯片,对超市管理人员来说,这个发现也许非常有意义。另一个沃尔玛的例子是,一些顾客通常星期四在买尿片的同时还买啤酒。这似乎令人惊讶,但如果仔细一想,年轻父母为了在家度周末而采购,这又非常容易理解。上述信息可以用于多种目的,如规划货架摆放位置、仅对会同时购买的商品中的一种进行打折销售、提供与单独销售的产品相匹配产品的赠券,等等。了解顾客的个人购买历史记录能够创造出巨大的附加价值。商家可以从顾客的购买行为中鉴别特殊客户,不但可以分析其历史购买模式,而且还能精确地针对潜在用户提供特殊的极有可能感兴趣的购买信息。
在Weka中进行市场购物篮分析,每笔交易都编码为一个实例,其中的每个属性表示店里的一个商品项,每个属性都只有一个值,如果某笔特定交易不包含某个商品项(也就是说,客户没有购买该项商品),就将其编码为缺失值。
本次实验的任务是对超市收银台进行关联数据挖掘。Weka自带一个超市购物篮分析数据集,文件名为supermarket.arff,其中的数据是从新西兰的一个真实超市里收集而得。我们需要在真实数据中寻找一些有趣的模式。
首先,在Weka探索者界面的Preprocess标签页中,加载data目录下的supermarket.arff文件。在Current relation选项组中,可以看到属性数量有217个,而实例数量有4627个,相对于前面用于教学的例子,这个数据集要大了许多。单击Preprocess标签页中的Edit按钮,打开数据集的Viewer对话框,查看数据文件,确认已经理解了数据的结构。
然后,切换至Associate标签页,选择Apriori算法,保持默认选项不变,单击Start按钮启动Apriori算法,运行结果如下:
=== Run information === Scheme: weka.associations.Apriori -N 10 -T 0 -C 0.9 -D 0.05 -U 1.0 -M 0.1 -S -1.0 -c -1 Relation: supermarket Instances: 4627 Attributes: 217 [list of attributes omitted] === Associator model (full training set) === Apriori ======= Minimum support: 0.15 (694 instances) Minimum metric <confidence>: 0.9 Number of cycles performed: 17 Generated sets of large itemsets: Size of set of large itemsets L(1): 44 Size of set of large itemsets L(2): 380 Size of set of large itemsets L(3): 910 Size of set of large itemsets L(4): 633 Size of set of large itemsets L(5): 105 Size of set of large itemsets L(6): 1 Best rules found: 1. biscuits=t frozen foods=t fruit=t total=high 788 ==> bread and cake=t 723 <conf:(0.92)> lift:(1.27) lev:(0.03) [155] conv:(3.35) 2. baking needs=t biscuits=t fruit=t total=high 760 ==> bread and cake=t 696 <conf:(0.92)> lift:(1.27) lev:(0.03) [149] conv:(3.28) 3. baking needs=t frozen foods=t fruit=t total=high 770 ==> bread and cake=t 705 <conf:(0.92)> lift:(1.27) lev:(0.03) [150] conv:(3.27) 4. biscuits=t fruit=t vegetables=t total=high 815 ==> bread and cake=t 746 <conf:(0.92)> lift:(1.27) lev:(0.03) [159] conv:(3.26) 5. party snack foods=t fruit=t total=high 854 ==> bread and cake=t 779 <conf:(0.91)> lift:(1.27) lev:(0.04) [164] conv:(3.15) 6. biscuits=t frozen foods=t vegetables=t total=high 797 ==> bread and cake=t 725 <conf:(0.91)> lift:(1.26) lev:(0.03) [151] conv:(3.06) 7. baking needs=t biscuits=t vegetables=t total=high 772 ==> bread and cake=t 701 <conf:(0.91)> lift:(1.26) lev:(0.03) [145] conv:(3.01) 8. biscuits=t fruit=t total=high 954 ==> bread and cake=t 866 <conf:(0.91)> lift:(1.26) lev:(0.04) [179] conv:(3) 9. frozen foods=t fruit=t vegetables=t total=high 834 ==> bread and cake=t 757 <conf:(0.91)> lift:(1.26) lev:(0.03) [156] conv:(3) 10. frozen foods=t fruit=t total=high 969 ==> bread and cake=t 877 <conf:(0.91)> lift:(1.26) lev:(0.04) [179] conv:(2.92)
分析一下得到的十条最佳关联规则,看看能发现什么。
第一条规则:饼干+冷冻食品+水果+高总额==>面包和蛋糕。
第二条规则:烘烤所需+饼干+水果+高总额==>面包和蛋糕。
第三条规则:烘烤所需+冷冻食品+水果+高总额==>面包和蛋糕。
第四条规则:饼干+水果+蔬菜+高总额==>面包和蛋糕。
第五条规则:聚会零食+水果+高总额==>面包和蛋糕。
第六条规则:饼干+冷冻食品+蔬菜+高总额==>面包和蛋糕。
第七条规则:烘烤所需+饼干+蔬菜+高总额==>面包和蛋糕。
第八条规则:饼干+水果+高总额==>面包和蛋糕。
第九条规则:冷冻食品+水果+蔬菜+高总额==>面包和蛋糕。
第十条规则:冷冻食品+水果+高总额==>面包和蛋糕。
十条关联规则中,多项商品多次出现,而且总金额都很高。这给出了一些显而易见的信息:第一,购买饼干、冷冻食品等速食的顾客,会顺便采购些水果、蔬菜,以补充身体所需的维生素;第二,购买饼干、冷冻食品以及水果、蔬菜的顾客,会顺便购买面包和蛋糕;第三,购买上述食品的顾客,一次的采购量会很大,总金额较高;第四,总金额较高的交易,一般都会购买面包和蛋糕,等等。
对于超市经理来说,这些信息非常重要,可以根据挖掘到的知识重新安排货架,重新布局超市,提供快速付款通道以及安排送货等附加服务,以期提升市场竞争力。
请读者尝试使用Apriori算法的不同参数,看看挖掘效果,能否得到一些意外而又在情理之中的结论。