关联算法

一、概念

 

关联算法常用于购物篮分析:找到正向、强关联的商品集合,用来优化货架商品摆放和捆绑销售。

关联算法需要明确:频繁项集(A,B),A->B和B->A的关联方向(正、负)与关联程度(强、弱)。

频繁项集:出现次数不小于设定阀值的商品集合

电商常用单品推荐单品,称为频繁2项集,形如(A,B)。

关联算法重要定理:频繁项集的所有非空子集也都必须是频繁的。

比如(A,B,C)是频繁项集,那(A,B)肯定也是频繁项集。如果(A,B)不是频繁项集,那(A,B,C)肯定也不是频繁项集。

支持度(Support):用来找频繁项集、计算作用度和置信度

Support(A,B)=A、B两件商品同时出现的次数 /  总购物车次数。

分母N是固定的,所以很多文章都用分子frq(X,Y)取名"支持计数"来比较支持度小大。

支持度不小于用户设定的最小支持度阀值的项集,称为频繁项集。

作用度(Lift):又名提升度,用来衡量关联方向

传统关联算法是没有作用度指标的,很多文章示例都没有提及。

加入这个指标的用意是:看两个商品之间的关联是正向的还是负向的。

也就是说看一个商品的出现会提高还是会降低另一个商品的出现概率。

Life(A,B)=Support(A,B)/(Support(A)*Support(B))有A的情况下有B的概率/有B的概率。

大于1说明正相关、提高购买概率。小于1说明负相关、降低购买概率。等于1说明互不影响。

比如总共100条购物记录,A出现的次数是30次,B出现的次数是50次,AB同时出现的次数是10次,那么:

Life(A->B)=Life(B->A)=Life(A,B)=(10/100) / (30/100)*(50/100)=2/3。

对购物车中已经包含商品A/B的用户推荐商品B/A,其购买概率(10/30)是单独购买B/A概率(50/100)的2/3倍。

比如对购买雨衣的用户推荐雨伞,比对未购买雨衣的用户推荐雨伞的收益小。这个关联是无效的、反向的。

置信度(Confidence):用来衡量关联程度

Confidence(A->B)=Support(A,B)/Support(A)。即购买A后也会购物B的概率。

Confidence(A->B)<>Confidence(B->A),如果Confidence(A->B)更大,表示对已购买A的推荐B的成功率更高

二、总结关联算法步骤

1.从支持度大于支持度阀值的热销商品里找到多个频繁2项集(Ai,Bi);

2.计算Life(Ai,Bi),筛选出大于1的频繁2项集(Ai,Bi);

3.计算Confidence(Ai->Bi)和Confidence(Bi->Ai),所有值高低排序;

4.找到大于置信度阀值的或者取前N个最高的(X->Y),营销策略:对购买X的用户推荐Y。

 

总购物记录条数是K,A的出现次数是N1,B的出现次数是N2,A、B的出现次数是M,那么:

假设用户设定的最小支持度阀值=J/K,Support(A,B)=M/K,如果M>J,那么(A,B)是频繁项集。

Life(A,B)=Support(A,B)/(Support(A)*Support(B))=(M/K)/((N1/K)*(N2/K))=(M*K)/(N1*N2)。

Confidence(A->B)=Support(A,B)/Support(A)=M/N1,Confidence(B->A)=Support(A,B)/Support(B)=M/N2。

关联算法(Assocaition Algorithm)的区别主要在步骤1的实现速度。

主要是数据的存储形式与查找方式不同,导致频繁项集的生成过程不同,进而性能不同。

根据数据的表述形式:水平、垂直、前缀树,分别对应三种关联算法:Apriori、Eclat 、FP growth。

Apriori要持续全表扫描数据库,对超大型数据会出现性能问题,所以又推出了Eclat 、FP growth和其他。

sklearn没有现成模块支持关联算法。可以自己写个封装起来,或者去网上找别人写好的。

https://www.cnblogs.com/Allen-win/articles/7638557.html 两种算法的数据存储和查找比较

https://www.cnblogs.com/infaraway/p/6774521.html 三种算法的代码实现以及性能比较

实际的关联营销会比上述关联算法更复杂一些:会结合库存、流量分配、支持度和置信度的权重综合考虑。

 

三、关于支持度和置信度阀值的困惑

支持度阀值,困惑较大:

Q:小于支持度阀值的低销量物品,为什么不用关联营销?也许关联性更强。

A:如果一个物品本身购买的人就不多,再怎么提升它也不会高到哪去。低销量物品的关联性,偶然成分更大。

Q:100次购物记录中有的物品出现10次、有的20次、有的30次,如何设置支持度阀值?

A:可以选取支持度前N%个作为支持度的阀值。

置信度阀值,困惑较小:

Q:购买了一个商品后同时购买另一个商品的概率,也许是30%、50%、70%。如何设置置信度阀值?

A:可以选取置信度前N个作为置信度的阀值。

四、算法示例

首先设定最小支持计数为2,最小支持度为2/5=40%。

第1步:扫瞄所有的事务,统计每件商品的出现次数,产生候选1-项集的集合C1

第2步:将C1中支持计数不小于最小支持计数2的候选1-项集选出,产生频繁1-项集的集合L1

第3步:利用自身连接L1 X L1产生候选2-项集的集合C2,扫瞄所有事务,统计C2中每个候选项集的支持计数

第4步:通过比较,将C2中支持计数不小于最小支持计数2的候选2-项集选出,产生频繁2-项集的集合L2

第5步:利用自身连接L2 X L2,产生候选3-项集的集合C3,重复上述过程,直至产生的候选项集不满足Apriori定理。此处由于候选3-项集为空, 频繁2-项集为最终结果。

举个例子理解为什么候选3-项集为空:比如说L2 X L2得到其中的一个3 -项集是{啤酒,尿布,牛奶},Apriori定理说频繁项集的所有非空子集也都必须是频繁的,{啤酒,尿布,牛奶}包括三个子集{啤酒,尿布},{啤酒,牛奶},{尿布,牛奶},其中{啤酒,尿布},{啤酒,牛奶}是频繁的,因为它们都出现在了L2中,但是{尿布,牛奶}不是频繁的,因此3 -项集是{啤酒,尿布,牛奶}不满足Apriori定理,其余理解类似。

第6步:计算每个项集的作用度,保留作用度大于1的。

作用度(啤酒->尿布/尿布->啤酒)=(3*5)/(4*4) =15/16 <1

作用度(啤酒->牛奶/牛奶->啤酒)=(2*5)/(4*2) =5/4 >1

作用度(尿布->婴儿爽身粉/婴儿爽身粉->尿布)= (2*5)/(4*2) =5/4 >1

保留项集(啤酒,牛奶)、(尿布,婴儿爽身粉)。

第7步:计算保留项集间的置信度。

置信度(啤酒→牛奶)= 2/4= 50%

置信度(牛奶→啤酒)= 2/2= 100%

置信度(尿布→婴儿爽身粉)= 2/4= 50%

置信度(婴儿爽身粉→尿布)= 2/2= 100%

第8步:取置信度>60%的进行营销策划:

(牛奶→啤酒):对购买牛奶的用户推荐啤酒

(婴儿爽身粉→尿布): 对购买婴儿爽身粉的用户推荐尿布

也许你认为就算不推广,他们也会有100%的概率会自己去买。何必关联营销?

要知道,这个置信度是会变的啊!

如果电商平台能给出快捷购买的渠道,体验性非常好,用户的忠诚度也会增加,置信度可能就上升了!

如果本着不管不问的态度,让用户自己去找,也许哪天他偷个懒或者忘了就不买了,置信度就降低了!

原文地址:https://www.cnblogs.com/myshuzhimei/p/11743642.html

时间: 2024-10-18 10:13:29

关联算法的相关文章

数据挖掘——关联算法

一.概念 关联(Association) 关联就是把两个或两个以上在意义上有密切联系的项组合在一起. 关联规则(AR,Assocaition Rules) 用于从大量数据中挖掘出有价值的数据项之间的相关关系.(购物篮分析) 协同过滤(CF,Collaborative Filtering) 协同过滤常常被用于分辨某位特定顾客可能感兴趣的东西,这些结论来自于对其他相似顾客对哪些产品感兴趣的分析.(推荐系统) 二.关联规则 1.相关数据指标 两个不相交的非空集合X.Y,如果X -> Y,就说X ->

Apriori 关联算法学习

1. 挖掘关联规则 1.1   什么是关联规则 一言蔽之,关联规则是形如X→Y的蕴涵式,表示通过X可以推导“得到”Y,其中X和Y分别称为关联规则的先导(antecedent或left-hand-side, LHS)和后继(consequent或right-hand-side, RHS) 1.2   如何量化关联规则 关联规则挖掘的一个典型例子便是购物车分析.通过关联规则挖掘能够发现顾客放入购物车中的不同商品之间的关联,分析顾客的消费习惯.这种关联规则的方向能够帮助卖家了解哪些商品被顾客频繁购买,

关联算法Apriori的java实现,数据库使用redis

该算法是为了实现对一些专业文章的词汇关联分析而实现的,并不是Apriori的最佳应用,确实对词频分析的一种实践. package com.my.analysis; import java.util.ArrayList; import java.util.HashSet; import java.util.Set; import redis.clients.jedis.Jedis; public class AprioriMyImpl { private double minsup = 0.3;/

用关联算法做协同过滤:

一般我们可以找出用户购买的所有去拼数据里频繁出现的项集序列,然后做频繁集挖掘,找到满足支持度阈值的关联去拼的频繁N项集或者序列.如果用户购买了频繁项集N项集或者序列里的部分商品,那么我们就可以将频繁序列或频繁项集里的其他物品按移动的评分规则推荐给用户,这个评分规则可以包括支持度.置信度和提升度等. 关联规则常用的算法有: Apriori算法 FP Tree(FP-Growth)算法 PrefixSpan算法 1.Apriori算法 首先,先理解上面提到的评分规则: 支持度:几个关联的数据在数据集

Python中的Apriori关联算法-市场购物篮分析

数据科学Apriori算法是一种数据挖掘技术,用于挖掘频繁项集和相关的关联规则.本模块重点介绍什么是关联规则挖掘和Apriori算法,以及Apriori算法的用法.此外,在小型企业场景中,我们将借助Python编程语言构建一个Apriori模型. 什么是关联规则挖掘? 如前所述,Apriori算法用于关联规则挖掘.现在,什么是关联规则挖掘?关联规则挖掘是一种用于识别一组项目之间的频繁模式和关联的技术. 例如,了解客户的购买习惯.通过查找顾客放置在其“购物篮”中的不同商品之间的关联和关联,可以得出

python进阶(一)关联sql的算法操作

上次我们讲了一个很简单的python程序,这次我们复杂一点,通过python操作更加复杂点并配合具有更多算法功能的sql语句. 首先,我们这个程序的功能为,通过python操作sql获取数据,并通过关联算法在服务器端对数据进行处理和筛选.然后返回前端,前端我们再用js通过ajax操作获取数据,并在前端再对数据进行二次处理.首先上一张效果图吧: 这里顺带用了日期插件跟分页插件.好了,废话不多说,还是直接上代码: # -*- coding: utf-8 -*- # # Copyright (C) 2

第十四篇:Apriori 关联分析算法原理分析与代码实现

前言 想必大家都听过数据挖掘领域那个经典的故事 - "啤酒与尿布" 的故事. 那么,具体是怎么从海量销售信息中挖掘出啤酒和尿布之间的关系呢? 这就是关联分析所要完成的任务了. 本文将讲解关联分析领域中最为经典的Apriori算法,并给出具体的代码实现. 关联分析领域的一些概念 1. 频繁项集: 数据集中经常出现在一起的物品的集合.例如 "啤酒和尿布" 2. 关联规则: 指两个物品集之间可能存在很强的关系.例如 "{啤酒} -> {尿布}"

Apriori 关联分析算法原理分析与代码实现

前言 想必大家都听过数据挖掘领域那个经典的故事 - "啤酒与尿布" 的故事. 那么,具体是怎么从海量销售信息中挖掘出啤酒和尿布之间的关系呢? 这就是关联分析所要完成的任务了. 本文将讲解关联分析领域中最为经典的Apriori算法,并给出具体的代码实现. 关联分析领域的一些概念 1. 频繁项集: 数据集中经常出现在一起的物品的集合.例如 "啤酒和尿布" 2. 关联规则: 指两个物品集之间可能存在很强的关系.例如 "{啤酒} -> {尿布}"

FP Tree算法原理总结

在Apriori算法原理总结中,我们对Apriori算法的原理做了总结.作为一个挖掘频繁项集的算法,Apriori算法需要多次扫描数据,I/O是很大的瓶颈.为了解决这个问题,FP Tree算法(也称FP Growth算法)采用了一些技巧,无论多少数据,只需要扫描两次数据集,因此提高了算法运行的效率.下面我们就对FP Tree算法做一个总结. 1. FP Tree数据结构 为了减少I/O次数,FP Tree算法引入了一些数据结构来临时存储数据.这个数据结构包括三部分,如下图所示: 第一部分是一个项