挖掘商品间的联系:频繁项集挖掘与关联分析

我们常常会在管理中遇到这样的问题,超市如何能通过用户购买数据来提高利润。如何将数据转化为利润,用好这些数据。
我们这里提出一种关联分析方法,可以从用户的购买数据中得到,其一般购买了商品A的同时,也会对商品B有需求,而一旦将A和B捆绑或靠近在一起销售,并以一定的折扣来刺激消费,这样能够得到更可观的销量。那么如何能够找到频繁出现被人购买的商品,并且从中抽取出若干件商品的关联关系,这就是我们今天要讨论的问题。

假设已经有了一份数据集,其中的每条记录都是一人次用户购买的商品清单。

使用Apriori算法进行关联:这是一种无监督学习策略
一个项集的支持度:数据集中包含该项集的记录占总记录的比例;
一条规则的置信度(可信度):这条规则出现的次数/记录总数。即 尿布->葡萄酒的可信度为: 尿布,葡萄酒联合出现次数/尿布出现的总次数
Apriori原理为:如果某一项集是频繁的,则它的所有子集也是频繁的,反之,如果某一项集是非频繁的,则其所有超集也是非频繁的。 超集就是包含这一项集的其他集合,与子集概念相反,b是B的子集,则B是b的超集。
故已知一个是非频繁的,即不满足设定的支持度,其超集也不需要再次进行计算,以缩小计算量。
用Apriori算法来发现频繁集:首先对单个物品(元素)进行查找,看哪些满足最小支持度,即本身就出现很频繁,再将这些组合成两个元素的项集,计算支持度,并去掉小于最小支持度的组合,从而进一步进行组合,即再加一项组合(k+1项组成的候选项集)。

从频繁项集中挖掘关联规则:
规则: {1,23,33}->{2}
那么{1,23,33}为左部,{2}为右部。
我们为每个频繁项集生成关联规则,如果某条规则不满足最小可信度要求,那么所有子集也不满足。
生成关联规则需要:频繁项集列表、包含频繁项集支持数据的字典、最小可信度。

用更高效的方法来进行挖掘频繁项集:使用FP-growth算法来高效发现频繁项集
在搜索引擎中输入一个单词或单词的一部分,引擎会自动补全查询词项。用户甚至都不清楚搜索引擎推荐的东西是否存在反而去搜索推荐词项。
互联网在处理庞大的用户数据时就是使用FP-growth算法,来发现频繁项集,找出经常一起出现的词对。
这一算法比Apriori要快,基于Apriori构建,其任务是将数据集存储在一个FP树结构之后发现频繁项集或是频繁项对,即常出现在一起的元素项的集合。速度比Apriori快2个数量级。只需对数据集进行两次扫描:第一次对所有元素项的出现次数进行计数,如果某元素是不频繁的,那么包含该元素的超集就是不频繁的,无需再考虑。第二遍只考虑频繁元素。

FP树

B:8表示 BXXXX这样的形式出现了8次,A:2 表示AXXXX的形式出现了2次。D:1是叶节点,表示BACD这个分支出现了一次。

构建FP树:
1、 遍历整个数据集,移除不满足最小支持度的元素项;
如果没有元素项满足要求,则退出
2、 根据全局频率对每个事务中的元素进行排序
3、 使用排序后的频率项集对树进行填充。
4、 最后对剩下的元素迭代调用updateTree。
从FP树种挖掘频繁项集的基本步骤:
1、 从FP树种获得条件模式基;
2、 利用条件模式基,构建一个条件FP树;
3、 迭代重复步骤(1)、(2),直到树包含一个元素项为止。
什么是条件模式基?
条件模式基是以所查找元素项为结尾的路径集合,每条路径其实都是一条前缀路径,从根节点到叶节点就称为路径。 D的前缀路径是{BA}、{BC}、{AC}。
发现前缀路径:头指针包含相同类型元素链表的起始指针,一旦到达了每一个元素项,就可以上溯这棵树直到根节点为止。
就是使用新的数据结构去更快处理庞大数据的方法,可以以较快速度发现频繁项集,但这种方法不能发现其中的关系。

猜你喜欢

转载自blog.csdn.net/zzyy0929/article/details/79390905