一、项目背景和目的

项目集中于对淘宝用户行为的分析,如购买时段的分析、热销商品的分析、用户行为转化漏斗分析以及通过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对淘宝用户行为进行分析相关推荐

  1. python 淘宝用户行为数据集 分析与数据源

    利用Python对淘宝用户行为进行分析 源数据来源于: https://tianchi.aliyun.com/dataset/dataDetail?dataId=649&userId=1 可以 ...

  2. 基于MySQL的淘宝用户行为数据分析

    前言 本文针对淘宝app的运营数据,以行业常见指标对用户行为进行分析,包括UV.PV.新增用户分析.漏斗流失分析.留存分析.用户价值分析.复购分析等内容,使用的分析工具以MySQL为主,涉及分组汇总, ...

  3. MySQL项目-淘宝用户购物行为数据可视化分析

    一.项目背景与目的 1.1 项目背景 UserBehavior是阿里巴巴提供的一个淘宝用户行为数据集,用于隐式反馈推荐问题的研究.数据集包含了2017年11月25日至2017年12月3日之间,有行为的 ...

  4. 基于MySQL的淘宝用户行为分析

    该文目录 一.分析背景 二.分析目的 三.理解数据 四.提出相关问题 1.相关问题 2.分析框架 五.数据清洗 1.选择子集 2.数据类型修改 3.重复值检查 4.缺失值处理 5.一致性处理 6.异常 ...

  5. 淘宝用户购物行为分析

    目录 一.项目介绍 1.1 数据集 1.2 分析思路 二.数据预处理 2.1 数据抽样.导入数据 2.2 数据清洗 2.3 导出数据 三.数据分析 3.1 从网站维度分析用户行为 3.1.1 UV.P ...

  6. 利用Python对淘宝用户行为进行分析

    1. 项目背景 该项目的数据集来源于天池,是由阿里巴巴提供的一个淘宝用户行为数据集,其中包含了2017年11月25日至2017年12月3日之间,一百万个随机用户的所有用户行为(行为包括点击.购买.加购 ...

  7. 是不是感觉被淘宝监控了!看啥立马就推送过来!用Python对淘宝用户行为进行分析!

    一.认识数据 1.1 数据来源及介绍 本数据来源于阿里云天池,是其随机选择约100万用户在2017年11月25日至12月3日之间发生的行为记录,具有包括点击.购买.加购物车和收藏商品的行为. 数据集的 ...

  8. 基于AARRR、RMF模型对淘宝用户行为进行分析

    文章目录 一.分析目的 二.数据来源 字段说明 三.数据处理 1.引入库 2.数据清理及预处理 四.用户行为分析(AARRR模型) 活跃度 双十二当天活跃度的变化 不同用户行为的活跃度变化 留存率 漏 ...

  9. mysql 时间段内的周末_淘宝用户行为数据分析(MySQL)

    利用MySQL对淘宝用户行为数据进行分析.分析步骤如下: 1 提出问题 2 理解数据 3 数据清洗 4 构建模型 5 结论 6 建议 淘宝是目前国内最大的电商平台,人们网购的主要渠道之一.买家通过搜索 ...

最新文章

  1. ajax异步传输数据时return返回总是undefined(转载)
  2. vs c# release调试
  3. python 办公自动化-用python进行办公自动化都需要学习什么知识呢?
  4. 一条SQL语句在MySQL中是如何执行的
  5. 深度剖析「圈组」消息系统设计 | 「圈组」技术系列文章
  6. gvim 编辑器初学
  7. ArrayList去除集合中字符串的重复值
  8. openlayers之obj.js提供的功能函数
  9. 全网抢夺“刘畊宏女孩”
  10. 当我答出了springboot只有5%人涉足的领域,面试官一脸诧异
  11. 百度编辑器复制微信图片无法保存
  12. 075 json和pickle模块
  13. 【优化预测】基于matlab鲸鱼算法优化LSSVM预测【含Matlab源码 104期】
  14. aix java 7下载_aix系统安装 jdk 1.7
  15. yolov5深度剖析+源码debug级讲解系列(二)backbone构建
  16. 光学中的几个物理量的意义
  17. python网络爬虫实践_《python 网络爬虫从入门到实践》笔记
  18. 链表-链表中环的入口结点
  19. 召唤神龙 javascript 调整地图大小
  20. 语雀桌面端技术架构实践

热门文章

  1. HTML5 实现分享功能(QQ 微信 微博)
  2. 百度OCR识别表格文字,并自动下载到本地(准确率很高)
  3. 4.UWB代码讲解注释
  4. 到底是做CPC CPV CPA还是CPS广告好呢?哪个收益比较高?
  5. RSSNewser 1.0
  6. DWI图像 从DICOM Tag识别 b value 的方法
  7. 库存转储STO 总结
  8. 一个非常好的美语音标发音口形的网址
  9. 【组合数学】 HDOJ 5184 Brackets
  10. Java类加载器及Android类加载器基础