ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python-关联规则

2022-04-07 11:31:47  阅读:178  来源: 互联网

标签:python 项集 频繁 df Beer 规则 关联


目录

1. 什么是关联规则

关联规则,从大量数据中发现事物、特征或者数据之间的,频繁出现的相互依赖关系和关联关系。

X—>Y,XY的关联规则,包括支持度support、信任度confidence和提升度lift。

关联规则最早是为购物篮分析问题所提出,如著名的啤酒与尿布的故事。

2. 关联规则有什么用

发现项集之间的关联和相关关系,通过对数据集进行关联分析可得出形如“由于某些事件的发生而引起另外一些事件的发生”之类的规则。关联分析对商业决策具有重要的价值,如基于用户购买习惯,制定相关推荐产品、套装商品或捆绑商品的销售策略,达到平台整体销量提升

3. 如何运用关联规则

3.1 基本概念

假设某个时间段内存在以下4次交易行为,购买商品如下:

TID Items
001 Cola, Egg, Ham
002 Cola, Diaper, Beer
003 Cola, Diaper, Beer, Ham
004 Diaper, Beer

关联规则中涉及到的基本概念:

名称 说明
事务 每一个交易数据称为一个事务。如上表包含了4个事务
交易的每个商品称为项。如Cola, Beer等
项集 交易商品组成的集合,如{Cola}, {Cola Egg}
K-项集 包含K个商品的集合叫做 K-项集。如{Cola, Beer, Ham}:3-项集
支持度计数 一个商品集合出现在N个交易中,则该商品集合的支持度计数为N。如{Diaper, Beer}出现在交易 002、 003、 004中,其支持度计数为3
支持度 支持度计数 / 总事务数。如 {Diaper, Beer} 支持度为 3/4 = 75%。这说明75%的人同时买了 Diaper 和 Beer。
频繁项集 支持度大于或等于某个阈值的项集就叫做频繁项集。如 阈值设50%时,因为{Diaper, Beer}的支持度是75%,所以它是频繁项集。
置信度 对于{A}->{B},它的置信度为 {A, B}的支持度计数 除以 {A} 的支持度计数。如,规则{Diaper}->{Beer}的置信度为 3/3,即100%,说明买了Diaper的人 100% 也买了 Beer。
强关联规则 大于或等于最小支持度阈值 和 最小置信度阈值 的规则叫做强关联规则。关联分析的最终目标就是要找出强关联规则。

3.2 频繁项集评估标准

频繁项集,顾名思义指频繁出现item项的集合。

如何定义频繁呢?用比例来判定,常用的频繁项集的评估标准有支持度,置信度和提升度三个。

  • 支持度:出现的项集在总事务中的占比。以购买记录为例子,购买记录4条,如果商品Cola和Beer同时出现2条购买记录(即同时购买Cola和Beer的记录有2),那边Cola和Beer这个2项集的支持度为50%。

  • 置信度:购买Cola的情况下,再购买Beer的概率。

  • 提升度:使用规则后商品出现的次数是否高于商品单独出现的概率。

提升度体先了X和Y之间的关联关系, 提升度大于1则X->Y是有效的强关联规则, 提升度小于等于1则X->Y是无效的强关联规则 。一个特殊的情况,如果X和Y独立,则有Lift(X⇐Y)=1,因为此时P(X|Y)=P(X)。

3.3 Aprior算法思想

Apriori算法的目标是找到最大的K项频繁集,一是满足最小支持度的频繁集,二是找到频繁集的最大个数。

Apriori算法采用了迭代的方法:

  • 先搜索出候选1项集及对应的支持度,剪枝去掉低于支持度的1项集,得到频繁1项集。

  • 然后对剩下的频繁1项集进行连接,得到候选的频繁2项集,筛选去掉低于支持度的候选频繁2项集,得到真正的频繁二项集。

  • 以此类推,迭代下去,直到无法找到频繁k+1项集为止,对应的频繁k项集的集合即为算法的输出结果。

图中有4个记录,记录项有1,2,3,4,5若干

  • 首先先找出1项集对应的支持度(C1),可以看出4的支持度25%低于最小支持阈值50%,先剪掉,得到(L1)。

  • 从1项集生成2项集,并计算支持度(C2),可以看出(1,5)(1,2)支持度均为25%低于最小支持阈值,先剪掉,得到(L2)

  • 从2项集生成3项集,(1,2,3)(1,2,5)(2,3,5)只有(2,3,5)满足要求,至此无法生成新的频繁项集,算法结束,最终得到3-项频繁集。

由于Apriori算法在每次计算项集的支持度时需要扫描所有数据集,当数据量较大,数据种类较多时,算法的效率是很低的。

4. Apriori算法应用

基于Sebastian Raschka 提供的非常有用的具有Apriori算法的MLxtend库。

import pandas as pd
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules
from mlxtend.preprocessing import TransactionEncoder

df=pd.read_excel(r'C:\Users\Desktop\My_Python\Online Retail.xlsx')
df.head()

####-------------------------------------------
#### 数据清洗
####-------------------------------------------

df['Description'] = df['Description'].str.strip()
df.dropna(axis=0, subset=['InvoiceNo'], inplace=True)
df['InvoiceNo'] = df['InvoiceNo'].astype('str')
df = df[~df['InvoiceNo'].str.contains('C')]
df = df[~(df['Description']=='POSTAGE')]

####-------------------------------------------
#### 对数据进行One-Hot编码
####-------------------------------------------

# 选取France样本数据
basket = pd.DataFrame(df[df['Country'] =="France"].groupby(['InvoiceNo', 'Description'])['Quantity'].sum().reset_index()
                      , columns = ['InvoiceNo', 'Description', 'Quantity'])
df_grouped=basket.groupby('InvoiceNo')['Description'].unique().apply(list).reset_index().set_index(['InvoiceNo'])
# df_grouped

# 将数据格式转换成One-Hot编码要求格式 a list of lists
basket_list = [df_grouped['Description'][i] for i in range(len(df_grouped['Description']))]

te = TransactionEncoder()
df_tf = te.fit_transform(basket_list)
basket_sets_encoder = pd.DataFrame(df_tf,columns=te.columns_)

# 筛选满足大于或等于最小支持度0.07的频繁项集

frequent_itemsets = apriori(basket_sets_encoder, min_support=0.07, use_colnames=True)

frequent_itemsets.sort_values(by='support', ascending=False, inplace=True)
frequent_itemsets

# 选择2项频繁项集

frequent_itemsets['length'] = frequent_itemsets.itemsets.apply(lambda x: len(x))
frequent_itemsets[frequent_itemsets['length'] == 2]


# 计算关联规则

# metric可以有很多的度量选项,返回的表列名都可以作为参数
association_rule = association_rules(frequent_itemsets,metric='confidence',min_threshold=0.5)
 
#关联规则可以提升度排序
association_rule.sort_values(by='lift',ascending=False,inplace=True)    
association_rule
# 规则是:antecedents->consequents

参考来源:

Apriori算法原理总结

【转载】Python 关联规则分析

利用Python进行市场购物篮分析——入门篇

标签:python,项集,频繁,df,Beer,规则,关联
来源: https://www.cnblogs.com/wxyz94/p/16106381.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有