MySQL淘宝用户行为分析

一、数据来源及说明

数据来源于: https://tianchi.aliyun.com/dataset/dataDetail?dataId=46&userId=1

二、分析维度

根据现有数据及分析目的,从四个维度进行分析:

第一个维度:用户购物情况整体分析

以PV、UV、平均访问量、跳失率等指标,分析用户最活跃的日期及活跃时段,了解用户行为习惯

第二个维度:商品购买情况分析

从成交量、人均购买次数、复购率等指标,探索用户对商品的购买偏好,了解商品的销售规律

第三个维度:用户行为转化漏斗分析

从收藏转化率、购物车转化率、成交转化率,对用户行为从浏览到购买进行漏斗分析

第四个维度:参照RFM模型

对用户进行分类,找出有价值的用户

三、分析正文

分析步骤如下:

提出问题------理解数据------数据清洗------构建模型------数据可视化

(一)提出问题

用户最活跃的日期及时段
用户对商品有哪些购买偏好
用户行为间的转化情况
用户分类,哪些是有价值的用户

(二)理解数据

本文从数据集中选取包含了2014年11月18日至2014年12月18日之间,10000名随机用户共12244074条行为数据,数据集的每一行表示一条用户行为,共6列。

列字段包含以下:

user_id:用户身份

item_id:商品ID

behavior_type:用户行为类型(包含点击、收藏、加购物车、购买四种行为,分别用数字1、2、3、4表示)

user_geohash:地理位置(有空值)

item_category:品类ID(商品所属的品类)

time:用户行为发生的时间

(三)数据清洗

1、导数

通过Navicat导入csv文件,数据库的表名为user。
MySQL淘宝用户行为分析_第1张图片
2、缺失值处理

user_geohash 列表示地理位置信息,由于数据存在大量空值,且位置信息被加密处理,难以研究,因此后续不对user_geohash 列进行分析。

3、数据一致化处理

由于 time 字段的时间包含(年-月-日)和小时,为了方便分析,将该字段分成 2 个字段,一个日期列(date)和一个小时列(time)。

//select * from user;
alter table user change time date varchar(255);
alter table user add time varchar(20);
update user set time = date;
update user set date=replace(date,date,SUBSTRING_INDEX(date,' ',1));
update user set time=replace(time,time,substring_index(time,' ',-1));

MySQL淘宝用户行为分析_第2张图片
由于 behavior_type 列的四种行为类型分别用 1,2,3,4 表示点击、收藏、加购物车、购买四种行为,为了方便查看数据,将1,2,3,4替换为 ‘pv’、’fav‘,’cart’,‘buy’ 。

alter table user modify behavior_type varchar(20);
#将behavior_type列数据替换
update user set behavior_type=replace(behavior_type,1,'pv');
update user set behavior_type=replace(behavior_type,2,'fav');
update user set behavior_type=replace(behavior_type,3,'cart');
update user set behavior_type=replace(behavior_type,4,'buy');
select * from user;

MySQL淘宝用户行为分析_第3张图片
通过查询表结构,可以看到 date 列不是日期类型:

desc user;

MySQL淘宝用户行为分析_第4张图片
将date 列改成 date 类型:

alter table user MODIFY date date;
desc user;

MySQL淘宝用户行为分析_第5张图片

四、构建模型和分析问题

1、用户购物情况整体分析

(1)pv(总访问量)

select count(behavior_type) as 总访问量
from user
where behavior_typr='pv';

在这里插入图片描述

(2)uv(用户总数)

select count(distinct user_id) as 用户总数 from user;

在这里插入图片描述

(3)平均访问量

11550581/10000=1151.1

(4)跳失率计算:

跳失率:只有点击行为的用户/总用户数

select count(DISTINCT user_id) from user
where user_id not in 
(select DISTINCT user_id from user where behavior_type='fav')
and user_id not in
(select DISTINCT user_id from user where behavior_type='cart')
and user_id not in 
(SELECT DISTINCT user_id from user where behavior_type='buy')

(5)日均访问量

select date,count(behavior_type) as 日均访问量 from user
where behavior_type='pv'
GROUP BY date
ORDER BY date;

MySQL淘宝用户行为分析_第6张图片

2、商品购物情况分析

(1)成交量

select date,count(behavior_type) as 成交量 from user
where behavior_type='buy'
GROUP BY date;

MySQL淘宝用户行为分析_第7张图片

(2)有购买行为的用户数量

select count(distinct user_id) as 购买用户数 from user
where behavior_type='buy';

在这里插入图片描述

(3)用户的购物情况

create view user_behavior as 
select user_id,count(behavior_type),
sum(case when behavior_type='pv' then 1 else 0 end) as 点击次数,
sum(case when behavior_type='fav' then 1 else 0 end) as 收藏次数,
sum(case when behavior_type='cart' then 1 else 0 end) as 加购次数,
sum(case when behavior_type='buy' then 1 else 0 end) as 购买数
from user
group by user_id
order by count(behavior_type) desc;

MySQL淘宝用户行为分析_第8张图片

(4)复购率:产生两次或两次以上购买的用户占购买用户的比例

select sum(case when 购买数>1 then 1 else 0 end) as 购买数大于1次,
sum(case when 购买数>0 then 1 else 0 end) as 总购买数,
concat(round(sum(case when 购买数>1 then 1 else 0 end)/sum(case when 购买数>0 then 1 else 0 end)*100,2),'%') as 复购率
from user_behavior;

在这里插入图片描述

(5)重复购买次数最多的客户

select user_id,count(user_id) from user
where behavior_type='buy'
GROUP BY user_id
ORDER BY count(user_id) desc
limit 10;

MySQL淘宝用户行为分析_第9张图片
用户122338823购买次数达到809次,对于这类忠实的用户需要开发用户信息库,建立完善的用户资料库,记录客户购物情况。

(5)重复被购买次数最多的商品

select item_id,count(behavior_type) as 被购买次数 from user
where behavior_type='buy'
GROUP BY item_id
ORDER BY 被购买次数 desc
limit 10;

MySQL淘宝用户行为分析_第10张图片
商品编号303205878购买次数达到50次,对于复购率高的商品,建议可以建立自己的忠实粉丝群,实行更精准的人群管理。

3、用户行为转化漏斗

在购物环节中收藏和加入购物车两个环节没有先后之分,所以将这两个环节可以放在一起作为购物环节的一步。最终得到用户购物行为各环节转化率,如下:

#用户购买行为计数
select sum(点击次数) as 总点击数,sum(收藏次数) as 收藏总数,sum(加购数) as 加购物车总数,
sum(购买次数) as 购买总数 from user_behavior;

在这里插入图片描述

SELECT CONCAT(ROUND(SUM(点击次数)/SUM(点击次数)*100,2),'%') AS pv,
CONCAT(ROUND((SUM(加购数)+SUM(收藏次数))/SUM(点击次数)*100,2),'%') AS pv_to_favCart,
CONCAT(ROUND(SUM(购买次数)/SUM(点击次数)*100,2),'%') AS pv_to_buy
from user_behavior;

在这里插入图片描述
MySQL淘宝用户行为分析_第11张图片
不同的行业转化率会有差异,据2012年的一项研究表明,在整个互联网范围内,平均转化率为2.13%(数据来源于《精益数据分析》),图中所示购买行为的转化率为1.04%,与行业平均值存在较大差异,淘宝移动端用户行为的转化率还有很大的增长空间。

购买率高和购买率为低的人群有什么特征

购买率高用户特征:

select user_id,点击次数,收藏次数,加购次数,购买数,round(购买数/点击次数*100,2) as 购买率
from user_behavior
GROUP BY user_id
ORDER BY 购买率 desc;

MySQL淘宝用户行为分析_第12张图片
由以上结果可以看出,购买率高的用户点击率反而不是最多的,这些用户收藏数和加购物车的次数也很少,一般不点击超过5次就直接购买,由此可以推断出这些用户为理智型消费者,有明确的购物目标,属于缺啥买啥型,很少会被店家广告或促销吸引。

购买率为低用户特征:

select user_id,点击次数,收藏次数,加购次数,购买数,
concat(round(购买数/点击次数*100,2),'%') as 购买率
from user_behavior
GROUP BY user_id
ORDER BY 购买率 ;

MySQL淘宝用户行为分析_第13张图片
由以上结果可以看出,购买率为低用户,他的点击率高、收藏或加购物车也多,此类用户可能正为商家的促销活动做准备,下单欲望较少且自制力较强,思虑多或者不会支付,购物难度较大。

基于时间维度了解用户的行为习惯

(1)一天中用户的活跃时段分布

select time,count(behavior_type) as 用户行为总量,
sum(case when behavior_type='pv' then 1 else 0 end) as 点击次数,
sum(case when behavior_type='fav' then 1 else 0 end) as 收藏次数,
sum(case when behavior_type='cart' then 1 else 0 end) as 加购次数,
sum(case when behavior_type='buy' then 1 else 0 end) as 购买次数
FROM user
GROUP BY time
ORDER BY time;

MySQL淘宝用户行为分析_第14张图片
MySQL淘宝用户行为分析_第15张图片
可以看出,每日0点到5点用户活跃度快速降低,降到一天中的活跃量最低值,6点到10点用户活跃度快速上升,10点到18点用户活跃度较平稳,19点到23点用户活跃度快速上升,达到一天中的最高值。

(2)一周中用户活跃时段分布

select DATE_FORMAT(date,'%W') as weeks,count(behavior_type) as 用户行为总量,
sum(case when behavior_type='pv' then 1 else 0 end) as 点击次数,
sum(case when behavior_type='fav' then 1 else 0 end) as 收藏次数,
sum(case when behavior_type='cart' then 1 else 0 end) as 加购次数,
sum(case when behavior_type='buy' then 1 else 0 end) as 购买次数
from user
group by weeks
ORDER BY weeks;

MySQL淘宝用户行为分析_第16张图片
MySQL淘宝用户行为分析_第17张图片
由以上结果可以看出,每周用户活跃度较稳定,每周五活跃度会有小幅降低,但是周末会慢慢回升。其中周五购买次数突增,这是由双十二电商大促销活动引起。

4、参照RFM模型

RFM模型是衡量客户价值和客户创利能力的重要工具和手段,其中由3个要素构成了数据分析最好的指标,分别是:

R-Recency(最近一次购买时间)
F-Frequency(消费频率)
M-Money(消费金额)

由于数据源没有相关的金额数据,暂且通过 R 和 F 的数据对客户价值进行打分。

(1)计算R-Recency

由于数据集包含的时间是从2014年11月18日至2014年12月18日,这里选取2014年12月19日作为计算日期,统计客户最近发生购买行为的日期距离2014年12月19日间隔几天,再对间隔时间进行排名,间隔天数越少,客户价值越大,排名越靠前。

select a.*,(@rank := @rank +1) as recent_rank from 
(select user_id,DATEDIFF('2014-12-19',max(date)) as recent
from user where behavior_type='buy'
GROUP BY user_id
ORDER BY recent ) as a,(select @rank :=0) as b;

MySQL淘宝用户行为分析_第18张图片

(2)计算F-Frequency

先统计每位用户的购买频率,再对购买频率进行排名,频率越大,客户价值越大,排名越靠前。

select a.*,(@rank2 := @rank2 +1) as freq_rank from
(select user_id,count(behavior_type) as frequency
from user where behavior_type='buy'
GROUP BY user_id
ORDER BY frequency desc) as a,
(select @rank2 :=0) as b;

MySQL淘宝用户行为分析_第19张图片

(3)对用户进行评分

对8886名有购买行为的用户按照排名进行分组,共划分为四组,对排在前四分之一的用户打4分,排在前四分之一到四分之二(即二分之一)的用户打3分,排在前四分之二到前四分之三的用户打2分,剩余的用户打1分,按照这个规则分别对用户时间间隔排名打分和购买频率排名打分,最后把两个分数合并在一起作为该名用户的最终评分。

SELECT r.user_id,r.recent_rank,f.frequency,f.freq_rank,
CONCAT( # 对客户购买行为的日期排名和频率排名进行打分
CASE WHEN r.recent_rank <= (8886/4) THEN 4
WHEN r.recent_rank > (8886/4) AND r.recent_rank <= (8886/2) THEN 3
WHEN r.recent_rank > (8886/2) AND r.recent_rank <= (8886*0.75) THEN 2
ELSE 1 END,
CASE WHEN f.freq_rank <= (8886/4) THEN 4
WHEN f.freq_rank > (8886/4) AND f.freq_rank <= (8886/2) THEN 3
WHEN f.freq_rank > (8886/2) AND f.freq_rank <= (8886*0.75) THEN 2
ELSE 1 END
) AS user_value
FROM
# 对每位用户最近发生购买行为的间隔时间进行排名(间隔天数越少,客户价值越大)
(SELECT a.*,(@rank := @rank + 1) AS recent_rank
FROM #统计客户最近发生购买行为的日期距离'2014-12-19'间隔几天
(SELECT user_id,DATEDIFF('2014-12-19',MAX(date)) AS recent
FROM user
WHERE behavior_type = 'buy'
GROUP BY user_id
ORDER BY recent) AS a,
(SELECT @rank := 0) AS b)
AS r,
# 对每位用户的购买频率进行排名(频率越大,客户价值越大)
(SELECT a.*,(@rank2 := @rank2 + 1) AS freq_rank
FROM #统计每位用户的购买频率
(SELECT user_id,COUNT(behavior_type) AS frequency
FROM user
WHERE behavior_type = 'buy'
GROUP BY user_id
ORDER BY frequency DESC) AS a,
(SELECT @rank2 := 0) AS b)
AS f
WHERE r.user_id = f.user_id;

MySQL淘宝用户行为分析_第20张图片
通过打分可以了解每位顾客的特性,从而实现差异化营销。比如对于 user_value = 44 的用户,为重点用户需要关注;对于user_value = 41 这类忠诚度高而购买能力不足的,可以适当给点折扣或捆绑销售来增加用户的购买频率。对于 user_value = 14 这类忠诚度不高而购买能力强的,需要关注他们的购物习性做精准化营销。

五、结论

1、总体转化率只有 1.04%,用户点击后收藏和加购物车的转化率在 5.07% ,需要提高用户的购买意愿,建议通过活动、优惠券、产品详情页的改进等提高转化。

2、这段时间,复购率达到91.69%,说明店铺产品对用户吸引力比较大。

3、商品编号303205878购买次数达到50次,对于复购率高的商品,建议可以建立自己的忠实粉丝群,实行更精准的人群管理。

4、用户ID为122338823购买次数达到809次,建议对于这些忠实用户,建议要更全面地了解,开发用户信息库,建立详实的用户资料数据库,追踪记录顾客的交易情况。或者线上组建VIP客户微信群等,针对这些用户的购买偏好推送更精准的销售方案。

5、购买率高且点击量少的用户属于理智型购物者,有明确购物目标,受促销和广告影响少;而购买率低的用户可以认为是等待型或克制型用户群体,下单欲望较少且自制力较强,购物难度较大。

6、大部分用户的主要活跃时间在10点到23点,在19点到23点达到一天的顶峰。可以根据用户的活跃时间段精准推送商家的折扣优惠或促销活动,提高购买率。

7、通过 R 和 F 的数据对用户行为进行打分,对每位用户进行精准化营销,还可以通过对R 和 F 的数据监测,推测客户消费的异动状况,挽回流失客户。

(本文分析过程参考知乎用户StarLau的《使用 MySQL 对淘宝用户行为进行分析》,链接地址:https://zhuanlan.zhihu.com/p/57481078)

你可能感兴趣的:(sql)