1、频繁项集 购物篮分析 导入 在美国沃尔玛超市的货架上,尿片和啤酒赫然地摆在一起出售。 为啥 ? 每逢周末,啤酒和尿片的销量都很大 有孩子的家庭中,太太经常嘱咐丈夫下班后要买尿片,而丈夫们在买完尿片以后又顺手买 啤酒 搞清原因后 ,尝试 将啤酒和尿片摆在一起 ,为 商家带来了大量的利润 问题 如何从浩如烟海却又杂乱无章的销售数据中,发现啤酒和尿片这类商品销售之间的联系呢? 事务 项 项集 频繁项集 相关概念 购物篮 -又称为“事务” 单个客户一次购买商品的总和称为一个购物篮 超市结算小票 项 每种商品为项 每个购物篮是一个项集, K 项集 频繁项集 多 个 购物篮和出现的项集称为频繁项集 多少
2、个算频繁的呢? 大多数 超过一定的阈值 支持度 支持度 支持度:项集同时出现的次数 支持 度为 2,表示什么? 支持 度为 0.4,表示什么? 超过支持度的即称为频繁项集 Support of Beer, Bread = 2( 0.4) 请问 S=3的情况下, 2-频繁项集有哪些? 相关概念 候选项集 获取频繁项集的项集 K-频繁项集 频繁项集中的项的数目为 K 最大频繁项集 在该支持度阈值下,不存在包含该频繁项集的频繁项集 频繁项集的例子 Items = milk, coke, pepsi, beer, juice Support threshold = 3 baskets B1 = m,
3、c, b B2 = m, p, j B3 = m, b B4 = c, j B5 = m, p, b B6 = m, c, b, j B7 = c, b, j B8 = b, c Frequent itemsets: m, c, b, j, 7 , b,c , c,j. m,b 8 Apriori 算法 Apriori算法是一种经典的生成布尔型关联规则的频繁项集挖掘算法 .算法名字是缘于算法使用了频繁项集的性质这一先验知识 . 思想 : Apriori 使用了一种称作 level-wise搜索的迭代方法 ,其中 k-项集被用作寻找 (k+1)-项集 . 首先 ,找出频繁 1-项集 ,以 L1表
4、示 .L1用来寻找 L2,即频繁 2-项集的集合 .L2用来寻找 L3,以此类推 ,直至没有新的频繁 k-项集被发现 .每个 Lk都要求对数据库作一次完全扫描 9 生成频繁项集 中心思想 : 由频繁 (k-1)-项集构建候选 k-项集 方法 找到所有的频繁 1-项集 扩展频繁 (k-1)-项集得到候选 k-项集 剪除不满足最小支持度的候选项集 10 Apriori: 一种候选项集生成 -测试方法 Apriori 剪枝原理 : 若任一项集是不频繁的 ,则其超集不应该被生成 /测试 ! 方法 : 由频繁 k-项集生成候选 (k+1)-项集 ,并且 在 DB中测试候选项 集 11 The Aprio
5、ri 算法 一个示例 Database TDB 1st scan C1 L1 L2 C2 C2 2nd scan C3 L3 3rd scan Tid Items 10 A, C, D 20 B, C, E 30 A, B, C, E 40 B, E Itemset sup A 2 B 3 C 3 D 1 E 3 Itemset sup A 2 B 3 C 3 E 3 Itemset A, B A, C A, E B, C B, E C, E Itemset sup A, B 1 A, C 2 A, E 1 B, C 2 B, E 3 C, E 2 Itemset sup A, C 2 B,
6、C 2 B, E 3 C, E 2 Itemset B, C, E Itemset sup B, C, E 2 算法优缺点 优点 : 简单、易理解、数据要求低 缺点 : I/O负载大 , 为什么? 改进? 每次计算支持度都要扫描全部数据库 13 为什么找频繁项集? 买尿布的人一般买啤酒 发现尿布与啤酒的关系 关联规则 If(尿布) then (啤酒) 这个规则以多大可能性成立呢? 可信度 )support()support()conf(IjIjI 关联规则的价值 并不是所有高可信度的关联规则都是有意义的 14 Items = milk, coke, pepsi, beer, juice B1
7、= m, c, b B2 = m, p, j B3 = m, b B4= c, j B5 = m, p, b B6 = m, c, b, j B7 = c, b, j B8 = b, c c b suppor t( , ) 4c onf ( ) 0.8suppor t( ) 5cbcbc 我们能说买了可口可乐的人一定买百事吗? 规则可信度欺骗了我们 关联规则的价值 -兴趣度 我们要看看满足 i j的人中购买 j的可能性是不是比普通人购买 j的可能性大 15 Pr)conf()Interes t( jjIjI Items = milk, coke, pepsi, beer, juice B1 =
8、 m, c, b B2 = m, p, j B3 = m, b B4= c, j B5 = m, p, b B6 = m, c, b, j B7 = c, b, j B8 = b, c c b suppor t( , ) 4c onf ( ) 0.8suppor t( ) 5cbcbc 43I ntr e st ( ) 0.0554cb 买不买可口可乐跟买啤酒毫无关系 关联规则的价值 -兴趣度 我们要看看满足 i j的人中购买 j的可能性是不是比普通人购买 j的可能性大 我们应该找什么样的呢? 找数值大的?表示什么? 购买 i对是否购买 J有 促进 作用 如果数值接近与 -1呢? 购买 i对是
9、否购买 J有 抑制 作用 16 P r )c o n f ()I n t e r e s t ( jjIjI 关联规则发现 目标:找 i,j支持度大于 s, (i j )可信度大于 c的, 也大的 无论支持度、可信度、还是兴趣度的计算都跟频繁项有关 所以问题核心是找频繁项集,也是难点所在 为什么? 扫描整个数据库哦 如果 k个项,找 1-频繁项集就要扫描数据库 K遍 先 1-频繁项集、 2-频繁项集 这样逐一找下去 I n t e r e s t ( )IjExample B1 = m, c, b B2 = m, p, j B3 = m, c, b, n B4= c, j B5 = m, p,
10、 b B6 = m, c, b, j B7 = c, b, j B8 = b, c 支持度阈值 s = 3, 可信度阈值 c = 0.75 1) Frequent itemsets: b,m b,c c,m c,j m,c,b 2) Generate rules: b m: c=4/6 b c: c=5/6 b,c m: c=3/5 m b: c=4/5 b,m c: c=3/4 b c,m: c=3/6 18 频繁项集的应用领域( 1) 商品推荐 关联规则 项是商品 货品的摆放,捆绑销售,价格策略 频繁项集的应用领域( 2) 文档抄袭 购物篮是“句子”,项是“文档” 寻找在多个购物篮中共同出
11、现的项对 A、 B、 C、 D、 E是文档 T I D I t e m s 1 A , B , C 2 A , C 3 A , B , C , D 4 A , C , D , E 5 C , D , E 频繁项集应用领域( 3) 多种药物共吃的疗效和副作用 购物 篮是“病人”,项是“药物” 病人服了药之后的效果 T I D I t e m s 疗效 1 A , B , C 治愈 2 A , C 头晕、 犯困 3 A , B , C , D 犯困 4 A , C , D , E 恶心 5 C , D , E 治愈 总结 事务、项、频繁项集 支持度 Apriori算法 关联规则 可信度、支持度 频繁项集的应用领域