赞
踩
通过分析商品的关联规则,将商品绑定一起,来提高商品的销售几率。
用于发现大量数据中,各组数据之间的联系。
关联分析主要是三度概念——支持度(support),置信度(support),提升度(lift):
要使用Apriori算法,我们需要提供两个参数,数据集和最小支持度。我们从前面已经知道了Apriori会遍历所有的物品组合,怎么遍历呢?答案就是递归。先遍历1个物品组合的情况,剔除掉支持度低于最小支持度的数据项,然后用剩下的物品进行组合。遍历2个物品组合的情况,再剔除不满足条件的组合。不断递归下去,直到不再有物品可以组合。
Python实战
1. 用到的库是mlxtend,及参数介绍
def apriori(df, min_support=0.5,
use_colnames=False,
max_len=None)
参数如下:
df:这个不用说,就是我们的数据集。
min_support:给定的最小支持度。
use_colnames:默认False,则返回的物品组合用编号显示,为True的话直接显示物品名称。
max_len:最大物品组合数,默认是None,不做限制。如果只需要计算两个物品组合的话,便将这个值设置为2。
2.使用Apriori算法找到频繁项集
import pandas as pd from mlxtend.preprocessing import TransactionEncoder from mlxtend.frequent_patterns import apriori #设置数据集 dataset = [['牛奶','洋葱','肉豆蔻','芸豆','鸡蛋','酸奶'], ['莳萝','洋葱','肉豆蔻','芸豆','鸡蛋','酸奶'], ['牛奶','苹果','芸豆','鸡蛋'], ['牛奶','独角兽','玉米','芸豆','酸奶'], ['玉米','洋葱','洋葱','芸豆','冰淇淋','鸡蛋']] te = TransactionEncoder() #进行 one-hot 编码 te_ary = te.fit(records).transform(records) df = pd.DataFrame(te_ary, columns=te.columns_) #利用 Apriori 找出频繁项集 freq = apriori(df, min_support=0.05, use_colnames=True)
首先,需要先将商品进行one-hot编码,编码后用boolean值表示。所谓ont-hot编码呢,直观来说就是有多少个状态就有多少比特,而且只有一个比特为1,其他全为0的一种码制。比如冰淇淋只存在最后一共交易单中,其他交易中都没出现。那冰淇淋就可以用[0,0,0,0,1]来表示。
编码后的数据如下:
冰淇淋 洋葱 牛奶 独角兽 玉米 肉豆蔻 芸豆 苹果 莳萝 酸奶 鸡蛋
0 False True True False False True True False False True True
1 False True False False False True True False True True True
2 False False True False False False True True False False True
3 False False True True True False True False False True False
4 True True False False True False True False False False True
若设定的最小支持度为0.6,那么只有支持度大于0.6的项集才能成为频繁项集,如下:
support itemsets
0 0.6 (洋葱)
1 0.6 (牛奶)
2 1.0 (芸豆)
3 0.6 (酸奶)
4 0.8 (鸡蛋)
5 0.6 (芸豆, 洋葱)
6 0.6 (洋葱, 鸡蛋)
7 0.6 (牛奶, 芸豆)
8 0.6 (酸奶, 芸豆)
9 0.8 (芸豆, 鸡蛋)
10 0.6 (芸豆, 洋葱, 鸡蛋)
3.在利用Apriori得到频繁项集后如何得到关联规则
关联规则即置信度和提升度
使用mlxtend库,我们可以计算得到关联规则:
association_rules(df, metric="confidence",
min_threshold=0.8,
support_only=False):
参数介绍:
- df:这个不用说,就是 Apriori 计算后的频繁项集。
- metric:可选值['support','confidence','lift','leverage','conviction']。
里面比较常用的就是置信度和支持度。这个参数和下面的min_threshold参数配合使用。
- min_threshold:参数类型是浮点型,根据 metric 不同可选值有不同的范围,
metric = 'support' => 取值范围 [0,1]
metric = 'confidence' => 取值范围 [0,1]
metric = 'lift' => 取值范围 [0, inf]
support_only:默认是 False。仅计算有支持度的项集,若缺失支持度则用 NaNs 填充。
整个流程的完整代码:
import pandas as pd from mlxtend.preprocessing import TransactionEncoder from mlxtend.frequent_patterns import apriori #设置数据集 dataset = [['牛奶','洋葱','肉豆蔻','芸豆','鸡蛋','酸奶'], ['莳萝','洋葱','肉豆蔻','芸豆','鸡蛋','酸奶'], ['牛奶','苹果','芸豆','鸡蛋'], ['牛奶','独角兽','玉米','芸豆','酸奶'], ['玉米','洋葱','洋葱','芸豆','冰淇淋','鸡蛋']] te = TransactionEncoder() #进行 one-hot 编码 te_ary = te.fit(records).transform(records) df = pd.DataFrame(te_ary, columns=te.columns_) #利用 Apriori 找出频繁项集 freq = apriori(df, min_support=0.05, use_colnames=True) #导入关联规则包 from mlxtend.frequent_patterns import association_rules #计算关联规则 result = association_rules(freq, metric="confidence", min_threshold=0.6)
参考了以下文章:
原文链接:
https://blog.csdn.net/h_jlwg6688/article/details/107793274
https://blog.csdn.net/weixin_53823523/article/details/119845775
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。