使用Python mlxtend 实现购物篮分析

购物篮分析零售行业经常做的分析,最近也接到了这个需求,正好彻底研究一下。其实,也就是相关分析,挖掘下商品间的关联关系。

购物篮就是我们逛超市的时候,手里推的那个小车,手里提的那个篮子,从数据层面来看也就是每一笔订单就可以当成一个购物篮。购物篮分析要做的就是,用户在每一次消费时,喜欢买哪些商品,哪些商品会组合购买,如果买了商品A,用户还会买什么,就是发现商品与商品之间的联系。

最经典的例子就要数那个啤酒与尿布的故事了。

基本概念

在关联分析中,有些指标我们需要先理解下

支持度(Support)
其实就是出现的概率,在这里就是购买了某个商品的订单数占比

置信度(Confidence)
置信度已经涉及关联规则了,同时购买商品X、Y的订单数占购买商品X的订单数的比例,这里说明的就是,“如果购买了X,那么购买Y的概率是多少”

提升度(Lift)
我没有找到一个很好地定义方式,这个提升度主要是用来衡量X与Y的相关性的

  • 提升度 >1 且越高表明正相关性越高;
  • 提升度 <1 且越低表明负相关性越高;
  • 提升度 =1 表明没有相关性。

Lift(X->Y)=\frac {Confidence(X->Y)} {Support(Y)} = \frac {\frac {同时购买商品X、Y的订单数} {购买商品X的订单数}} {\frac {购买商品Y的订单数} {总订单数}}


我们来简单整理一下,我们要做相关分析,这里就是购物篮分析,通过支持度,我们可以知道哪些商品或者组合商品出现的概率比较高;当我们要思考商品连带性的时候,是买了X,会再去买Y,还是买了Y再去买X的概率更高,置信度就用上了;有了置信度还得看看提升度,看看他们之间的相关性到底强不强,有多强。

实现方式

要实现购物篮分析,其实有很多种方法,上面的几种考核指标都很清晰了,我们使用SQL也是可以统计的,只不过有点儿麻烦,需要手动做一个商品的组合,或者使用商品间笛卡尔积作为基础表,但是这还得看组合数量,如果只组合2种还好,组合3种、4种呢?
再就是使用Python或者R来做了,可以选择自己代码实现,也可以使用现有的开源包,我们只要用就行了,这里我也是直接使用了Python中的mlxtend拓展包。

数据处理

这里把数据处理单独拎出来说一下,做关联分析,需要注意下数据的选取,比如有些行业需要考虑场景,如早中晚这种,每种场景下用户购物偏好不一样,每种场景都有适合的商品组合;
再比如最近的打折促销的商品要剔除掉,因为要走量,所以可能很多订单都有这件商品,会影响我们的最后结论;
还有就是一些附赠品,试用品,新人优惠的商品,都是会影响我们结论的一些数据。

Python实现代码

好了,到了这里,来分享下代码,其实很简单,兜风装好了,直接调用就行了

# -*- coding: utf-8 -*-
"""
Created on Mon Aug 26 16:40:36 2019

@author: 橘猫吃不胖

购物篮分析实例
"""

import pandas as pd

# 引入订单数据
df = pd.read_csv('D:/tmall_basket_series.csv')

# 转换成指定的格式
basket = (df.groupby(['ORDER_NO', 'PROD_NAME'])['ORDER_NO']
          .count().unstack()
          .fillna(0))

def encode_units(x):
    if x <= 0:
        return 0
    if x >= 1:
        return 1

# 将数据填充为0、1的格式
basket_sets = basket.applymap(encode_units)   

from mlxtend.frequent_patterns import apriori

# 生成频繁项目集,指定最小支持度为0.5
frequent_itemsets=apriori(basket_sets, min_support=0.5, use_colnames=True)
frequent_itemsets.to_csv('D:/tmall_basket_series_support.csv')


from mlxtend.frequent_patterns import association_rules
# 生成关联规则,最小置信度为0.01
rules=association_rules(frequent_itemsets, metric="confidence", min_threshold=0.01)
rules.to_csv('D:/tmall_basket_series_bi.csv')

这里核心的都是调用mlxtend来实现的,我们要做的就是对数据进行处理。

好了,这一篇先到这,后面会整理下关于mlxtend的使用。

你可能感兴趣的:(使用Python mlxtend 实现购物篮分析)