版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/keyue123/article/details/86504122
关联规则分析也是一种比较常见的推荐算法,主要是根据历史数据统计不同规则出现的关系,比如:
X−>Y,表示
X事件发生后,
Y事件也会有一定概率发生。
关联规则分析最著名的就是“啤酒-尿布”的经典案例,沃尔玛的超市管理人员通过数据发现,很多买尿布的人大概率事件会去购买啤酒。这是因为在美国很多妈妈在家带孩子,所以去超市买尿布的任务就交给了爸爸,而一般爸爸都会在买尿布的时候顺手买一罐啤酒喝,所以明明是不相关的两个东西就有了很大的关联。
关联规则分析的最终目标就是要找出强关联规则。一般使用
Apriori、
FP−Growth、
Eclat算法。这里我们主要分析一下
Apriori。
-
Apriori算法
Apriori主要包含两个步骤:
- 首先找出数据集中所有的频繁项集,这些项集出现的频繁性要大于或等于最小支持度
- 根据频繁项集产生强关联规则,这些规则必须满足最小支持度和最小置信度
假设存在规则
X−>Y,则称
X为前项,
Y为后项:
Support(X−>Y)=数据总数同时包含XY的数据数
Conf(X−>Y)=包含X的数据数同时包含XY的数据数
- 实例分析
假设用户会同时购买多个手机,我们就不管手机用途了,送人也好,买了摔也行,我们搜集了下面四个用户的购买记录:
uesr |
phone |
A |
{Mix3,XR,mate20} |
B |
{Mix3,P20,nexs} |
C |
{Mix3,P20,nexs,mate20} |
D |
{P20,nexs} |
假设我们的最小支持度为0.5,最小置信度为0.75。首先计算最少个数项集的支持度
phone |
Support |
{nexs} |
0.75 |
{P20} |
0.75 |
{Mix3} |
0.75 |
{mate20} |
0.5 |
{XR} |
0.25 |
因为最小支持度为0.5,所以
{XR} 不符合,直接被剔除。将项集个数增加一位,如果拓展项集有子集
{XR} ,直接去掉。
phone |
Support |
{Mix3,mate20} |
0.5 |
{Mix3,P20} |
0.5 |
{Mix3,nexs} |
0.5 |
{P20,nexs} |
0.75 |
{P20,mate20} |
0.25 |
{nexs,mate20} |
0.25 |
根据最小支持度,再次剔除
{P20、mate20},
{nexs、mate20} 这两个项集,继续拓展,同上面一样,拓展项集存在子集
{P20、mate20},
{nexs、mate20},则此拓展项集直接去除。
phone |
Support |
{Mix3,P20,nexs} |
0.5 |
拓展到最后,项集已经无法继续拓展,这个时候最终的项集为
{Mix3,P20,nexs}, 子集为:
{Mix3},
{nexs},
{P20},
{Mix3,nexs},
{Mix3,P20},
{nexs,P20}
逐次计算上述子集的支持度:
上面选择拓展项大概可以分以下几个步骤:获取项集->剪枝->获取拓展项集,使用python实现如下:
Conf({Mix3}−>{P20,nexs})=32=0.666666666
Conf({nexs}−>{P20,Mix3})=32=0.666666666
Conf({P20}−>{Mix3,nexs})=32=0.666666666
Conf({Mix3,nexs}−>{P20})=22=1.0
Conf({Mix3,P20}−>{nexs})=22=1.0
Conf({P20,nexs}−>{Mix3})=32=0.666666666
最小置信度为0.75,所以只有
{P20,nexs}−>{Mix3}与
{Mix3,P20}−>{nexs}符合最强关联规则,即买过
{P20,nexs}有很大可能买
Mix3, 买过
{Mix3,P20}有很大概率买
nexs。