关联规则分析也是一种比较常见的推荐算法,主要是根据历史数据统计不同规则出现的关系,比如: X − > Y X->Y X−>Y,表示 X X X事件发生后, Y Y Y事件也会有一定概率发生。
关联规则分析最著名的就是“啤酒-尿布”的经典案例,沃尔玛的超市管理人员通过数据发现,很多买尿布的人大概率事件会去购买啤酒。这是因为在美国很多妈妈在家带孩子,所以去超市买尿布的任务就交给了爸爸,而一般爸爸都会在买尿布的时候顺手买一罐啤酒喝,所以明明是不相关的两个东西就有了很大的关联。
关联规则分析的最终目标就是要找出强关联规则。一般使用 A p r i o r i Apriori Apriori、 F P − G r o w t h FP-Growth FP−Growth、 E c l a t Eclat Eclat算法。这里我们主要分析一下 A p r i o r i Apriori Apriori。
假设存在规则 X − > Y X->Y X−>Y,则称 X X X为前项, Y Y Y为后项:
S u p p o r t ( X − > Y ) = 同 时 包 含 X Y 的 数 据 数 数 据 总 数 Support(X - > Y) = \frac{{同时包含XY的数据数}}{数据总数} Support(X−>Y)=数据总数同时包含XY的数据数
C o n f ( X − > Y ) = 同 时 包 含 X Y 的 数 据 数 包 含 X 的 数 据 数 Conf(X - > Y) = \frac{{同时包含XY的数据数}}{包含X的数据数} Conf(X−>Y)=包含X的数据数同时包含XY的数据数
uesr | phone |
---|---|
A | { M i x 3 , X R , m a t e 20 } \{Mix3, XR, mate20\} {Mix3,XR,mate20} |
B | { M i x 3 , P 20 , n e x s } \{Mix3, P20, nexs\} {Mix3,P20,nexs} |
C | { M i x 3 , P 20 , n e x s , m a t e 20 } \{Mix3, P20, nexs, mate20\} {Mix3,P20,nexs,mate20} |
D | { P 20 , n e x s } \{P20, nexs\} {P20,nexs} |
假设我们的最小支持度为0.5,最小置信度为0.75。首先计算最少个数项集的支持度
phone | Support |
---|---|
{ n e x s } \{nexs\} {nexs} | 0.75 |
{ P 20 } \{P20\} {P20} | 0.75 |
{ M i x 3 } \{Mix3\} {Mix3} | 0.75 |
{ m a t e 20 } \{mate20\} {mate20} | 0.5 |
{ X R } \{XR\} {XR} | 0.25 |
因为最小支持度为0.5,所以 { X R } \{XR\} {XR} 不符合,直接被剔除。将项集个数增加一位,如果拓展项集有子集 { X R } \{XR\} {XR} ,直接去掉。
phone | Support |
---|---|
{ M i x 3 , m a t e 20 } \{Mix3, mate20\} {Mix3,mate20} | 0.5 |
{ M i x 3 , P 20 } \{Mix3, P20\} {Mix3,P20} | 0.5 |
{ M i x 3 , n e x s } \{ Mix3, nexs\} {Mix3,nexs} | 0.5 |
{ P 20 , n e x s } \{P20, nexs\} {P20,nexs} | 0.75 |
{ P 20 , m a t e 20 } \{P20, mate20\} {P20,mate20} | 0.25 |
{ n e x s , m a t e 20 } \{nexs, mate20\} {nexs,mate20} | 0.25 |
根据最小支持度,再次剔除 { P 20 、 m a t e 20 } \{P20、mate20\} {P20、mate20}, { n e x s 、 m a t e 20 } \{nexs、mate20\} {nexs、mate20} 这两个项集,继续拓展,同上面一样,拓展项集存在子集 { P 20 、 m a t e 20 } \{P20、mate20\} {P20、mate20}, { n e x s 、 m a t e 20 } \{nexs、mate20\} {nexs、mate20},则此拓展项集直接去除。
phone | Support |
---|---|
{ M i x 3 , P 20 , n e x s } \{Mix3, P20, nexs\} {Mix3,P20,nexs} | 0.5 |
拓展到最后,项集已经无法继续拓展,这个时候最终的项集为 { M i x 3 , P 20 , n e x s } \{Mix3, P20, nexs\} {Mix3,P20,nexs}, 子集为:
{ M i x 3 } \{Mix3\} {Mix3}, { n e x s } \{nexs\} {nexs}, { P 20 } \{P20\} {P20}, { M i x 3 , n e x s } \{Mix3, nexs\} {Mix3,nexs}, { M i x 3 , P 20 } \{Mix3, P20\} {Mix3,P20}, { n e x s , P 20 } \{nexs, P20\} {nexs,P20}
逐次计算上述子集的支持度:
上面选择拓展项大概可以分以下几个步骤:获取项集->剪枝->获取拓展项集,使用python实现如下:
C on f ( { M i x 3 } − > { P 20 , n e x s } ) = 2 3 = 0.666666666 C{\text{on}}f(\{ Mix3\} - > \{ P20,nexs\} ) = \frac{2}{3} = 0.666666666 Conf({Mix3}−>{P20,nexs})=32=0.666666666
C on f ( { n e x s } − > { P 20 , M i x 3 } ) = 2 3 = 0.666666666 C{\text{on}}f(\{ nexs\} - > \{ P20,Mix3\} ) = \frac{2}{3} = 0.666666666 Conf({nexs}−>{P20,Mix3})=32=0.666666666
C on f ( { P 20 } − > { M i x 3 , n e x s } ) = 2 3 = 0.666666666 C{\text{on}}f(\{ P20\} - > \{ Mix3,nexs\} ) = \frac{2}{3} = 0.666666666 Conf({P20}−>{Mix3,nexs})=32=0.666666666
C on f ( { M i x 3 , n e x s } − > { P 20 } ) = 2 2 = 1.0 C{\text{on}}f(\{ Mix3, nexs\} - > \{ P20\} ) = \frac{2}{2} = 1.0 Conf({Mix3,nexs}−>{P20})=22=1.0
C on f ( { M i x 3 , P 20 } − > { n e x s } ) = 2 2 = 1.0 C{\text{on}}f(\{ Mix3, P20\} - > \{ nexs\} ) = \frac{2}{2} = 1.0 Conf({Mix3,P20}−>{nexs})=22=1.0
C on f ( { P 20 , n e x s } − > { M i x 3 } ) = 2 3 = 0.666666666 C{\text{on}}f(\{ P20,nexs\} - > \{Mix3 \} ) = \frac{2}{3} = 0.666666666 Conf({P20,nexs}−>{Mix3})=32=0.666666666
最小置信度为0.75,所以只有 { P 20 , n e x s } − > { M i x 3 } \{ P20,nexs\} - > \{Mix3 \} {P20,nexs}−>{Mix3}与 { M i x 3 , P 20 } − > { n e x s } \{ Mix3, P20\} - > \{ nexs\} {Mix3,P20}−>{nexs}符合最强关联规则,即买过 { P 20 , n e x s } \{ P20,nexs\} {P20,nexs}有很大可能买 M i x 3 Mix3 Mix3, 买过 { M i x 3 , P 20 } \{ Mix3, P20\} {Mix3,P20}有很大概率买 n e x s nexs nexs。
提升度
提升度表示先购买 X X X 对购买 Y Y Y 的概率的提升作用,用来判断规则是否有实际价值,即使用规则后商品在购物车中出现的次数是否高于商品单独出现在购物车中的频率。如果大于1说明规则有效,小于1则无效。
L i f t ( X − > Y ) = S u p p o r t ( X ∩ Y ) S u p p o r t ( X ) ∗ S u p p o r t ( Y ) Lift(X - > Y) = \frac{{Support(X \cap Y)}}{Support(X)*Support(Y)} Lift(X−>Y)=Support(X)∗Support(Y)Support(X∩Y)
根据公式,可以推出
L i f t ( { P 20 , n e x s } − > { M i x 3 } ) = 2 / 4 ( 3 / 4 ) ∗ ( 3 / 4 ) = 0.8889 Lift(\{ P20,nexs\} - > \{Mix3 \})=\frac{2/4}{(3/4)*(3/4)} = 0.8889 Lift({P20,nexs}−>{Mix3})=(3/4)∗(3/4)2/4=0.8889
L i f t ( { M i x 3 , P 20 } − > { n e x s } ) = 2 / 4 ( 2 / 4 ) ∗ ( 3 / 4 ) = 1.3333 Lift(\{ Mix3, P20\} - > \{ nexs\})=\frac{2/4}{(2/4)*(3/4)} =1.3333 Lift({Mix3,P20}−>{nexs})=(2/4)∗(3/4)2/4=1.3333
因为 L i f t ( { P 20 , n e x s } − > { M i x 3 } ) < 1 Lift(\{ P20,nexs\} - > \{Mix3 \})<1 Lift({P20,nexs}−>{Mix3})<1,规则无效,而 L i f t ( { M i x 3 , P 20 } − > { n e x s } ) > 1 Lift(\{ Mix3, P20\} - > \{ nexs\})>1 Lift({Mix3,P20}−>{nexs})>1,所以 { M i x 3 , P 20 } − > { n e x s } \{ Mix3, P20\} - > \{ nexs\} {Mix3,P20}−>{nexs}规则对于商品 { n e x s } \{nexs \} {nexs} 有提升效果。所以最终推荐为买过 { M i x 3 , P 20 } \{ Mix3, P20\} {Mix3,P20}有很大概率买 n e x s nexs nexs。
代码分析
基于关联规则分析的推荐系统