cdnow网站用户行为数据分析

一、项目背景

本文是对CD案例的一个总结,主要是根据用户消费记录,分析用户消费行为,建立RFM模型,分析复购率、回购率等关键指标。希望对其他产品的线上消费数据分析有一定的借鉴价值。

二、分析目标

本次分析报告的数据来源于这家CD网站上的用户消费记录,旨在分析用户消费行为,建立RFM模型,分析复购率、回购率等关键指标。

三、分析过程

1、准备工作(数据集观察与数据清洗)
2、用户消费趋势分析(按月)——每月消费总金额、消费次数、产品购买量、消费人数、用户 平均消费金额、用户平均消费次数
3、用户个体消费分析——用户消费金额,产品购买量的描述性统计、用户消费金额和产品购买量分布、用户累计消费金额占比
4、用户消费行为分析——用户第一次消费(首购)时间分布、用户最后一次消费时间分布、用户分层RFM模型、用户购买周期、用户生命周期
5、用户复购率和回购率分析——复购率、回购率

1、准备工作(数据集观察与数据清洗)

(1)数据导入
数据集为txt文件格式,没有列名,并且字段之间使用多个空格进行分隔。

将数据集导入navicat中,并进行字段分列、命名、数据类型定义处理,处理后数据表预览如下:
cdnow网站用户行为数据分析_第1张图片

其中,字段解释如下:
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 月份

cdnow网站用户行为数据分析_第2张图片

由以上图表可知:
订单总金额在前三个月达到最高峰,后续消费较为稳定,有轻微下降趋势;
前三个月订单量最大,甚至有两个月订单量在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月。
cdnow网站用户行为数据分析_第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;

cdnow网站用户行为数据分析_第4张图片


从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;

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;

cdnow网站用户行为数据分析_第5张图片

由上图可知,前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个月因为有大量新用户涌入,而这批用户只购买了一次,所以导致复购率和回购率都比较低。

你可能感兴趣的:(数据分析)