目录
美国沃尔玛超市对一年多的原始交易数据进行了详细的分析,得到一个意外发现:与尿布一起被购买最多的商品竟然是啤酒。
--关联规则在客户关系管理系统中的经典案例
关联规则
形如"如果X那么Y(If…Then…)",前者为条件,后者为结果。例如一个顾客,如果买了X,那么他也会购Y。
衡量标准
如何来度量一个规则是否够好?主要有两个量,置信度(Confidence)和支持度(Support)。
支持度
对于关联规则R:X=>Y,其中,,并且。
规则R的的支持度(Support)是交易集中同时包含X和Y的交易数与所有交易数之比。
关联规则的最小支持度也就是衡量频繁集的最小支持度(Minimum Support),记为supmin,它用于衡量规则需要满足的最低重要性。
置信度
表示了这条规则有多大程度上值得可信。
设条件的项的集合为X,结果的集合为Y。置信度计算在X中,同时也含有Y的概率(即:if X ,then Y的概率)。即 Confidence(X=>Y)=P(Y|X)。
关联规则的最小置信度(Minimum Confidence)记为confmin,它表示关联规则需要满足的最低可靠性。
如果规则R:X=>Y满足support(X=>Y)>supmin且confidence(X=>Y)>confmin,称关联规则X=>Y为强关联规则,否则称关联规则X=>Y为弱关联规则。
在挖掘关联规则时,产生的关联规则要经过supmin和confmin的衡量,筛选出来的强关联规则才能用于指导商家的决策。
杠杆率(leverage)
为0时X和Y独立,越大X和Y的关系越密切。
确信度(conviction)
也是用来衡量X和Y的独立性。
提升度
引入提升度Lift,以度量此规则是否可用。它描述的是:相对于不用规则,使用规则可以提高多少。
Lift(X->Y)=Confidence(X->Y)/Support(Y)=p(XY)/p(X)p(Y)
算法:
- 找出满足支持度的单个商品
- 将以上商品两两组合,找出满足支持度的两两组合
- 依次在以上商品中找到三个,四个....满足条件的组合
- 在满足条件的组合中找置信度满足条件的规则
实现
#定义函数读取购物篮数据
def read_file_apriori(filename):
k=[]
with open(filename) as f:
for i in f:
k.append(i.split())
return k
data=read_file_apriori("d:/datasets/basket.txt")
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori
import pandas as pd
te = TransactionEncoder()
#编码
te_ary = te.fit(data).transform(data) #类似onehot编码,所有的商品都是特征,购物篮中有的样本对应的特征为True,没买的样本对应的特征值为False
df = pd.DataFrame(te_ary, columns=te.columns_)
freq=apriori(df,min_support=0.05, use_colnames=True) #找出满足最小支持度的商品
TransactionEncoder编码的结果
满足支持度条件的商品及组合
找出满足条件的规则
#导入关联规则包
from mlxtend.frequent_patterns import association_rules
#计算关联规则
result = association_rules(freq, metric="confidence", min_threshold=0.4) #找出满足置信度大于0.4的规则
'''
supported metrics are 'support', 'confidence', 'lift',
'leverage', and 'conviction'
'''