• 售前

  • 售后

热门帖子
入门百科

详解Python 关联规则分析

[复制链接]
特朗普大爷 显示全部楼层 发表于 2021-10-26 13:06:06 |阅读模式 打印 上一主题 下一主题
目录


  • 1. 关联规则

    • 1.1 基本概念
    • 1.2 关联规则Apriori算法

  • 2. mlxtend实战关联规则

    • 2.1 安装
    • 2.2 简朴的例子

  • 3. 总结

1. 关联规则


大家大概听说过用于宣传数据发掘的一个案例:啤酒和尿布;据说是沃尔玛超市在分析顾客的购买记载时,发现很多客户购买啤酒的同时也会购买婴儿尿布,于是超市调解了啤酒和尿布的货架摆放,让这两个品类摆放在一起;效果这两个品类的销量都有显着的增长;分析缘故起因是很多刚生小孩的男士在购买的啤酒时,会顺手带一些婴幼儿用品。
不论这个案例是否是真实的,案例中分析顾客购买记载的方式就是关联规则分析法Association Rules。
关联规则分析也被称为购物篮分析,用于分析数据集各项之间的关联关系。

1.1 基本概念


      
  • 项集:item的集合,如集合{牛奶、麦片、糖}是一个3项集,可以认为是购买记载里物品的集合。  
  • 频繁项集:顾名思义就是频繁出现的item项的集合。怎样界说频繁呢?用比例来判断,关联规则中接纳支持度和置信度两个概念来盘算比例值  
  • 支持度:共同出现的项在团体项中的比例。以购买记载为例子,购买记载100条,假如商品A和B同时出现50条购买记载(即同时购买A和B的记载有50),那里A和B这个2项集的支持度为50%

      
  • 置信度:购买A后再购买B的条件概率,根据贝叶斯公式,可如下体现:

提升度:为了判断产生规则的实际代价,纵然用规则后商品出现的次数是否高于商品单独出现的评率,提升度和衡量购买X对购买Y的概率的提升作用。如下公式可见,假如X和Y相互独立那么提升度为1,提升度越大,说明X->Y的关联性越强


1.2 关联规则Apriori算法


关联规则方法的步调如下:
      
  • 发现频繁项集  
  • 找出关联规则
Apriori算法是经典的关联规则算法。Apriori算法的目标是找到最大的K项频繁集。Apriori算法从寻找1项集开始,通过最小支持度阈值进行剪枝,依次寻找2项集,3项集直到没有更过项集为止。
下面是一个案例图解:

      
  • 图中有4个记载,记载项有1,2,3,4,5多少  
  • 首先先找出1项集对应的支持度(C1),可以看出4的支持度低于最小支持阈值,先剪掉(L1)。  
  • 从1项集天生2项集,并盘算支持度(C2),可以看出(1,5)(1,2)支持度低于最小支持阈值,先剪掉(L2)  
  • 从2项集天生3项集,(1,2,3)(1,2,5)(2,3,5)只有(2,3,5)满足要求  
  • 没有更多的项集了,就定制迭代

2. mlxtend实战关联规则


关联规则目前在scikit-learn中并没有实现。这里介绍另一个python库mlxtend。

2.1 安装
  1. pip install mlxtend
复制代码
2.2 简朴的例子


来看下数据集:
  1. import pandas as pd
  2. item_list = [['牛奶','面包'],
  3.     ['面包','尿布','啤酒','土豆'],
  4.     ['牛奶','尿布','啤酒','可乐'],
  5.     ['面包','牛奶','尿布','啤酒'],
  6.     ['面包','牛奶','尿布','可乐']]
  7. item_df = pd.DataFrame(item_list)
复制代码
数据格式处置惩罚,传入模子的数据必要满足bool值的格式
  1. from mlxtend.preprocessing import TransactionEncode
  2. te = TransactionEncoder()
  3. df_tf = te.fit_transform(item_list)
  4. df = pd.DataFrame(df_tf,columns=te.columns_)
复制代码

      
  • 盘算频繁项集
  1. from mlxtend.frequent_patterns import apriori
  2. # use_colnames=True表示使用元素名字,默认的False使用列名代表元素, 设置最小支持度min_support
  3. frequent_itemsets = apriori(df, min_support=0.05, use_colnames=True)
  4. frequent_itemsets.sort_values(by='support', ascending=False, inplace=True)
  5. # 选择2频繁项集
  6. print(frequent_itemsets[frequent_itemsets.itemsets.apply(lambda x: len(x)) == 2])  
复制代码

      
  • 盘算关联规则
  1. from mlxtend.frequent_patterns import association_rules
  2. # metric可以有很多的度量选项,返回的表列名都可以作为参数
  3. association_rule = association_rules(frequent_itemsets,metric='confidence',min_threshold=0.9)
  4. #关联规则可以提升度排序
  5. association_rule.sort_values(by='lift',ascending=False,inplace=True)    
  6. association_rule
  7. # 规则是:antecedents->consequents
复制代码

选择出来关联规则之后,根据提升度排序后,大概最高提升度的规则是在我们常识范围内,那这个规则的代价就不高。所以我们要在产生的规则中根据业务特点进行筛选,像开篇提到(啤酒->尿布)完全差别的品类之间的关联。
笔者最近用关联规则分析用户的体检陈诉记载,也得出了关于各个病症的有意义的关联,如并发症,差别病症相互影响等。

3. 总结


天职介绍关联规则的基本概念和经典算法Apriori,以及python的实现库mlxtend利用。
总结如下:
      
  • 关联规则用于分析数据集各项之间的关联关系,想一想啤酒和尿布的故事  
  • 三个紧张概念:支持度,置信度和提升度  
  • Apriori通过迭代先找1项集,用支持度过滤项集,渐渐找出所有k项集  
  • 用置信度或提升度来选择满足的要求的规则  
  • mlxtend对数据要求转换成bool值才可用
以上就是详解Python 关联规则分析的具体内容,更多关于Python 关联规则分析的资料请关注脚本之家其它相关文章!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作