淘宝用户行为数据分析
本文的组织结构如下:
Part 1.分析背景
本数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。
Part 2.理解数据
关于数据集中每一列的详细描述如下
特别注意,因为有一亿条数据,刚开始直接在Macbook上导入了全部数据,后来发现更新字段都没办法操作。出于学习需要这里只导入100万条数据。可视化图表由EXCEL来实现。
Part 3. 提出问题
- 淘宝用户流失的原因是什么?
- 淘宝用户是在哪个环节流失的?
- 不同时间的用户需求量和购买量的关系,怎么根据时间制定策略?
- 复购率高的商品流失率怎么样?
- 怎么根据不同RFM类型用户制定用户留存策略?
Part 4. 分析目的及思路
因为数据记录了访问行为、购物车行为、收藏行为、购买行为,所以我们可以检测到用户在哪一环节流失。
我们采用多维度拆解分析方法对问题进行拆解,用假设检验分析法、对比分析法和RFM模型分析法具体分析用户使用流程及具体业务指标中的问题。
从业务指标进行分析:
从业务流程分析:
用户点击商品详细到最终购买,中间会有一系列步骤。
Part 5. 数据清洗
5.1 选择子集
本数据集中各字段均有分析价值,不需要进行本项操作。
5.2 列名重命名
可以直接通过Navicat进行操作
5.3 删除重复值
通过对各字段意义进行分析,将UserID,ItemID,TimeStamp三个字段定为联合主键,查询这三个字段同时重复的记录。经查询无此记录。
SELECT 用户ID
FROM userbehavior
GROUP BY 用户ID,商品ID,时间戳
HAVING COUNT(用户ID)>1;
5.4 缺失值处理
SELECT COUNT(用户ID),COUNT(商品ID),COUNT(商品类型ID),COUNT(行为类型),COUNT(时间戳)
FROM userbehavior;
并没有发现有数据缺失
5.5 一致化处理
-- 截取年月日部分,形成新的一列
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 行为数据指标:
select 行为类型,count(*) as 行为类型
from UserBehavior
GROUP BY 行为类型
提出假设:用户浏览了自己不喜欢的内容,浏览到购买的转换率低。
搜集证据:
得出结论:假设正确,可以进一步假设用户在淘宝花了大量时间搜寻不到自己想要的产品,以致于放弃在淘宝平台购买产品,转而去其他平台购买,但是因为缺少页面留存率等数据,所以无法验证假设。
所以我们可以进一步假设:
- 用户想要在淘宝找到什么商品
- 淘宝平台推送的商品是否满足用户需求
6.2 用户流失情况原因分析
6.2.1 用户想要在淘宝找到什么商品(具体研究某几类商品,将关注点聚焦)
衡量用户最想要在淘宝平台找到什么产品,最重要的指标是商品点击数。通过该项指标,可最大程度上了解到哪类产品用户的需求量较大,哪类产品的需求较小。
select 商品类型ID,count(商品类型ID) as 点击次数
from UserBehavior
where 行为类型='pv'
group by 商品类型ID
order by 购买次数 desc
对比发现商品类型为4756105、4145813和2355072商品点击率最高,可以说明需求量最大。
所以我们可以看看这几个商品种类具体是什么点击率高。
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商品足够多的选择)
首先从商品数量占比上分析这三类商品是否在淘宝平台上足够多,以供用户选择。
SELECT COUNT(DISTINCT `商品ID`) AS 商品数量
from UserBehavior;
SELECT 商品类型ID,COUNT(DISTINCT 商品ID) AS 商品数量
FROM userbehavior
where `商品类型ID`=4756105 OR 商品类型ID=4145813 OR 商品类型ID=2355072
GROUP BY 商品类型ID;
可以看出需求量前三的商品占到了百分之8,说明淘宝对热销商品还是提供了非常多的选择,所以我们考虑淘宝对这top3商品类是否存在推送机制的不合理。
各类商品购买次数:
SELECT 商品类型ID,COUNT(商品类型ID) AS 购买次数
FROM userbehavior
WHERE 行为类型='buy'
GROUP BY 商品类型ID
ORDER BY 购买次数 DESC
limit 5
我们发现需求量top3的商品只有4145813 进入了购买量前五名。
从图中可以得出结论,需求量最高的三类商品远低于购买数最高的三类商品,说明淘宝对需求量最高的三类商品推送机制不合理,没有满足用户需求,用户在点击查看该类商品后发现不是自己要的商品,放弃加入购物车,收藏,购买。
接下来考虑时间维度,从营销时间策略上减少用户流失率。
6.2.3 用户在什么时候会浏览商品(制定时间运营策略,增大留存率)
提出假设:用户在一周内的周末购买行为会增加
收集证据:
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 日期
得出结论:假设不成立,我们发现在不同天波动不一样。
提出假设:用户在晚上休息的时候购买量上升
收集证据:
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 不同阶段的转换率影响了购买量
假设:不同阶段转换率影响了购买量
先创建视图:
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;
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 复购率高的产品流失率如何
首先我们找出复购率高的产品:
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(消费频率):对大于零次的用户消费次数今天统计。
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的平均值:
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;
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的方法、活动短信提醒的方法召回。
- 对于消费频率不高但是近期有消费的重要发展用户,应该用会员权益或者发放优惠券的形式促进消费次数。
- 量化投资教程:用R语言打造量化分析平台
- 也谈事件(Event)
- Zuul:构建高可用网关之多维度限流
- Hystrix:HystrixCollapser请求合并
- oauth2.0 实现spring cloud nosession
- 基于自定义向导的C++单元测试环境自动化配置
- 【spring cloud】自定义jwt实现spring cloud nosession
- R语言的三种聚类方法
- ArrayList foreach 循环里进行元素的 remove add 操作有什么现象?
- 10个令人相见恨晚的R语言包
- 小心Windows旧版认证暴露你的系统帐户密码
- DNS Shell初体验
- 如何在Weka中加载CSV机器学习数据
- 老司机教你部署Cowrie蜜罐
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 今天抠图,Python实现一键换底片!想换什么换什么(附源码)
- 你想不到的沙雕,8行代码Python实现GIF图倒放,每天的快乐源泉
- python爬虫-首医
- 2万8千张图片如何用python组成一张(简洁明了附源码)
- 10 种常用 Matplotlib 图的 Python 代码
- Python爬取某宝商品数据案例:100页的价格、购买人数等数据
- 如何让你的图片加上一层天气的特效?Python帮你解决(附源码)
- Python最简单的图片爬虫,20行代码带你爬遍整个网站
- 用Python把人物头像动漫化,不同的表情给你不同的惊喜
- python苦短-爬取音乐
- python苦短-灵笼说啥
- python爬虫-八佰词云
- python爬虫-beautifulsoup使用
- 深度学习-卷积神经网络原理
- 深度理论VGG-NET 网络