关联规则
常用到的方法
将两个商品放在一起,进行售卖。和将两个商品单独售卖。他们的区别,和区别参数。
一个商品,可以叫做一个事务。
一个事务可以由多个属性组成。属性可以叫做一个项。
多个项可以组成一个集合,项集。
X和Y是项集
X为前项
Y为后项
支持度 一个项集 或者 规则在所有事务中出现的频率,⊙(X) :表示项集 X 的支持度的计数。
项集X的支持度:s(X) = ⊙(X) / N
规则 X ==> Y 表示物品集(X)对物品集 Y 的支持度,也就是物品集 X 和 Y 同时出现的概率。
某天共有 100 个顾客到商场购买物品,其中 30 个人同时购买了啤酒和尿布,那么上述的关系规则的支持度就是 30 %。
置信度 确定 Y 在 包含 X 的事务中出现的频率程度。 c(X -> Y) = ⊙(X ∪ Y)/⊙(X)
p (Y|X) = p(XY) / p(X)
置信度反应了关联规则的可信度,购买了项目集 X 中的商品的顾客同时也购买了 Y 中商品的可能性有多大
购买薯片的顾客中有 50% 的人购买了可乐,则置信度为 50%
交易ID | 购买的商品
——————
1 | A,B,C
2 | A,C
3 | A,D
4 | B,E,F
——————
(X , Y) ⇒ Z:
支持度:交易中包含(X、Y、Z)的可能性。
分母是所有商品。
置信度:包含(X、Y)的交易中也包含 Z 的条件概率。
分母是有条件的过滤项为分母。
若 支持度 和 置信度 分别大于或等于用户指定的最小支持率 minsupport 和最小 置信度 minconfidence, 则称关联规则 X -> Y 为强关联规则,否则称关联规则 X -> Y 为弱关联规则。
提升度
物品集 A 的出现对物品集 B 的出现概率发生了多大的变化。
如果没变化,说明 物品集 A 的出现对 B 没有影响。这是对支持度和可信度的一个补充度。
公式: lift (A==>B) =confidence (A==>B) / support(B) = p(B|A) / p(B)
p是概率,结果越接近 1 ,则关联性越低。
要用到一个pip包
pip install mlxtend
import pandas as pd
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules
自定义一个购物集
data = {'ID':[1,2,3,4,5,6],
'Onion':[1,0,0,1,1,1],
'Potato':[1,1,0,1,1,1],
'Burger':[1,1,0,0,1,1],
'Milk':[0,1,1,1,0,1],
'Beer':[0,0,1,0,1,0]}
df = pd.DataFrame(data)
进行关联计算,最小支持度为 50% ,低于这个数字则不显示。
支持度就是总的出现的频率,元组表示为几项的支持度。
frequent_itemsets = apriori(df[['Onion', 'Potato', 'Burger', 'Milk', 'Beer' ]], min_support=0.50, use_colnames=True)
计算规则,可以指定不同的衡量标准。
指定一个评估的指标,lift,不指定则打印的标准太多。
rules = association_rules(frequent_itemsets, metric='lift', min_threshold=1)
还可以对规则,进行一个判断打印。比如提升值,要大于1.125,并且置信度要大于 80%
rules [ (rules['lift'] >1.125) & (rules['confidence']> 0.8) ]