之前写过购物相关的内容,这其中有几个指标,像支持度、置信度、提升度都要理解一下,详情参考:
这一篇也是正好要用到,就来回顾下
背景:
我想看看各品类之间的关联性,有没有出镜率比较高的组合品类
1. 原始数据处理
首先处理我们的订单数据,这里可以直接使用订单明细数据,因为我这里是品类,所以不需要到商品明细,我就做了个聚合,当然,不处理,直接在python中做个聚合也是一样的
数据格式如下:

我这里保留了:订单号、品类名、销量
这个销量在这里其实用不到,后面会转化掉的
2.将数据引入,转化为固定的格式
这里的固定格式,就是mlxtend中需要的格式,因为我们要使用它的包,所以按照约定来就行了。
固定格式是这样的,每个订单一行,然后将品类拆分到column
df2 = df.pivot(index='ORDER_NO' , columns="GOODS_CATEGORY_NAME" , values='PCS')
df2.head()

就是上图这个样子,这里还可以看看每个品类之间的相关性
哦,这里的NaN需要填充0
df2.fillna(0,inplace=True)

pandas里看相关系数,非常简单
df2.corr()

这就是两两品类之间的相关系数,
这里,再用数据热力图展示下
sns.heatmap(df2.corr() , cmap='Reds')

好像没啥特别的
3. 将每个元素的值,处理为0、1
当前我的单元格中是销量,这里需要统一转换为0、1也就是表示该品类是否在该订单中出现,只要标识是否出现即可,并不需要销量这种额外的东西
def encode_units(x):
if x <= 0:
return 0
if x >= 1:
return 1
df3 = df2.applymap(encode_units)

调用mlxtend
from mlxtend.frequent_patterns import apriori
frequent_itemsets=apriori(df3, min_support=0.01, use_colnames=True)
关于这个apriori
,可以参考官方手册:Frequent Itemsets via Apriori Algorithm
这里传入了了一个参数,最小支持度
返回的结果集,就是一个DataFrame

从数据来看哈,我这里的品类之间的关联性很小
支持度最高的组合是面部护肤和面膜,这是不是说明,用户更倾向于购买单品类商品呢?

支持度是出现的一个概率,我们还要看看置信度
from mlxtend.frequent_patterns import association_rules
rules=association_rules(frequent_itemsets, metric="confidence", min_threshold=0.01)
rules.sort_values(by='confidence' , ascending=False)

这里生成的是关联规则
- antecedents 前置变量
- consequents 结果
比如这里第一条记录,购买了防晒隔离,且购买了面部护肤的各种指标
防晒隔离的支持度、面部护肤的支持度,组合的支持度,置信度,提升度,都在这里了
我这里最高的置信度也就17%,提升度都是<1的,貌似没有啥关联性,哈哈哈
网友评论