一、项目背景
本文是对CD案例的一个总结,主要是根据用户消费记录,分析用户消费行为,建立RFM模型,分析复购率、回购率等关键指标。希望对其他产品的线上消费数据分析有一定的借鉴价值。
二、分析目标
本次分析报告的数据来源于这家CD网站上的用户消费记录,旨在分析用户消费行为,建立RFM模型,分析复购率、回购率等关键指标。
三、分析过程
1、准备工作(数据集观察与数据清洗)
2、用户消费趋势分析(按月)——每月消费总金额、消费次数、产品购买量、消费人数、用户 平均消费金额、用户平均消费次数
3、用户个体消费分析——用户消费金额,产品购买量的描述性统计、用户消费金额和产品购买量分布、用户累计消费金额占比
4、用户消费行为分析——用户第一次消费(首购)时间分布、用户最后一次消费时间分布、用户分层RFM模型、用户购买周期、用户生命周期
5、用户复购率和回购率分析——复购率、回购率
1、准备工作(数据集观察与数据清洗)
(1)数据导入
数据集为txt文件格式,没有列名,并且字段之间使用多个空格进行分隔。
将数据集导入navicat中,并进行字段分列、命名、数据类型定义处理,处理后数据表预览如下:
其中,字段解释如下:
user_id 用户id
order_dt 订单购买日期
order_products 订单购买商品数
order_amount 订单购买金额
(2)数据清洗
数据缺省值处理:
SELECT * FROM cdnow
WHERE order_dt is null
or user_id is null
OR order_products is null
OR order_amount is null;
查询结果为无,因此本数据集中无缺省值。
数据重复值处理:
因为本数据集中购买日期无具体时间,所以无法排除某个用户在同一天发生多次相同的购买行为,所以无需去重。
2、用户消费趋势分析(按月)
(1)每月的订单总金额、订单数、订单用户数
SELECT
date_format(order_dt,'%Y-%m') as 月份,
sum(order_amount) as 订单总金额,
count(*) as 订单数,
count(distinct user_id) as 订单用户数,
sum(order_amount)/count(distinct user_id) as 每月用户平均购买金额,
count(*)/count(distinct user_id) as 每月用户平均购买次数
FROM cdnow
GROUP BY 月份
order by 月份
由以上图表可知:
订单总金额在前三个月达到最高峰,后续消费较为稳定,有轻微下降趋势;
前三个月订单量最大,甚至有两个月订单量在10000以上,后续月份的订单量较为稳定,维持在2000~3000这个范围内;
前三个月每月的订单用户数在8000到10000之间,后续月份的用户数较为稳定,维持在1500~2500这个范围内。
(2)每月用户平均消费金额、平均消费次数
由上图可知:
每月用户平均消费金额都在38元以上,1997年1月份最低,1998年11月份最高为56.66元,此外还存在着较大的波动。
每月用户平均消费次数都在1次以上,1997年1月份最低,1998年10月份最高为1.39次。
3、用户个体消费分析
(1)用户消费金额、订单量的描述性统计
#用户产品购买量的描述性统计
SELECT
min(用户总购买量),
avg(用户总购买量),
(SELECT sum(order_products) 用户总购买量 FROM cdnow GROUP BY user_id order by 用户总购买量 limit 11785,1) as '50%(用户购买量)',
max(用户总购买量),
round(stddev(用户总购买量),2) 'std(用户总购买量)'
FROM (SELECT sum(order_products) 用户总购买量 FROM cdnow GROUP BY user_id) a;
#用户购买金额的描述性统计
SELECT
min(用户总购买金额),
avg(用户总购买金额),
(SELECT sum(order_amount) 用户总购买金额 FROM cdnow GROUP BY user_id order by 用户总购买金额 limit 11785,1) as '50%(用户总购买金额)',
max(用户总购买金额),
round(stddev(用户总购买金额),2) 'std(用户总购买金额)'
FROM (SELECT sum(order_amount) 用户总购买金额 FROM cdnow GROUP BY user_id) a;
由上图可知:
用户平均购买了7张CD,但是中位值只有3张,说明小部分用户购买了大量的CD。
用户平均消费106元,中位值只有43元,说明小部分用户购买金额较大。
(2)用户消费金额和产品购买量的分布
SELECT
user_id,
累计购买金额/(SELECT sum(order_amount) FROM cdnow) 累计购买金额百分比,
累计人数/(SELECT count(distinct user_id) FROM cdnow) 累计人数占比
FROM(
SELECT
*,
sum(用户总购买金额) over(ORDER BY 用户总购买金额 rows BETWEEN unbounded preceding and current row) 累计购买金额,
count(user_id) over(rows BETWEEN unbounded preceding and current row) 累计人数
FROM(
SELECT
user_id,
sum(order_amount) 用户总购买金额
FROM cdnow
GROUP BY user_id) a)b
由上图可知:
用户消费金额集中在0~100元,大约有17000名用户;
用户购买量集中在1~5张,大约有19000名用户购买CD数量为1到5张。
这里需要注意的是:
通常使用切比雪夫定理过滤掉异常值,因为切比雪夫定理说明,所有数据中至少有96%的数据位于平均数5个标准差之内,剩下4%的极值就过滤掉。
这里以order_products作为过滤条件,mean+5std=7.12+5*16.98=92.02,近似选择100作为阈值。
(3)用户累计消费金额占比
由上图可知,横坐标表示累计用户数量(总共有23570名用户),纵坐标表示累计消费金额占比。其中20%的用户贡献了68%的消费金额。
4、用户消费行为分析
(1)用户第一次消费(首购)时间分布
SELECT * FROM cdnow;
drop table first_dt;
create table first_dt as
SELECT
user_id,
首购时间,
count(*) 人数
FROM (
SELECT
user_id,
order_dt 首购时间
FROM(
SELECT
*,
row_number() over(PARTITION by user_id order by order_dt asc) rk1
FROM cdnow) a
WHERE rk1=1) b
GROUP BY 首购时间;
由上图可知,用户首购时间集中在1997年1~3月。
由上图可知:
在1997年3月时,出现断崖式的下跌,一开始用户数量增长迅猛,流失的也比较多,后面则没有出现用户严重流失的情况。
用户最后一次购买的时间分布比第一次购买的时间分布广。
大部分首购时间和最后一次购买的时间集中在1997年前3个月,说明很多用户购买了一次后就不再进行购买。
随着时间的递增,最后一次购买的用户数量也在递增,消费呈现流失上升的状况。这种状况出现的原因有可能是用户运营没跟上,或者用户忠诚度下降了。
(3)用户分层
-- 按照数值进行判断
#统计RFM值
DROP table user_rfm2;
create table user_rfm2 as
SELECT aa.user_id,r,f,m FROM
(SELECT *,datediff('19980630',last_dt) r FROM first_last_dt) aa
LEFT JOIN
(SELECT user_id,count(*) f FROM cdnow GROUP BY user_id) bb
ON aa.user_id=bb.user_id
LEFT JOIN
(SELECT user_id, sum(order_amount) m FROM cdnow GROUP BY user_id) cc
ON aa.user_id=cc.user_id;
#根据RFM值对用户进行分层
SELECT
*,
case
WHEN label=111 THEN '重要价值客户'
WHEN label=011 THEN '重要保持客户'
WHEN label=101 THEN '重要发展客户'
WHEN label=001 THEN '重要挽留客户'
WHEN label=110 THEN '一般价值客户'
WHEN label=010 THEN '一般保持客户'
WHEN label=100 THEN '一般发展客户'
WHEN label=000 THEN '一般挽留客户'
end 客户分层
FROM(
SELECT
label,
count(*) 人数,
count(*)/(SELECT count(*) FROM user_rfm2) 占比
FROM(
SELECT
user_id,
concat(rr,ff,mm) label
FROM(
SELECT
*,
case when r<=(SELECT avg(r) FROM user_rfm2) then 1 else 0 end rr,
case when f>=(SELECT avg(f) FROM user_rfm2) then 1 else 0 end ff,
case when m>=(SELECT avg(m) FROM user_rfm2) then 1 else 0 end mm
FROM user_rfm2) a) b
GROUP BY label) c;
从RFM模型可知,一般挽留客户的人数最多,其次是重要价值客户。
(4)用户购买周期(按订单)
A.用户购买周期描述性统计
-- 用户生命周期
SELECT *
FROM
(SELECT
min(user_life),
avg(user_life),
max(user_life),
round(stddev(user_life),2)
FROM(
SELECT
*,
datediff(last_dt,first_dt) user_life
FROM first_last_dt) a ) aa
inner JOIN
(
SELECT
user_life 生命周期中位数
FROM(
SELECT
*,
datediff(last_dt,first_dt) user_life
FROM first_last_dt) a
ORDER BY user_life
limit 11785,1) b;
由上表可知,用户平均购买周期为135天,最小值为0天,最大值为544天。
-- 用户生命周期(剔除一天的数据)
SELECT *
FROM
(SELECT
min(user_life),
avg(user_life),
max(user_life),
round(stddev(user_life),2)
FROM(
SELECT
*,
datediff(last_dt,first_dt) user_life
FROM first_last_dt) a
WHERE user_life>0) aa
inner JOIN
(
SELECT
user_life 生命周期中位数
FROM(
SELECT
*,
datediff(last_dt,first_dt)
user_life
FROM first_last_dt) a
WHERE user_life>0
ORDER BY user_life
limit 5758,1) b;
这里,首先将生命周期为一天的先排除,这部分用户占了将近一半。
用户平均生命周期为276天,中位值为302天。其中周期在0~50天的用户数最多,其次是450到500天的用户数。
(5)复购率和回购率分析
A.复购率
-- 复购率
create TABLE user_fg as
SELECT
dt,
count(DISTINCT user_id),
count(case when a.count_ord>1 then user_id else null end) 复购人数,
count(case when a.count_ord>1 then user_id else null end)/count(DISTINCT user_id) 复购率
FROM(
SELECT
*,
date_format(order_dt,'%Y%m') dt,
count(*) count_ord
FROM cdnow
GROUP BY dt,user_id) a
GROUP BY dt;
由上图可知,前3个月因为有大量新用户涌入,而这批用户只购买了一次,所以导致复购率较低,后续月份的复购率则稳定在20%左右。
B.回购率
-- 次月回购率
create table user_hg as
SELECT
bb.*,
aa.`次月回购人数`,
aa.`次月回购人数`/bb.`当月购买人数` 回购率
FROM(
SELECT a.dt,count(distinct a.user_id) 次月回购人数 FROM(
SELECT
user_id,
date_format(order_dt,'%Y%m') dt
FROM cdnow) a
LEFT JOIN(
SELECT user_id,DATE_FORMAT(adddate(order_dt,interval 1 month),'%Y%m') dt FROM cdnow) b
ON a.user_id=b.user_id WHERE a.dt=b.dt
GROUP BY a.dt
ORDER BY a.dt) aa
LEFT JOIN (
SELECT date_format(order_dt,'%Y%m') dt,count(distinct user_id) 当月购买人数
FROM cdnow GROUP BY dt ORDER BY dt) bb
ON aa.dt=bb.dt;
由上图可知,前3个月因为有大量新用户涌入,而这批用户只购买了一次,所以导致回购率波动较大,后续月份的复购率则稳定在30%左右。
四、总结和建议
1、用户消费趋势(每月)方面,前3个月有大量新用户涌入,消费金额、消费订单数、产品购买量均达到一个高峰,后续每月较为稳定。
前3个月消费次数都在10000笔左右,后续月份的平均2500;前3个月产品购买量达到20000甚至以上,后续月份平均7000;前3个月消费人数在8000-10000之间,后续月份平均2000不到。
2、用户个体消费方面,小部分用户购买了大量的CD,拉高了平均消费金额。其中20%的用户贡献了68%的消费金额,大致符合二八法则。
3、用户消费行为方面,大部分首购时间和最后一次购买的时间集中在1997年前3个月,说明很多用户购买了一次后就不再进行购买。随着时间的递增,最后一次购买的用户数量也在递增,消费呈现流失上升的状况。
4、从RFM模型来看,在8种客户中,一般挽留客户的人数最多,其次是重要价值客户。
5、从用户购买周期方面,用户平均购买周期为135天,最小值为0天,最大值为545天。
6、从用户购买周期方面,由于生命周期为一天的用户占了将近一半,因此将这部分数据排除后,用户平均生命周期为276天,中位值为302天。其中周期在0~50天的用户数最多,其次是450到500天的用户数。
7、复购率和回购率方面,复购率稳定在20%左右,回购率稳定在30%左右,前3个月因为有大量新用户涌入,而这批用户只购买了一次,所以导致复购率和回购率都比较低。