如何用mysql对淘宝用户行为进行分析
一、项目背景和目的
项目集中于对淘宝用户行为的分析,如购买时段的分析、热销商品的分析、用户行为转化漏斗分析以及通过RFM模型对用户进行分类等,希望从中探索用户购买的规律,并将这些规律与店铺营销策略相结合,以实现更精细和精准的运营,让业务获得更好的增长。
项目数据来源于数据集-阿里云天池,通过此项目学习电商数据分析的指标与数据分析的基本方法。
本数据集(UserBehavior.csv)包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢),数据集的每一行表示一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔。
二、分析维度
根据现有数据及分析目的,从四个维度进行分析:
第一个维度:用户购物情况整体分析
以PV、UV、平均访问量、跳失率等指标,分析用户最活跃的日期及活跃时段,了解用户行为习惯
第二个维度:商品购买情况分析
从成交量、人均购买次数、复购率等指标,探索用户对商品的购买偏好,了解商品的销售规律
第三个维度:用户行为转化漏斗分析
从收藏转化率、购物车转化率、成交转化率,对用户行为从浏览到购买进行漏斗分析
第四个维度:参照RFM模型,对用户进行分类,找出有价值的用户
三、分析正文
分析步骤如下:
提出问题------理解数据------数据清洗------构建模型------数据可视化
(一)提出问题
- 用户最活跃的日期及时段
- 用户对商品有哪些购买偏好
- 用户行为间的转化情况
- 用户分类,哪些是有价值的用户
(二)理解数据
用户行为类型又分为四种:
pv:商品详情页pv,等价于点击
buy:商品购买
cart:商品加入购物车
fav:收藏
(三)数据清洗
1.分批导入数据:原始数据有1亿多行,数据体量太大,这里我只导入200万行,通过navicate,分批导入。
(特别说明:第一次尝试时导入了700万行的数据,mysql直接崩溃,所以后来就只导入200万行的数据。不知道对于数据量特别大的,一般大家是怎么处理的呢?希望大神们可以在留言指点一二)
新建数据库userbehavior,建立新表:users,字段分别为:user_id(用户ID),item_id(商品ID),item_category(商品类目ID),behavior_type(用户行为),time_stamp(时间戳)
2.缺失值处理:通过查询,所有字段的计数都是200万行,没有缺失值;
3.一致化处理:因为分析涉及到时间、天、小时,所以,要把数据集里的时间戳列,即time_stamp列转化为日期。
增加3列,分别是:date_time, dates,times:
alter table users add column date_time varchar(45) not null;
alter table users add column dates date not null;
alter table users add column times varchar(10) not null;
分别给这3列赋值:
set sql_safe_updates=0;
update users set date_time=from_unixtime(time_stamp);
update users set dates=left(date_time,10);
update users set times=substring(date_time,12,5);
4.对异常值处理:
对dates列的日期值进行检查,看是否有错误值;因为数据集要分析的是从2017.11.25到2017.12.3日的数据,所以把不在这个日期范围内的数据筛选出来:
SELECT dates
FROMusers
WHEREdates NOT BETWEEN '2017-11-25' AND '2017-12-03';
返回991行,也就是说,有991行的日期并不是在这个范围内的,只占到数据集中很少的比例,为了不影响接下来的分析,把这些不符合的行,删除。
-- 删除不在分析范围内的日期值
DELETE FROM users
WHERE dates NOT BETWEEN '2017-11-25' AND '2017-12-03';
对behavior_type列的值进行检查,看是否有异常值:
select behavior_type
from users
where behavior_type not in('pv','buy','cart','fav');
查询结果:没有异常值
清洗后数据如下图所示:
四、构建模型
接下来就是对数据进行分析。
1.用户购物情况整体分析
我们先从整体来了解一下用户购物情况:
1.1 这9天里PV(浏览量),返回结果是:1790225
select count(behavior_type) as 浏览量
from users
where behavior_type='pv';
1.2 这9天里UV(用户数),返回结果是:19544
select count(distinct user_id)as 用户数
from users;
1.3 平均访问量是: 1790225/19544=91.6
即每个用户平均访问了91个页面。
1.4 跳失率计算:
跳失率:只有点击行为的用户/总用户数
select count(distinct user_id) from users
where user_id not in
(select distinct user_id from users where behavior_type='fav')
and user_id not in
(select distinct user_id from users where behavior_type='cart')
and user_id not in
(select distinct user_id from users where behavior_type='buy');
求得只有点击行为的用户为1140个。也就是说,只是进行了页面的浏览而没有进一步行为的用户有1140,除以总用户数UV19544,求得跳失率约为5.8%,跳 失率不高,说明店铺的商品详情页还是能吸引到用户的进行下一步行为的。
1.5 每天访问量/访客数情况
在分析的时间段内,店铺的每天访问量(pv)是多少
select dates,count(behavior_type)as 访问量
from users
where behavior_type='pv'
group by dates;
1.6 每天的访客数情况:
select dates,count(distinct user_id) as 访客数
from users
group by dates;
无论是从访问量还是访客数来看,在分析的时间段里,11月25到12月1日,都是趋于平缓状态,每天数据量不相上下。但是到了12月2月和12月3日,访问量和访客数都有了明显的增长。为什么会出现这样的变化?会不会是和周末有关?
11月25到12月3日的星期数分别如下:
如果12月2日、3日的访问量和访客数相对有明显增长是因为周六日的话,那为什么同是周六日的11月25,26日,却并没有出现这样的增长?所以一开始的推测是不成立的。至于这两天的数据为什么有明显增长,估计是因为店铺在这两天进行了活动。如果数据量更充足,分析的时间范围更大,或者推测才更有说服力。
1.7 每个时段访问量/访客数
数据集里的times,是时分秒的信息,在这里,我只需要“时”的信息,所以,再新增一列:hours,然后用left函数,从times中提取,然后给hours赋值:
-- 新增一列:hours
alter table User_Behavior add column hours varchar(25) not null;
-- 为hours赋值
update User_Behavior set hours=left(times,2);
-- 哪一个时间段里访问量/用户数是最多的
select a.hours,a.访问量,b.访客数 from
(select hours,count(behavior_type)as 访问量 from User_Behavior
where behavior_type='pv'
group by hours)a
inner join
(select hours,count(distinct user_id) as 访客数 from User_Behavior
group by hours)b
on a.hours=b.hours;
如图,可以看出,访客数和访问量随着时间的变化趋势是一致的。从24时到第二天的凌晨5时,数量都是最少的,从6时开始,数据量逐渐增多。从17时到18时,会有一个小幅度的下降,推测是因为这个时间段是下班交通时间,线上购物会减少。从18时开始,访问量或访客数一直增长,21时到22时,是一天当中最高的一个时段。这个时段也是符合人们作息的,一般到这个时段,大家会比较空闲下来,因此,会更热衷于网上购物。
那么,在流量多的时段里,成交量是否也会更高?来看成交量随着时间段的变化趋势:
-- 每个时段的成交量:
select hours,count(behavior_type)as 成交量 from users
where behavior_type='buy'
group by hours
order by hours;
2.商品购买情况分析
2.1 成交量
用户行为中,只要用户行为为“buy”,即是完成了一次购买,形成一个订单。下面对订单进行分析
select dates,count(behavior_type) as 成交量
from User_Behavior
where behavior_type='buy'
group by dates;
其趋势变化,和上面访问量、访客数的趋势是一致的。
2.2人均购买次数
人均购买次数,是指某段时间内每个用户平均购买的次数,为订单总数除以购买用户总数。
-- 人均购买次数
select count(behavior_type)as 订单量,count(distinct user_id)as 用户数,count(behavior_type)/count(distinct user_id)as 人均购买次数
from users
where behavior_type='buy';
2.3.复购率
复购率=购买2次及以上用户数/总购买用户数
总购买用户数:
-- 总购买用户数
select count(distinct user_id) as 用户数 from User_Behavior
where behavior_type='buy';
得到总购买人数 15082
-- 购买次数>1次的用户数
select count(*) from
(select count(user_id) as 重复购买用户数
from User_Behavior
where behavior_type='buy'
group by user_id)a
where a.重复购买用户数>1;
购买两次及以上用户数 9953
复购率 = 9953/15082 =0.659 = 66%
-- 重复被购买得最多次的商品
select item_id,count(behavior_type)被购买次数
from User_Behavior
where behavior_type='buy'
group by item_id
order by count(behavior_type) desc
limit 10;
-- 重复购买次数最多的客户
select user_id,count(user_id)as 购买次数
from User_Behavior
where behavior_type='buy'
group by user_id
order by count(user_id) desc
limit 10;
用户107932购买次数达到72次,对于这类忠实的用户需要开发用户信息库,建立完善的用户资料库,记录客户购物情况。
3.用户行为转化漏斗分析
-- 用户行为情况:
select behavior_type,count(behavior_type)
from User_Behavior
group by behavior_type
order by count(behavior_type) desc;
可见真正转化为购买的只有2%,用户在浏览商品详情页后出现了大量的流失。
那么,从浏览到购买,每一个环节的转化率是多少呢?因为加入购物车和收藏商品并没有行为的先后性,也就是说,购物路线可以有两条:
第一条线路:浏览—加入购物车—购买
又或者是
第二条线路:浏览—添加收藏—购买
按照线路一来购买的话,从浏览到加入购物车到购买之间的转化率是多少呢?
购物车转化率=加入购物车后购买的用户数/加入购物车的用户数
-- 从购物车到购买的转化率是:
select count(distinct a.user_id)as 加入购物车用户数,count(distinct b.user_id)as 加入后购买用户数
from
(select distinct user_id,item_id,item_category, time_stamp
from User_Behavior
where behavior_type='cart')a
left join
(select distinct user_id,item_id,item_category,time_stamp
from User_Behavior
where behavior_type='buy')b
on
a.user_id=b.user_id and a.item_id=b.item_id and a.item_category=b.item_category and a.time_stamp<b.time_stamp;
由查询结果可知,
加入购物车的用户数为:14672
加入购物车后购买的用户数:4417
所以,购物车转化率为:4417/14672,约为30%
也就是说,加入购物车的用户中,有30%会进行购买。
-- 有多少用户进行了浏览
select count(distinct user_id)
from users where behavior_type='pv';
浏览的用户数是:19463
从图表中可以看出,从用户点击浏览到购买商品,用户浏览到加入购物车的转化率是很高的,达到了75%,说明大部分用户在浏览后有购买意向,加入了购物车;但是,在加入购物车到购买的环节里,只有30%左右的用户进行了真正的购买,而70%的用户是没有进一步购买的。为什么用户加入购物车后却并没有购买呢?
推测原因可能是:
1.加入购物车是为了与不同店铺的同种产品进行比价;
2.为了凑单,进行满减;
3.先放着,过几天再购买;
4.等活动优惠
建议可以在用户加入购物车后能赠送优惠券或者推荐搭配用品,或者弹出提示限时特卖等,采用倒计时购物车增加客户购买的紧迫感。
如果是按照购买线路二来购买,从浏览到收藏到购买的转化率又是怎样的:
收藏转化率=添加收藏后购买的用户数/添加收藏的用户数
-- 从收藏到购买的转化:
select count(distinct a.user_id)as 收藏用户数,count(distinct b.user_id)as 收藏后购买用户数 from
(select distinct user_id,item_id,item_category,time_stamp
from users where behavior_type='fav')a
left join
(select distinct user_id,item_id,item_category,time_stamp
from users
where behavior_type='buy')b
on a.user_id=b.user_id and a.item_id=b.item_id and a.item_category=b.item_category and a.time_stamp<b.time_stamp;
浏览的用户数是:22009
加入收藏的用户数为:8900
加入收藏后购买的用户数:1910
所以,收藏转化率为:1910/8900 = 21.4%,约等于21%
与线路一的购买流程来看,用户在浏览后,相对于收藏行为,会更倾向于添加到购物车。而且购物车转化率为30%,收藏转化率为21%,购物车转化率比收藏转化率高,也就是说,用户更偏向于购物车购买。
这是为什么呢?
推测原因:加入购物车后可以直接下单购买,而加入收藏后并没有可以下单的页面,如果需要购买必须重新点击商品进入详情页才能下单,多了一个步骤,所以,在这个步骤里可能用户就流失了部分。
4.参照RFM模型,对用户进行分类找出有价值的用户
RFM模型是衡量客户价值和客户创利能力的重要工具。该模型通过客户的最近交易行为(Recency)、交易频率(Frequency)以及交易金额(Monetary)三项指标来描述该客户的价值状况。一般来说,会将这三项指标分成几个区间进行评分,通过计算评分找到有价值的用户,并对用户进行分类。
最近一次消费(Recency):是指最近一次消费距离上一次消费之间的时间长短。它反映了客户对产品的态度以及对品牌价值的信任度,它关乎消费者的存留状况。
消费频率(Frequency):是指某个特定时间内消费的次数。它直接反映了客户的忠诚度,消费频率越高,忠诚度就越高;忠诚度越高的客户数量越多,公司的竞争优势越强,市场份额越大。
消费金额(Monetary):是指一定时间内消费某产品金额。它反映的是客户的价值,价值越高,给公司创造的利益就更大。
因为数据源里没有金额相关的信息,所以只通过R和F来对客户价值进行评分。
R(Recency)最近的购买行为:
数据集里时间范围是从11月25到12月3日,我将11月25日,设为参数对照日期,即以距离11月25日的天数划分区间,其中0-2天,3-4天,5-6天,7-8天,分别对应为1-4分。
-- 按购买天数评分:
create view score_01 as
select user_id,
(case when 购买天数 between 0 and 2 then 1
when 购买天数 between 3 and 4 then 2
when 购买天数 between 5 and 6 then 3
when 购买天数 between 7 and 8 then 4 else 0 end
)as 购买得分
from
(select user_id,datediff(max(dates),'2017-11-25')as 购买天数
from User_Behavior
where behavior_type='buy'
group by user_id)as a
order by 购买得分;
F(Frequency)购买频率:
从上面对复购用户的分析中,我们也得知,有购买行为的用户,购买频率最高的能达到72次。所以,我们将1-72从低到高,划分为4个档次。1-18,19-36,37-54,55-72分别对应为1-4分。
-- 按购买频率评分:
create view score_02 as
select user_id,
(case when 购买次数 between 1 and 18 then 1
when 购买次数 between 19 and 36 then 2
when 购买次数 between 37 and 54 then 3
when 购买次数 between 55 and 72 then 4 else 0 end
)as 购买频率得分
from
(select user_id,count(behavior_type)as 购买次数
from users
where behavior_type='buy'
group by user_id)b
order by 购买频率得分 desc;
通过上面两个步骤,我已经从两个维度:最近购买时间及购买频率,分别给用户进行了评分。接下来用这两项的每一项平均值作为判断高于还是低于,比如重要价值用户,必须是两项的分值都比平均值要高,才能作为重要价值的用户。
下面是我进行用户分类的标准:
如上图所示,只有R和F的评分都比均值要高,那么,就是重要价值用户;如果R的评分比均值要高,而F的评分比均值要低,就是重要保持用户,其他的,依次类推。
求两项评分的均值:
-- 求评分的均值
select avg(购买得分) from score_01;
select avg(购买频率得分)from score_02;
将获得的两项评分分别和它们的均值进行比较,对客户进行分类:
-- 对用户进行分类:
create view users_classify as
select user_id,
(case when R>3 and F>1 then '重要价值用户'
when R>3 and F<=1 then '重要保持用户'
when R<=3 and F>1 then '重要发展用户'
when R<=3 and F<=1 then '一般价值用户' else 0 end
)as 用户类型
from
(select a.user_id,a.购买得分 as R,b.购买频率得分 as F
from score_01 as a inner join score_02 as b
on a.user_id=b.user_id)c;
用户类型计数:
-- 对用户类型计数:
select count(用户类型) from users_classify where 用户类型='重要价值用户';
select count(用户类型) from users_classify where 用户类型='重要保持用户';
select count(用户类型) from users_classify where 用户类型='重要发展用户';
select count(用户类型) from users_classify where 用户类型='一般价值用户';
对于重要价值用户,他们是最优质的用户,需要重点关注并保持, 应该提高满意度,增加留存;
对于重要保持用户,他们最近有购买,但购买频率不高,可以通过活动等提高其购买频率;
对于重要发展用户,他们虽然最近没有购买,但以往购买频率高,可以做触达,以防止流失;
对于一般价值用户,他们最近没有购买,以往购买频率也不高,特别容易流失,所以应该赠送优惠券或推送活动信息,唤醒购买意愿。
四、结论及建议
1.12月2日与12月3日,相对于其他日期,流量增长明显,推测和搞活动有关;
2.大部分用户在18时到21时会比较活跃,其中21到22时,是一天当中最活跃的时段,成交量也是这一时段最高。建议可以在用户活跃的时段进行推广以使运营效果最大化。
3.这段时间,人均购买次数为3,复购率达到66%,说明店铺产品对用户吸引力比较大。
4.被重复购买得比较频繁的商品是item_id为3122135等商品,对于复购率高的商品,建议可以建立自己的忠实粉丝群,实行更精准的人群管理。
5.用户ID为107932 等的用户是重复购买次数最多的用户。建议对于这些忠实用户,建议要更全面地了解,开发用户信息库,建立详实的用户资料数据库,追踪记录顾客的交易情况。或者线上组建VIP客户微信群等,针对这些用户的购买偏好推送更精准的销售方案。
6.用户行为转化率只有2%,有98%的用户行为是没有转化为成交的,用户在浏览商品详情页后出现了大量的流失。建议通过活动、优惠券、产品详情页的改进等提高转化。
7.从浏览到加入购物车的转化有75.5%,大部分用户在浏览后有购买意向;加入购物车到真正购买的,只有30%,有70%的用户加入购物车后却并没有进一步购买。
建议在用户加入购物车后能有促进用户下单的利益“诱导”,如赠送优惠券或采用倒计时购物车增加客户购买紧近感。
8.从收藏到购买的转化率为21%。相对于购物车30%的转化率,收藏转化率稍低。
同样建议在用户添加收藏后能提示优惠或促销等时限信息,促使用户尽早下单。
9.用RFM模型对用户进行分类后,可知重要价值用户比较少,用户类型主要还是集中于重要保持用户和一般价值用户。建议根据用户类型,进行有针对性的精准营销。
如何用mysql对淘宝用户行为进行分析相关推荐
- python 淘宝用户行为数据集 分析与数据源
利用Python对淘宝用户行为进行分析 源数据来源于: https://tianchi.aliyun.com/dataset/dataDetail?dataId=649&userId=1 可以 ...
- 基于MySQL的淘宝用户行为数据分析
前言 本文针对淘宝app的运营数据,以行业常见指标对用户行为进行分析,包括UV.PV.新增用户分析.漏斗流失分析.留存分析.用户价值分析.复购分析等内容,使用的分析工具以MySQL为主,涉及分组汇总, ...
- MySQL项目-淘宝用户购物行为数据可视化分析
一.项目背景与目的 1.1 项目背景 UserBehavior是阿里巴巴提供的一个淘宝用户行为数据集,用于隐式反馈推荐问题的研究.数据集包含了2017年11月25日至2017年12月3日之间,有行为的 ...
- 基于MySQL的淘宝用户行为分析
该文目录 一.分析背景 二.分析目的 三.理解数据 四.提出相关问题 1.相关问题 2.分析框架 五.数据清洗 1.选择子集 2.数据类型修改 3.重复值检查 4.缺失值处理 5.一致性处理 6.异常 ...
- 淘宝用户购物行为分析
目录 一.项目介绍 1.1 数据集 1.2 分析思路 二.数据预处理 2.1 数据抽样.导入数据 2.2 数据清洗 2.3 导出数据 三.数据分析 3.1 从网站维度分析用户行为 3.1.1 UV.P ...
- 利用Python对淘宝用户行为进行分析
1. 项目背景 该项目的数据集来源于天池,是由阿里巴巴提供的一个淘宝用户行为数据集,其中包含了2017年11月25日至2017年12月3日之间,一百万个随机用户的所有用户行为(行为包括点击.购买.加购 ...
- 是不是感觉被淘宝监控了!看啥立马就推送过来!用Python对淘宝用户行为进行分析!
一.认识数据 1.1 数据来源及介绍 本数据来源于阿里云天池,是其随机选择约100万用户在2017年11月25日至12月3日之间发生的行为记录,具有包括点击.购买.加购物车和收藏商品的行为. 数据集的 ...
- 基于AARRR、RMF模型对淘宝用户行为进行分析
文章目录 一.分析目的 二.数据来源 字段说明 三.数据处理 1.引入库 2.数据清理及预处理 四.用户行为分析(AARRR模型) 活跃度 双十二当天活跃度的变化 不同用户行为的活跃度变化 留存率 漏 ...
- mysql 时间段内的周末_淘宝用户行为数据分析(MySQL)
利用MySQL对淘宝用户行为数据进行分析.分析步骤如下: 1 提出问题 2 理解数据 3 数据清洗 4 构建模型 5 结论 6 建议 淘宝是目前国内最大的电商平台,人们网购的主要渠道之一.买家通过搜索 ...
最新文章
- ajax异步传输数据时return返回总是undefined(转载)
- vs c# release调试
- python 办公自动化-用python进行办公自动化都需要学习什么知识呢?
- 一条SQL语句在MySQL中是如何执行的
- 深度剖析「圈组」消息系统设计 | 「圈组」技术系列文章
- gvim 编辑器初学
- ArrayList去除集合中字符串的重复值
- openlayers之obj.js提供的功能函数
- 全网抢夺“刘畊宏女孩”
- 当我答出了springboot只有5%人涉足的领域,面试官一脸诧异
- 百度编辑器复制微信图片无法保存
- 075 json和pickle模块
- 【优化预测】基于matlab鲸鱼算法优化LSSVM预测【含Matlab源码 104期】
- aix java 7下载_aix系统安装 jdk 1.7
- yolov5深度剖析+源码debug级讲解系列(二)backbone构建
- 光学中的几个物理量的意义
- python网络爬虫实践_《python 网络爬虫从入门到实践》笔记
- 链表-链表中环的入口结点
- 召唤神龙 javascript 调整地图大小
- 语雀桌面端技术架构实践