电子商务中消费习惯的关联规则.docx
《电子商务中消费习惯的关联规则.docx》由会员分享,可在线阅读,更多相关《电子商务中消费习惯的关联规则.docx(34页珍藏版)》请在冰豆网上搜索。
电子商务中消费习惯的关联规则
电子商务中消费习惯的关联规则
啤酒和尿布是关联规则应用中最成功的案例,所谓关联就是如果两个或多个变量的取值之间存在某种规律性,那么这两个或多个变量之间就存在着某种关系。
关联规则主要是针对什么商品组或集合顾客多半会在一次购买中同时购买这个问题,来寻找在同一件事件中出现的不同项的相关性。
这种关联性被广泛应用于商家的营销活动中。
图6-1是A网站的一个截图,该截图中的营销信息“买了上述产品的顾客也买了如下产品”就是关联规则的一个典型应用。
图6-1关联规则应用示例
6.1关联规则简介
关联规则力图发现大量数据中项集之间有趣的关联或相关程度,并用这些规则找出顾客购买行为模式。
它在数据挖掘中是一个重要的课题,最近几年已被业界所广泛研究。
关联规则最早由Agrawal[1]于1993年提出,其描述如下:
设I={i1,i2,…,i}是商品项的集合,其中的元素称为项(item)。
设D为交易(transaction)T的集合,这里交易T是项的集合,并且
。
对应每一个交易有唯一的标识,如交易号,记作TID。
设X是I中项的集合,如果
,那么称交易T包含X。
一个关联规则是形如
的蕴涵式,这里
,
,并且X∩Y=φ。
规则
在交易数据库D中的支持度(support)是交易集中包含X和Y的交易数与所有交易数之比,记为support
,即
规则
在交易集中的置信度(confidence)是指包含X和Y的交易数与包含X的交易数之比,记为confidence
,即
对于一个给定客户群体的交易集合D来说:
只有那些满足最小支持度和最小置信度的规则才是有意义的。
例6.1有商品牛奶、面包,其被购买的概率如表6-1所示:
对关联规则“牛奶
面包”来说,其支持度为0.25,置信度为0.25/0.35=0.714;意思是全部顾客中,有25%的人买了牛奶也买了面包,而且买牛奶这项商品的顾客中,有71.4%的人也会一起购买面包。
表6-1商品购买概率
关联规则在商业中的引用非常广泛,主要包括以下几个方面:
1.交叉销售
基于消费者购买模式,主动进行交叉销售。
2.邮购目录的设计
将经常会一起购买的东西置于邮购目录较近的位置,促进销售。
3.商品摆放
基于商店不同的经营理念,如果将经常一起购买的东西较近摆放,客户会比较方便购买;如果有意放在购物通道的两端,顾客寻找商品的过程中可以增加其他物品销售的可能性。
4.流失顾客分析
可以分析是否是因为某些关键商品的缺失而导致的顾客流失等问题。
6.2关联规则的分类
根据要建立关联规则的数据情况的不同,关联规则可以有如下几种分类。
1.根据规则中所涉及的数据的维数,关联规则可以分为单维的和多维的
所谓单维关联规则是指在规则中只涉及数据的一个维度,这是最常见的一种关联规则形式,换句话说,单维关联规则是处理单个属性中的一些关系。
例如,啤酒
尿布,这里啤酒和尿布都同属于商品这个属性;而多维关联规则是指要处理的数据涉及多个维,即处理多个属性之间的某些关系,性别=“男”
职业=“军人”,这条规则就涉及两个不同字段的信息,是两个维上的一条关联规则。
2.根据规则中数据的抽象层次,关联规则可以分为单层的和多层的
在单层关联规则中,所有的变量只涉及相同抽象层次的项或属性。
例如,IBM笔记本
Sony打印机,就是一个细节数据上的单层关联规则,IBM笔记本和Sony打印机在相同的抽象层次上;而多层关联规则中,变量涉及不同抽象层次的项或属性。
例如,笔记本
Sony打印机,笔记本应该和打印机在同一抽象层次上,相对打印机而言,Sony打印机处在一个相对细节的层次上,因此该关联规则是一个较高层次和细节层次之间的多层关联规则。
3.根据规则中处理的变量的类别,关联规则可以分为布尔型和数值型
布尔型关联规则处理的值都是离散的、种类化的,它显示了这些变量之间的关系,例如,性别=“男”
职业=“军人”,是布尔型关联规则;而数值型关联规则可以和多维关联或多层关联规则结合起来,对数值型字段进行处理。
例如,性别=“女”
年收入(“3万,…,5万”),涉及的年收入是离散化的数值类型,是一个数值型关联规则。
给出了关联规则的分类后,在解决实际问题时,就可以根据需要选择一个合适的关联规则类别来处理。
6.3由事务数据库挖掘单维关联规则
本小节从相对简单的单维关联规则的挖掘入手,来介绍如何实现关联规则的挖掘。
6.3.1Aprior算法
Aprior算法[2]是基于两阶段频繁集思想来挖掘顾客交易数据中项目集间的关联规则的一种方法。
该算法主要是通过寻找频繁项集来发现关联规则,具体实现过程如下:
开始时,事务数据库中的每个项都是候选1-项集的集合C1的成员,进而简单地扫描所有事务,对每个项的出现次数进行计数,并根据事前设定的最小事务支持度计数来确定频繁1-项集的集合L1,它由具有最小支持度的候选1-项集组成。
为发现频繁2-项集的集合L2,算法使用L1自连接产生候选2-项集的集合C2;扫描D中事务,计算C2中每个候选项集的支持计数;确定频繁2-项集的集合L2,它由具有最小支持度的C2中的候选2-项集组成。
反复执行,直到产生最终结果。
在这个过程中,有两个关键的步骤:
1.连接步:
为找Lk,通过两个Lk-1连接产生候选k-项集,这两个Lk-1项集的前(k-2)项必须是相同的,连接后生成的选项集的集合记做Ck。
比如说两个3-项集分别为{面包,牛奶,鸡蛋}和{面包,牛奶,可乐},把这两个3-项集进行连接,连接后可产生一个4-项集,即{面包,牛奶,鸡蛋,可乐}。
2.剪枝步:
如果一个候选k-项集的(k-1)-子集不在Lk-1中,则该候选也不可能是频繁的,从而可以由Ck中删除。
这是因为如果一个项集是频繁的,那么它所有的子集也是频繁的。
Apriori原理成立是由于具有下列属性:
即:
一个项集的支持度绝不超过它子集的支持度,这就是所说的支持度反单调性质。
该原理示意图如下:
图6-2Aprior原理示意
由图6-2可以看出,如果项集AB是不频繁的,那么它的所有超集如ABC、ABD等就都是不频繁的,因此可以删除。
第二步利用频繁项集构造出满足用户最小信任度的规则。
其中,挖掘或识别出所有频繁项集是该算法的核心,占整个计算量的大部分。
例6.2表6-2是一个模拟的事务数据集,每一行由某一顾客的顾客ID、顾客购买商品名称组成,设最小支持度为0.4,最小置信度为0.8,根据Aprior算法求关联规则。
表6-2模拟的事务数据集
由表6-2可以看出共5条记录,如满足最小支持度0.4这个条件,最小支持数为2,由Aprior算法,可以得出如表6-3所示的1-项集。
表6-31-项集
由表6-3可以看出,可乐、鸡蛋的计数小于最小支持数2,去掉后得到由表6-4所示的频繁1-项集。
表6-4频繁1-项集
由表6-4中的频繁1-项集可构成如表6-5所示的2-项集。
表6-52-项集
进而得到如表6-6所示的频繁2-项集。
表6-6频繁2-项集
3-项集如表6-7所示。
表6-73-项集
由表6-7可知,没有频繁3-项集。
由表6-6所示的频繁2-项集及表6-2中的数据,可得:
面包
牛奶,牛奶
面包,牛奶
啤酒,啤酒
牛奶,面包
啤酒的置信度都为:
0.67,啤酒
尿布,啤酒
面包的置信度为0.5,这些规则不满足最小支持度0.8的要求,只有尿布
啤酒的置信度为1,满足最小支持度0.8的要求。
因此,由表6-2中所示的顾客购买商品的事务集中得出的满足给定条件的关联规则是:
尿布
啤酒。
6.3.2频繁模式增长
频繁模式增长[3](FrequentPattern-growth)采用了一种紧缩的数据结构来存储频繁项集所需要的全部信息,其基本思想是将提供频繁项集的数据库压缩到一棵频繁模式树(FP-tree)上来保留项集的关联信息。
在事务数据库D和最小支持度阈值minσ条件下,FP-tree的构造步骤如下:
1.树的根节点为T,其值为null;
2.扫描事务数据库D,获得D中所包含的全部频繁1-项集以及它们各自的支持度。
对该频繁1-项集中的频繁项按其支持度降序排序得到L。
设排序后的频繁项表为[p|P],其中p是第一个频繁项,而P是剩余的频繁项。
调用insert_tree([p|P],T)。
insert_tree([p|P],T)过程执行情况如下:
如果T有子女N使N.item_name=p.item_name,则N的计数增加1;否则创建一个新节点N,将其计数设置为1,链接到它的父节点T,并且通过node_link将其链接到具有相同item_name的节点。
如果P非空,递归地调用insert_tree(P,N)。
3.创建一个含有项id、支持度计数、节点链这三个域头表,其中项id用来唯一标识某一频繁项,支持度计数用来记录对应频繁项的支持度数,节点链是一个指向FP-tree树中第一个频繁项节点的头指针。
例6.3根据表6-8所示的事务数据库利用上面介绍的FP-tree的方法来寻找频繁模式,假设最小支持数为2。
表6-8模拟的事务数据库
由表6-8可以得到频繁1-项集L,如表6-9所示。
表6-9频繁1-项集L
根据表6-8和表6-9构造相应的FP-tree,具体步骤如下:
第一步,创建根节点,用“null”表示;
第二步,扫描事务数据库D中的第1个事务项“面包,牛奶,啤酒”,将该事务项按L的次序排列成“牛奶,面包,啤酒”,并构造树的第一个分支<(牛奶:
1),(面包:
1),(啤酒:
1)>。
其中,“牛奶”是根节点的子女节点,“面包”是“牛奶”的子女节点,“啤酒”是“面包”的子女节点。
接着扫描第2个事务项“牛奶,尿布”,同样将该事务项按L的次序排列,序列仍是“牛奶,尿布”,它生成一个分支,其中“牛奶”是根节点的子女节点,“尿布”是“牛奶”的子女节点。
但由于该分支与第一个事务中已存在的分支共享前缀“牛奶”,这样,就可以将节点“牛奶”的计数增加1,并创建一个新节点“尿布”,“尿布”这个节点是“牛奶”这个节点的子女节点。
根据这个想法,依次扫描剩余七个事务,并把相应的分支填上就可。
第三步,创建头表,并使该头表与第二步所建的tree链接在一起。
最后得到带头表的FP-tree,如图6-3所示。
图6-3FR-tree
有了FR-tree后,就可以在此树上进行挖掘,以期找到频繁模式,这种频繁模式的查找是从L表中的商品项,采用由下至上的方式来实现,具体步骤如下:
第一步,考虑“啤酒”这个商品,它是L中的最后一项,顺着“啤酒”的头指针,我们可以看出在FR-tree中,“啤酒”出现在两个分支中,分别是<(牛奶面包啤酒:
1)>和<牛奶面包可乐啤酒:
1>。
把“啤酒”当做后缀,它的两个对应前缀为:
<(牛奶面包:
1)>和<牛奶面包可乐:
1>,它们形成“啤酒”的条件模式基。
它的条件FR-tree只包含单个路径<(牛奶面包:
2)>,不包含“可乐”,因为它的支持度计数小于最小支持度阈值。
该路径产生的频繁模式有:
牛奶啤酒:
2,面包啤酒:
2,牛奶面包啤酒:
2。
第二步,对于“尿布”来说,它出现在<(牛奶面包尿布:
1)>、<(牛奶尿布:
1)>和<(面包尿布:
1)>分支中,它的条件模式基为<(牛奶面包:
1)>、<(牛奶:
1)>和<(面包:
1)>。
它的条件FR-tree包含路径<(牛奶:
2)>,<(面包:
2)>,不包含<(牛奶面包)>,因为它的支持度计数小于最小支持度阈值。