Apriori算法
Apriori算法是一种基于关联规则(Association rule)的原理的代表性算法。该算法源自于“啤酒喝尿不湿”的故事,Apriori算法应用广泛,可用于购物篮分析、消费市场价格分析,猜测顾客的消费习惯……
如下表1,我们通常称其为购物篮交易(market basket transaction)。表中每一行对应一个交易,包含一个唯一标识ID和特定顾客购买的商品集合。零售商对分析这些数据很感兴趣,以便了解其顾客的购买行为。可以使用这种有价值的信息来支持各种商业中的实际应用,如市场促销,库存管理和顾客关系管理等等。
流水记录(ID) | 购物详细清单 | ||||||
1 | 辣条,面包,牙膏,果冻,毛巾 | ||||||
2 | 面包,雨伞,辣条 | ||||||
3 | 牛奶,面包,可乐 | ||||||
4 | 果粒橙,洗面奶,毛巾 | ||||||
5 | 雨伞,辣条,牛奶 | ||||||
6 | 面包,雨伞,果粒橙,可乐 | ||||||
7 | 洗面奶,毛巾,牛奶 |
那针对上述数据,作为超市的老板,目前库内积压了很多毛巾,能否基于上述分析,给出一种策略,提升毛巾的交易量,进一步减少库存,实现利益的最大化呢?
在上述的问题中,我们首先需要引入“关联规则”这个概念。何为关联规则?
关联规则:即事物(事件)和事物(事件)之间的关联性。如放到购物篮分析场景中,关联规格表现的就是购物篮里面的商品与商品之间的关联性。通俗解释即:购物篮中的商品能够体现用户的消费习惯,通过研究购物篮中商品与商品之间的关联规则,可以反向推导用户的消费标签,最后利用这些标签方便后续运营方的有效运营(比如知道了这个地区的人比较抠,那么就可以通过适当发放更多的礼物券或者其他来增加用户粘性等……)。
关联规则数学的表达:关联规则是形如 X→Y 的蕴涵表达式,其中X和Y是不相交的项集,即 X∩Y=∅。
说白了,就是通过关联规则找出哪些是商品放在一起会卖的更好?若是这样认为,会引出下一个问题,既然关联规则能体现哪些东西放在卖的更好,那么卖的好的是不是也分为:卖的第一好,卖的第二好…….
言外之意就是关联规则需要通过强度来排名,对“好”这个词进行量化操作。
那么关联规则的强度,我们是通过支持度(Support)和置信度(Confidence)来衡量的。
支持度(Support):支持度是指商品的受欢迎程度(也可以理解为衡量某淘、某东、某猫最热的那些商品的标准),可以通过查找包含特定项目的交易数量除以交易总数来计算。
支持度(面包)=(包含(面包)的交易)/(总交易)=4/7=0.5714
支持度(雨伞)=(包含(雨伞)的交易)/(总交易)=3/7=0.4285
支持度(面包,雨伞)=(包含(面包,雨伞)的交易)/(总交易)=????
支持度(面包,雨伞,辣条)=(包含(面包,雨伞,辣条)的交易)/(总交易)=???
置信度(Confidence,也可以叫信心度):如果购买物品A,也会购买物品B的概率(或者叫可能性). 可以通过查找A和B一起购买的交易数量除以购买A的交易总数来计算。在数学上,它可以表示为:
置信度(A→B)=(包含(A和B)的交易)/(包含A的交易)。
置信度(面包→雨伞)=(包含(面包,雨伞)的交易)/(包含(面包)的交易)=2/4=50%
另外再补充一个:提升度
提升度是指A出售时B的销售比率的增加(比如当前销售一件A,那么接下来B商品会因为A卖掉的缘故,下一次被厂家卖掉(B)的概率的增加)。
提升度(A → B)可以通过将置信度(A → B)除以支持度(B)来计算。提升度(A → B)=P(B A)/P(B)。
说白了,就是在买A的基础上还买了B的交易记录 除以 独立买B的交易记录。也就是说A的卖不卖是否可以影响B的销售。
若提升度(A → B)<=1。说明A卖不卖和B销售一点关系都没有(也可以叫两个商品独立)。
若提升度(A → B)>1,则说明A卖不卖和B是有关系的,通常我们认为若提升度(A → B)>=3的时候,A → B是强关联规则 提升度(面包→雨伞)=(置信度(面包→雨伞))/(支持度(雨伞))=????
引入关联规则强弱的判别指标之后, k-项集概念。
以表 1 为例:
K-项集:一个包含 k 个数据项的项集
(面包,雨伞,辣条)是一个 3-项集
(面包,雨伞)是一个 2-项集
关联规则挖掘算法可以分为两步:
一、 产生频繁项集:发现满足最小支持度阈值的所有项 集,即频繁项集
二、 上步骤一中发现的频繁项集中提取大于置信度阈值 的规则,即所谓的强规则
算法过程
1、找出频繁项集
流水记录(ID) | 购物详细清单 |
1 | 辣条,面包,牙膏,果冻,毛巾 |
2 | 面包,雨伞,辣条 |
3 | 牛奶,面包,可乐 |
4 | 果粒橙,洗面奶,毛巾 |
5 | 雨伞,辣条,牛奶 |
6 | 面包,雨伞,果粒橙,可乐 |
7 | 洗面奶,毛巾,牛 |
以下示例:假设最小支持度>2
1-项集支持度计算
1-项集 | 支持度计数 |
辣条 | 3 |
面包 | 4 |
牙膏 | 1 |
果冻 | 1 |
雨伞 | 3 |
牛奶 | 3 |
可乐 | 2 |
洗面奶 | 2 |
毛巾 | 3 |
果粒橙 | 1 |
比较候选支持度计数与最小值支持度(2),筛选出 1-频 繁项集。
1-项集 | 支持度计数 |
辣条 | 3 |
面包 | 4 |
雨伞 | 3 |
牛奶 | 3 |
可乐 | 2 |
洗面奶 | 2 |
毛巾 | 3 |
由 1-项集产生候选的 2-项集
1-项集 | 支持度计数 |
{辣条,面包} | 2 |
{辣条,雨伞} | 2 |
{辣条,牛奶} | 1 |
{辣条,可乐} | 0 |
{辣条,洗面奶} | 0 |
{辣条,毛巾} | 1 |
{面包,雨伞} | 2 |
{面包,牛奶} | 1 |
{面包,可乐} | 2 |
{面包,洗面奶} | 0 |
{面包,毛巾} | 1 |
{雨伞,牛奶} | 1 |
….(未完待续) | ….(未完待续) |