淘宝用户行为数据分析

2020-10-26 14:33:56 浏览数 (1)

本文的组织结构如下:

Part 1.分析背景

本数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。

Part 2.理解数据

关于数据集中每一列的详细描述如下

特别注意,因为有一亿条数据,刚开始直接在Macbook上导入了全部数据,后来发现更新字段都没办法操作。出于学习需要这里只导入100万条数据。可视化图表由EXCEL来实现。

Part 3. 提出问题

  1. 淘宝用户流失的原因是什么?
  2. 淘宝用户是在哪个环节流失的?
  3. 不同时间的用户需求量和购买量的关系,怎么根据时间制定策略?
  4. 复购率高的商品流失率怎么样?
  5. 怎么根据不同RFM类型用户制定用户留存策略?

Part 4. 分析目的及思路

因为数据记录了访问行为、购物车行为、收藏行为、购买行为,所以我们可以检测到用户在哪一环节流失。

我们采用多维度拆解分析方法对问题进行拆解,用假设检验分析法、对比分析法和RFM模型分析法具体分析用户使用流程及具体业务指标中的问题。

从业务指标进行分析:

从业务流程分析:

用户点击商品详细到最终购买,中间会有一系列步骤。

Part 5. 数据清洗

5.1 选择子集

本数据集中各字段均有分析价值,不需要进行本项操作。

5.2 列名重命名

可以直接通过Navicat进行操作

5.3 删除重复值

通过对各字段意义进行分析,将UserID,ItemID,TimeStamp三个字段定为联合主键,查询这三个字段同时重复的记录。经查询无此记录。

代码语言:javascript复制
SELECT 用户ID
FROM userbehavior
GROUP BY 用户ID,商品ID,时间戳
HAVING COUNT(用户ID)>1;

5.4 缺失值处理

代码语言:javascript复制
SELECT COUNT(用户ID),COUNT(商品ID),COUNT(商品类型ID),COUNT(行为类型),COUNT(时间戳)
FROM userbehavior;

并没有发现有数据缺失

5.5 一致化处理

代码语言:javascript复制
-- 截取年月日部分,形成新的一列
ALTER TABLE userbehavior add COLUMN 日期 DATE;


-- 截取小时部分,形成新的一列
ALTER TABLE userbehavior add COLUMN 时间 VARCHAR(20);

UPDATE userbehavior
SET 
日期=FROM_UNIXTIME(时间戳,'%Y-%m-%d'),
时间=FROM_UNIXTIME(时间戳,'%k:%i:%s')

5.6 异常值处理

检查日期是否在数据集规定范围内:没有问题

Part 6. 构建模型

6.1 行为数据指标:

代码语言:javascript复制
select 行为类型,count(*) as 行为类型
from UserBehavior
GROUP BY 行为类型

提出假设:用户浏览了自己不喜欢的内容,浏览到购买的转换率低。

搜集证据:

得出结论:假设正确,可以进一步假设用户在淘宝花了大量时间搜寻不到自己想要的产品,以致于放弃在淘宝平台购买产品,转而去其他平台购买,但是因为缺少页面留存率等数据,所以无法验证假设。

所以我们可以进一步假设:

  • 用户想要在淘宝找到什么商品
  • 淘宝平台推送的商品是否满足用户需求

6.2 用户流失情况原因分析

6.2.1 用户想要在淘宝找到什么商品(具体研究某几类商品,将关注点聚焦)

衡量用户最想要在淘宝平台找到什么产品,最重要的指标是商品点击数。通过该项指标,可最大程度上了解到哪类产品用户的需求量较大,哪类产品的需求较小。

代码语言:javascript复制
select 商品类型ID,count(商品类型ID) as 点击次数
from UserBehavior
where 行为类型='pv'
group by 商品类型ID
order by 购买次数 desc

对比发现商品类型为4756105、4145813和2355072商品点击率最高,可以说明需求量最大。

所以我们可以看看这几个商品种类具体是什么点击率高。

代码语言:javascript复制
select 商品ID,count(商品ID) as 点击率
from UserBehavior
where 商品类型ID='4756105' and 行为类型='pv'
group by 商品ID
order by 点击率 desc
limit 3


select 商品ID,count(商品ID) as 点击率
from UserBehavior
where 商品类型ID='4145813' and 行为类型='pv'
group by 商品ID
order by 点击率 desc
limit 3


select 商品ID,count(商品ID) as 点击率
from UserBehavior
where 商品类型ID='2355072' and 行为类型='pv'
group by 商品ID
order by 点击率 desc
limit 3

我们发现05类商品需求量比较高,具体商品点击数都在150以上,在高需求量的基础上我们考虑淘宝平台推送商品是否满足用户需求。

6.2.2 淘宝平台推送的商品是否满足用户需求(淘宝是否提供top3商品足够多的选择)

首先从商品数量占比上分析这三类商品是否在淘宝平台上足够多,以供用户选择。

代码语言:javascript复制
SELECT COUNT(DISTINCT `商品ID`) AS 商品数量
from UserBehavior;
代码语言:javascript复制
SELECT 商品类型ID,COUNT(DISTINCT 商品ID) AS 商品数量
FROM userbehavior
where `商品类型ID`=4756105 OR 商品类型ID=4145813 OR 商品类型ID=2355072 
GROUP BY 商品类型ID;

可以看出需求量前三的商品占到了百分之8,说明淘宝对热销商品还是提供了非常多的选择,所以我们考虑淘宝对这top3商品类是否存在推送机制的不合理

各类商品购买次数:

代码语言:javascript复制
SELECT 商品类型ID,COUNT(商品类型ID) AS 购买次数
FROM userbehavior
WHERE 行为类型='buy'
GROUP BY 商品类型ID
ORDER BY 购买次数 DESC
limit 5

我们发现需求量top3的商品只有4145813 进入了购买量前五名。

从图中可以得出结论,需求量最高的三类商品远低于购买数最高的三类商品,说明淘宝对需求量最高的三类商品推送机制不合理,没有满足用户需求,用户在点击查看该类商品后发现不是自己要的商品,放弃加入购物车,收藏,购买。

接下来考虑时间维度,从营销时间策略上减少用户流失率。

6.2.3 用户在什么时候会浏览商品(制定时间运营策略,增大留存率)

提出假设:用户在一周内的周末购买行为会增加

收集证据:

代码语言:javascript复制
select 日期,count(商品ID) as 点击率
from UserBehavior
where 商品类型ID='4756105' and 行为类型='pv'
group by 日期
union 
select 日期,count(商品ID) as 点击率
from UserBehavior
where 商品类型ID='4145813' and 行为类型='pv'
group by 日期
union
select 日期,count(商品ID) as 点击率
from UserBehavior
where 商品类型ID='2355072' and 行为类型='pv'
group by 日期

得出结论:假设不成立,我们发现在不同天波动不一样。

提出假设:用户在晚上休息的时候购买量上升

收集证据:

代码语言:javascript复制
select 时间,count(商品ID) as 点击率
from UserBehavior
where 商品类型ID='4756105' and 行为类型='pv'
group by 时间

select 时间,count(商品ID) as 点击率
from UserBehavior
where 商品类型ID='4145813' and 行为类型='pv'
group by 时间

select 时间,count(商品ID) as 点击率
from UserBehavior
where 商品类型ID='2355072' and 行为类型='pv'
group by 时间

得出结论:假设成立用户点击数和购买量在中午有一个小高峰,到十二点半开始上升直到晚上十点上升到最高值。建议淘宝修改营销时间段,增加top人气商品在指定时间段的营销力度。

6.2.4 不同阶段的转换率影响了购买量

假设:不同阶段转换率影响了购买量

先创建视图:

代码语言:javascript复制
create VIEW v1 as 
	SELECT 用户ID,商品ID,
	SUM(case when 行为类型='pv' then 1 else 0 end)  'pv',
	SUM(case when 行为类型='cart' then 1 else 0 end)  'cart',
	SUM(case when 行为类型='fav' then 1 else 0 end)  'fav',
	SUM(case when 行为类型='buy' then 1 else 0 end)  'buy'
	FROM UserBehavior
	group BY 用户ID,商品ID;
代码语言:javascript复制
SELECT count(用户ID) '点击后流失' 
FROM v1
where pv>0 and cart=0 and fav=0 and buy=0;

SELECT count(用户ID) '点击后加购' 
FROM v1
where pv>0 and cart>0 and fav=0;

SELECT count(用户ID) '点击、加购后流失' 
FROM v1
where pv>0 and cart>0 and fav=0 and buy=0;

SELECT count(用户ID) '点击后收藏' 
FROM v1
where pv>0 and fav>0;

SELECT count(用户ID) '点击、收藏后加购' 
FROM v1
where pv>0 and cart>0 and fav>0;

SELECT count(用户ID) '点击、收藏、加购后流失' 
FROM v1
where pv>0 and cart>0 and fav>0 and buy=0;

SELECT count(用户ID) '点击、收藏后流失' 
FROM v1
where pv>0 and cart=0 and fav>0 and buy=0;

搜集证据:

结论:假设成立。

1)我们发现每个部分的转换率都很低,但是特别的在点击后转换率只有1.3%。

2)发现在加入购物车之后或者收藏之后购买率会提高,所以应该增加活动引导用户进行加购和收藏行为。

3)特别是点击后流失率非常高,转换率只有1.3%,也正好印证了淘宝的的推送机制的不合理性,用户浏览100个商品才会有一次购买行为。

6.2.5 复购率高的产品流失率如何

首先我们找出复购率高的产品:

代码语言:javascript复制
SELECT 商品ID,COUNT(商品ID) as 购买次数
FROM UserBehavior 
where 行为类型='buy'
GROUP BY 商品ID
ORDER BY 购买次数 desc

因为样本太少,所以不存在统计意义,所以我们不探讨复购率高的商品对销量的影响。

6.2.6 根据不同类型的用户制定不同的策略来减少流失率

利用RFM模型对用户进行分群,找出有价值的用户。

RFM 三个参数定义

R:根据用户最近一次的购买时间到2017年12月3日的差值,来判断用户最近一次消费的间隔;

F:因为数据集发生在这九天时间内,因此将用户购买的次数作为用户消费的频率;

M:数据集中不包括该数据,本次不考虑该指标。

拟将评分范围定在1~4,即最高记四分、最低记1分。

R(用户最近一次消费时间间隔):该值越低,打分越高。

F(消费频率):对大于零次的用户消费次数今天统计。

代码语言:javascript复制
SELECT 用户ID,
SUM(CASE WHEN 行为类型='buy' THEN 1 ELSE 0 END) '购买次数'
FROM UserBehavior 
GROUP BY 用户ID
HAVING SUM(CASE WHEN 行为类型='buy' THEN 1 ELSE 0 END)>0
ORDER BY 购买次数 desc;

计算R和F的平均值:

代码语言:javascript复制
SELECT avg(R_score),avg(F_score) FROM 
(SELECT 用户ID,R,
(case when R BETWEEN 0 and 2 then 4
      when R BETWEEN 3 and 4 then 3
      when R BETWEEN 5 and 6 then 2
      when R BETWEEN 7 and 8 then 1
else 0 end ) as R_score,F,
(case when F BETWEEN 1 and 6 then 1
      when F BETWEEN 7 and 12 then 2
      when F BETWEEN 13 and 19 then 3
      when F>=20 then 4 else 0 end ) as F_score
FROM (SELECT 用户ID,DATEDIFF('2017-12-3',max(日期)) as R,
SUM(CASE WHEN 行为类型='buy' THEN 1 ELSE 0 END) AS F
FROM UserBehavior where 行为类型='buy'
GROUP BY 用户ID) AS A) as B;
代码语言:javascript复制
select 用户分类,count(用户ID) as "客户数量"
from (select 用户ID,
(case when R_score>3.2625 and F_score>1.1041 then "重要价值客户"
when R_score>3.2625 and F_score<1.1041 then "重要发展客户"
when R_score<3.2625 and F_score>1.1041 then "重要保持客户"
when R_score<3.2625 and F_score<1.1041 then "一般价值客户" end) as "用户分类"
from (SELECT 用户ID,R,
(case when R BETWEEN 0 and 2 then 4
      when R BETWEEN 3 and 4 then 3
      when R BETWEEN 5 and 6 then 2
      when R BETWEEN 7 and 8 then 1
else 0 end ) as R_score,F,
(case when F BETWEEN 1 and 6 then 1
      when F BETWEEN 7 and 12 then 2
      when F BETWEEN 13 and 18 then 3
      when F>=19 then 4 else 0 end ) as F_score
FROM (SELECT 用户ID,DATEDIFF('2017-12-3',max(日期)) as R,
SUM(CASE WHEN 行为类型='buy' THEN 1 ELSE 0 END) AS F
FROM UserBehavior where 行为类型='buy'
GROUP BY 用户ID) AS A) as b) as c  GROUP BY 用户分类

结论:可以看出用户主要在一般发展用户和重要发展用户上,应该把重心放在重要用户上,想办法转化重要用户为重要价值用户。

Part 7. 改进建议

  • 建议算法部门改善淘宝推送商品机制,尤其针对需求最高的4756105、4145813和2355072的商品类型着重给推荐目标用户,缩短用户寻找商品时间。
  • 市场部门要增加投放需求量高的商品,针对需求最高的4756105、4145813和2355072商品类型,增加该类商品广告引流。
  • 淘宝的用户搜寻商品的时间段主要在下午6点至晚上11点,也就是大多数人下班后休息的时间。建议运营部门在这个时间段对这4756105、4145813和2355072商品类型的商品多策划一些营销活动,提高转换率。
  • 对于消费频率高但是近期没有消费的重要保持用户使用邮件推送、APP push的方法、活动短信提醒的方法召回。
  • 对于消费频率不高但是近期有消费的重要发展用户,应该用会员权益或者发放优惠券的形式促进消费次数。

0 人点赞