本文以真实案例,带领大家一起学习如何搭建电商零售的用户画像。
"项目介绍"
此次项目数据来自Kaggle,包含了2010年12月1日至2011年12月9日在英国注册的非实体网上零售发生的所有交易。
字段如下:
-
Invoice: 订单编号,每笔交易有6个整数。
-
StockCode: 产品编号,由5个整数组成。
-
Description: 产品描述。
-
Quantity: 产品数量,有负号的表示退货。
-
InvoiceDate: 订单日期和时间。
-
Price: 单价(英镑),单位产品的价格
-
Customer ID:客户编号,每个客户编号由5位数字组成。
-
Country:国家的名称,每个客户所在国家/地区的名称。
"RFM模型介绍"
RFM模型是一种用户分类模型,通过对比分析不同用户群体在时间、地区等维度下的交易量、交易金额指标,并根据分析结果提出优化建议。
-
R(Recency):最近一次消费时间(最近一次消费到参考时间的长度)
-
F(Frequency):消费的频次(单位时间内消费了多少次)
-
M(Money):消费的金额(单位时间内总消费金额)
下面是项目实战的代码实现过程:
01 导入库
本例所需的库包括pandas、numpy、matplotlib、seaborn、datetime、os六个模块。
-
Pandas:Pandas有两种结构,分别是Series和DataFrame。其中Series拥有Numpy的所有功能,可以认为是简单的一维数组;而DataFrame是将多个Series按列合并而成的二维数据结构,每一列单独取出来是一个Series。
-
Numpy:Numpy是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
-
Matplotlib:Matplotlib用于在 Python 中创建静态、动画和互动的可视化
-
Seaborn:Seaborn是一种开源的数据可视化工具,它在Matplotlib的基础上进行了更高级的API封装,因此可以进行更复杂的图形设计和输出。Seaborn是Matplotlib的重要补充,可以自主设置在Matplotlib中被默认的各种参数,而且它能高度兼容Numpy与Pandas数据结构以及Scipy与statsmodels等统计模式。
-
Datetime:datetime是Python处理日期和时间的标准库。
-
os:os.chdir() 方法用于改变当前工作目录到指定的路径。
02 数据准备
此处使用Pandas的read_excel方法读取数据文件,并使用info函数查看数据类型。
03 数据预处理
- (1)缺失值处理
利用lambda函数对缺失值进行统计。
结果如下图:
可以发现Description和Customer ID字段存在缺失值。Description字段对本项目分析意义不大,可以直接删除;对Customer ID字段的缺失部分进行填充,用'U'表示缺失。
- (2)日期处理
提取日期、时间、年、月、日。
结果如下图:
- (3)重复值处理
使用drop_duplicates函数对重复值进行删除。
- (4)异常值处理
使用describe函数对数据进行探索性分析。
可以发现对Price(单价)列有负数,因此需要对Price列的异常值进行处理。
首先计算异常值比例:
查看具体的异常值:
共2512条异常记录,其中单价为负数有2条,单价为0有2510条,单价为0可能是促销产品,因此我们只对负数进行剔除:
为了后续分析,需要增加amount列:
结果如下图:
04 数据分析
- (1)退货率计算
利用数据透视表计算退货金额。
结果如下图:
再利用数据透视表计算成功交易订单总金额。
结果如下图:
最后计算退货率:
绘制2011年各月份退货率折线图:
结果如下图:
- (2)RFM模型分析
计算R、F、M三个指标的值。
对R进行探索性分析:
可以发现客户最近一次消费到参考时间的最大时间间隔为373天,平均时间间隔92天。
绘制柱状图如下:
结果如下图:
对F进行探索性分析:
绘制柱状图如下:
M指标的柱状图如下:
客户等级划分
结果如下图:
绘制柱状图:
绘制饼图:
05 结论和建议
(1)针对退货订单,2011年1月与12月退货率存在异常,我们需要了解是外部因素还是内部因素所导致的,从产品、渠道、价格、促销四个方面来分析具体的原因加以改进。
(2)根据用户分层得到八类客户,针对不同的客户需要采取不同的营销手段。根据数据可知,客户最多的类别是重要价值客户和重要发展客户,这类客户是为公司创造价值的主力军。对于重要发展客户,由于最近消费频次较少,建议公司获取相关信息来挽回客户;对于一般挽留客户和一般发展客户,获取用户的详细数据分析用户画像,了解客户的消费需求,进行精准的营销,即时推送产品信息;对于重要保持客户和重要挽留客户,以赠送优惠券或推送折扣等活动来增加客户活跃度。