商品分析-品类篇-购物篮分析

之前写过购物相关的内容,这其中有几个指标,像支持度、置信度、提升度都要理解一下,详情参考:

  • 使用Python mlxtend 实现购物篮分析

这一篇也是正好要用到,就来回顾下


背景:
我想看看各品类之间的关联性,有没有出镜率比较高的组合品类

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的,貌似没有啥关联性,哈哈哈

你可能感兴趣的:(商品分析-品类篇-购物篮分析)