当前位置: 首页 > 科技观察

5分钟掌握Python关联规则分析

时间:2023-03-19 17:08:59 科技观察

1.关联规则你可能听说过一个用来促进数据挖掘的案例:啤酒和尿布;据说,沃尔玛超市在分析顾客购买记录时发现,很多顾客在购买啤酒的同时,也会购买婴儿纸尿裤,于是超市调整了啤酒和纸尿裤的货架摆放,让这两个品类放在一起;结果,这两个类别的销售额显着增加;原因是很多新生儿男性在购买啤酒的时候,都会带上一些婴儿用品。不管这个案例是否属实,案例中分析客户购买记录的方法是关联规则。关联规则分析,也称为购物篮分析,用于分析数据集中项目之间的关系。1.1基本概念Itemset:物品的集合,比如collection{milk,cereal,sugar}是一个3-itemset,可以认为是购买记录中物品的集合。频繁项集:顾名思义,就是频繁出现的项的集合。如何定义频繁?由比例决定,在关联规则中使用支持度和置信度这两个概念来计算比例值。Support:共现项占整体项的比例。以购买记录为例,有100条购买记录,如果商品A和B同时有50条购买记录(即A和B同时有50条购买记录),则Supportofthe2-itemsetofAandBoverthereis50%Confidence:购买A后购买B的条件概率。根据贝叶斯公式可以表示为:Promotion:为了判断实际价值生成规则,即使用该规则后产品出现的次数是否高于产品单独评分率,提升并衡量购买X对购买Y概率的提升效果。如可从下面的公式可以看出,如果X和Y相互独立,则提升度为1,提升度越大,X->Y之间的相关性越强。1.2关联规则Apriori算法关联规则方法的步骤如下:查找频繁项集,找出关联规则Apriori算法是经典的关联规则算法。Apriori算法的目标是找到K项的最大频繁集。Apriori算法从寻找1-itemset开始,通过最小支持度阈值进行剪枝,然后寻找2-itemset、3-itemset,直到没有更多的itemsets。下面是一个案例说明:图中有4条记录,记录项包括1、2、3、4、5。首先求出1个项集对应的支持度(C1)。可以看出,支持度4低于Minimumsupportthreshold,先切断(L1)。从1个项目集生成2个项目集,计算支持度(C2),可以看出(1,5)(1,2)支持度低于最小支持度阈值,先截断(L2)从中生成32个项集Itemset,(1,2,3)(1,2,5)(2,3,5)只有(2,3,5)满足要求,没有更多的项集,自定义迭代2即可。mlxtend实战关联规则关联规则目前在scikit-learn中并没有实现。这是另一个python库mlxtend。2.1安装pipinstallmlxtend2.2简单例子看数据集:importpandasaspditem_list=[['milk','bread'],['bread','diapers','beer','potatoes'],['milk','尿布','啤酒','可乐'],['面包','牛奶','尿布','啤酒'],['面包','牛奶','尿布','可乐']]item_df=pd.DataFrame(item_list)数据格式处理,导入模型的数据需要满足bool格式columns_)Calculatefrequentitesetsfrommlxtend.frequent_patternsimportapriori#use_colnames=True表示使用元素名,默认False使用列名表示元素,设置最小支持min_supportfrequent_itemsets=apriori(df,min_support=0.05,use_colnames=True)frequent_itemsets.sort_values(by='support',ascending=False,inplace=True)#选择2个频繁项集print(frequent_itemsets[frequent_itemsets.itemsets.apply(lambdax:len(x))==2])计算associationrulesfrommlxtend.frequent_patternsimportassociation_rules#metric可以有很多度量选项,返回的表列名可以作为参数association_rule=association_rules(frequent_itemsets,metric='confidence',min_threshold=0.9)#associationrules可以提高排序association_rule.sort_values(by='电梯',升序=False,inplace=True)association_rule#规则是:从antecedents->consequents中选出关联规则,按照提升度排序后,提升度可能最高的规则在我们的常识范围内,所以这条规则的价值不高,所以我们生成的规则要根据业务特点进行筛选,比如开头提到的完全不同类别之间的关系(啤酒->纸尿裤)。作者最近使用关联规则分析了用户的体检报告记录,也得到了各种疾病的有意义的关联,比如并发症,不同疾病的相互影响等。3.小结这部分介绍了关联规则的基本概念和经典算法Apriori,以及python实现库mlxtend的使用。总结如下:关联规则用于分析数据集中项目之间的关系。想一想啤酒和尿布故事的三个重要概念:支持、信心和促进。Apriori先通过迭代找到一个项集,并使用支持度过滤项集,逐步找出所有k个项集使用置信度或提升度来选择满足要求的规则mlxtend需要将数据转换成bool值