数据分析实战:淘宝用户行为分析

该博客介绍了通过数据分析对淘宝用户行为进行的深入研究,包括数据预处理、行为分析、转化率计算。重点关注用户的行为路径,如浏览、收藏、加购和购买的转化率,以提供更精准的隐式反馈推荐策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 数据概述

  • 数据来源:阿里巴巴

  • 数据集下载:User Behavior Data from Taobao for Recommendation

  • 介绍
    UserBehavior是阿里巴巴提供的一个淘宝用户行为数据集,用于隐式反馈推荐问题的研究。

  • 数据集
    在这里插入图片描述
    本数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击pv、购买buy、加购cart、喜欢fav)。数据集的组织形式和MovieLens-20M类似,即数据集的每一行表示一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔。关于数据集中每一列的详细描述如下:在这里插入图片描述

  • 补充说明
    用户行为类型共有四种,它们分别是:
    在这里插入图片描述数据集大小的一些说明如下
    在这里插入图片描述

2. 分析思路

数据分析的本质是解决销售问题,分析思路如下,分为三步:

  • 提出问题
  • 提出假设
  • 数据分析

提出问题

使用多维度拆解的分析方法,从以下三个角度进行多维度分析:

多维度拆解:问题 = 维度1 + 维度2 + …

在这里插入图片描述

1、 产品角度:

  • 哪些是热搜产品?
  • 哪些是畅销产品?
  • 热搜产品是否就是畅销产品

2、用户角度

  • 用户行为各类型的占比是多少?
  • 行为之间的转化率是多少?
  • 哪个环节用户流失比较严重?

3、时间角度

  • 特定时期(比如周末、节假日)对用户行为的影响?
  • 不同时间段对用户行为的影响?

其中,用户角度是重点,可以使用漏斗分析对用户的四种行为分析(转化率),使用FRM分析对用户进行分层分析(消费情况)。
在这其中,转化率是重中之重!

漏斗分析

FRM分析

提出假设

(后文)

数据分析

(后文)

3. 数据预处理

注:表格类数据 + Python(pandas库)预处理

像这种单纯表格类数据分析大致有以下过程

- 选择子集- 列名重命名 - 删除重复值 - 缺失数据处理 - 处理日期和时间 - 数据排序 - 异常值处理

选择子集

进行列过滤,从原数据中选择出相关的列;
如果数据量很大,是否也可以考虑同时进行行过滤

补全表格

处理以下原数据可能存在的问题:

  • 没有列名
  • 没有主键

相应解决即可。

删除重复值

无需太多解释,将相等的记录合并为一条记录。

处理缺失值

处理缺失值的方法:替代法
即,使用平均值最大值最小值或者更为复杂的概率估计对缺失值进行替代

处理日期时间(数据一致性)

表格数据中的日期和时间一般是以时间戳的形式出现,其是数据类型是字符串

Why:
字符串格式的时间戳,转换为数值形式的年、月、日、和小时等。在做到数据格式统一的同时,为数据增加了新的可用的特征(借用机器学习中feature的概念)。

How:
时间戳转换有两个过程:
时间戳字符串 ——> 日期时间字符串
日期时间字符串 ——> 年、月、日、小时等数值

具体操作:
可以使用pandas中的to_datetime函数

df['datetime'] = pd.to_datetime(df['timestamp'], unit='s')
print(df)

完成第一步时间戳(timestamp)日期时间(datetime)的转换

       user_id  item_id  category_id behavior_type   timestamp  \
0            1  2333346      2520771            pv  1511561733   
1            1  2576651       149192            pv  1511572885   
2            1  3830808      4181361            pv  1511593493   
3            1  4365585      2520377            pv  1511596146   
4            1  4606018      2735466            pv  1511616481   
...        ...      ...          ...           ...         ...   
99995  1004381  4637603      3392099            pv  1511884729   
99996  1004381  3833739      3392099            pv  1511884775   
99997  1004381    33879       869231            pv  1511885059   
99998  1004381  3504989       869231            pv  1511885089   
99999  1004381   885333      4756105            pv  1511885130   

                 datetime  
0     2017-11-24 22:15:33  
1     2017-11-25 01:21:25  
2     2017-11-25 07:04:53  
3     2017-11-25 07:49:06  
4     2017-11-25 13:28:01  
...                   ...  
99995 2017-11-28 15:58:49  
99996 2017-11-28 15:59:35  
99997 2017-11-28 16:04:19  
99998 2017-11-28 16:04:49  
99999 2017-11-28 16:05:30  

[100000 rows x 6 columns]

然后使用dt.yeardt.month等属性获取分离后的年、月、日、小时等特征:

df['year'] = df['datetime'].dt.year
df['month'] = df['datetime'].dt.month
df['day'] = df['datetime'].dt.day
df['hour'] = df['datetime'].dt.hour
print(df)

结果如下:

       user_id  item_id  category_id behavior_type   timestamp  \
0            1  2333346      2520771            pv  1511561733   
1            1  2576651       149192            pv  1511572885   
2            1  3830808      4181361            pv  1511593493   
3            1  4365585      2520377            pv  1511596146   
4            1  4606018      2735466            pv  1511616481   
...        ...      ...          ...           ...         ...   
99995  1004381  4637603      3392099            pv  1511884729   
99996  1004381  3833739      3392099            pv  1511884775   
99997  1004381    33879       869231            pv  1511885059   
99998  1004381  3504989       869231            pv  1511885089   
99999  1004381   885333      4756105            pv  1511885130   

                 datetime  year  month  day  hour  
0     2017-11-24 22:15:33  2017     11   24    22  
1     2017-11-25 01:21:25  2017     11   25     1  
2     2017-11-25 07:04:53  2017     11   25     7  
3     2017-11-25 07:49:06  2017     11   25     7  
4     2017-11-25 13:28:01  2017     11   25    13  
...                   ...   ...    ...  ...   ...  
99995 2017-11-28 15:58:49  2017     11   28    15  
99996 2017-11-28 15:59:35  2017     11   28    15  
99997 2017-11-28 16:04:19  2017     11   28    16  
99998 2017-11-28 16:04:49  2017     11   28    16  
99999 2017-11-28 16:05:30  2017     11   28    16  

[100000 rows x 10 columns]

异常值处理

数据中的异常值是很可能影响数据分析结果的噪声,应该进行筛选并去除。

可以通过数据排序箱线图等的简单方式,再结合简单的规则(常识性规则、业务特定规则等)来对异常的错误值进行排除;
也可以使用偏差分析数据分布统计方法来进行筛选。

表格预览

最后的表格长这样:
(注意是有问题的,表格的字段为varchar而非数数值类型)
在这里插入图片描述

4. 数据分析

分析目的:
通过对2017年11月25日至2017年12月3日之间的用户行为数据分析,为客户提供更精准的隐式反馈推荐,提高用户忠诚度,提高商家的成交转化率。

数据中主要记录了用户的浏览、收藏、加购和购买四种行为,使用漏斗模型进行数据分析。
具体来说,可以分为用户行为总占比不同路径行为留存分析两个方面来进行用户行为转化分析

在这里插入图片描述

4.1 行为分析

4.1.1 查看各种行为的整体情况

整体上,可以从用户各种行为的占比以及整体转化率来分析。

(1)各种行为的占比
方法一:直接用原表暴力统计
很自然地根据 behavior_type分组后统计各种行为的总数。

SELECT behavior_type, COUNT(*) # 这个方法舍弃,没有行转列
FROM sub_UserBehavior
GROUP BY  behavior_type
-- pv	89709
-- buy	2101
-- fav	2744
-- cart	5446

然后再进行数据占比:

pv = 89709 / (四项总和)

方法二:进行行转列,构造新表

DROP VIEW IF EXISTS user_behavior_cnt;  # (若已存在)先删除视图

CREATE VIEW user_behavior_cnt AS  # 创建各行为总数的视图(便于后续计算转化率使用),注意使用条件语句将行转为列
SELECT SUM(IF(behavior_type = 'pv', 1, 0)) pv_cnt_total,
			 SUM(IF(behavior_type = 'fav', 1, 0)) fav_cnt_total, 
			 SUM(IF(behavior_type = 'cart', 1, 0)) cart_cnt_total,
			 SUM(IF(behavior_type = 'buy', 1, 0)) buy_cnt_total,
			 COUNT(*) cnt_total
FROM sub_UserBehavior;

SELECT * FROM user_behavior_cnt;  # 显示视图

结果如下:

在这里插入图片描述然后进行占比计算:

### 四种行为所占比例
SELECT pv_cnt_total/cnt_total '浏览行为数占比',   
			 fav_cnt_total/cnt_total '收藏行为数量占比', 
			 cart_cnt_total/cnt_total '加购行为数量占比',
			 buy_cnt_total/cnt_total '购买行为数量占比'
FROM user_behavior_cnt;

-- 0.8971	0.0274	0.0545	0.0210

结果如下:

在这里插入图片描述
几点说明:
① 行转列:使用聚合语句+条件语句的结合实现表格行转列,便于后续取值
② 视图的常规用法
③ 使用视图时,先使用DROP VIEW 防止多次运行报错:已存在视图
④ 显示视图,直接使用 普通查询语句

(2)行为整体转化率

这里,将收藏和加购放在一起,毕竟没有先后关系。

### 总的行为转化率
SELECT cnt_total '行为总数',
			 pv_cnt_total '浏览总数',
			 fav_cnt_total + cart_cnt_total '收藏和加购总数',
			 buy_cnt_total '购买总数',
			 pv_cnt_total/cnt_total '用户浏览的转化率',   
			 (fav_cnt_total + cart_cnt_total) /pv_cnt_total '浏览到收藏和加购的转化率', 
			 buy_cnt_total/(fav_cnt_total + cart_cnt_total) '收藏和加购到购买的转化率'
FROM user_behavior_cnt;
-- 100000	89709	8190	2101	0.8971	0.0913	0.2565

在这里插入图片描述

4.1.2 不同路径行为转化率

(1)分析

先理清所有可能路径,再搞清楚要研究的路径
在这里插入图片描述
流失部分不考虑即可。

关于转化率的计算:
在这里插入图片描述
在这里插入图片描述
(2)代码部分

这里也是对原表先行转列,先构造一个新表,便于后续取值计算。

需要注意的是,根据分析的目标,这里需要对用户和商品进行分组,统计每一个人每件商品的(四种)行为表现。

## 统计每一个人对每件商品的(四种)行为表现
DROP VIEW IF EXISTS user_behavior_cnt_grouping;

CREATE VIEW user_behavior_cnt_grouping AS
SELECT user_id, item_id,
			 SUM(IF(behavior_type = 'pv',1, 0)) pv_grouping,
			 SUM(IF(behavior_type = 'fav',1, 0)) fav_grouping,
			 SUM(IF(behavior_type = 'cart',1, 0)) cart_grouping,
			 SUM(IF(behavior_type = 'buy',1, 0)) buy_grouping,
			 COUNT(*) cnt_grouping
FROM sub_UserBehavior
GROUP BY user_id, item_id;  # 注意对 user_id 和 item_id 同时进行分组,统计每一个人对每件商品的(四种)行为表现

SELECT * FROM user_behavior_cnt_grouping;

结果:

在这里插入图片描述然后根据上面的表和不同路径的分析图,分为四种情况来进行分别计算。
(下面是采用WITH AS临时表的方式)

1、路径:浏览-购买(pv-buy)

### pv-buy 
WITH pv AS 
(
SELECT SUM(pv_grouping)
FROM user_behavior_cnt_grouping
WHERE pv_grouping > 0
),
pv_buy AS
(
SELECT SUM(buy_grouping)
FROM user_behavior_cnt_grouping
WHERE pv_grouping > 0 AND buy_grouping > 0 AND fav_grouping = 0 AND cart_grouping = 0  # 后面两个排除条件别忘记!
)
SELECT (SELECT * FROM pv) '浏览用户的数量',
			 (SELECT * FROM pv_buy) '浏览用户进行购买的数量',
			 (SELECT * FROM pv_buy) / (SELECT * FROM pv) '浏览用户直接购买的转化率';
-- 89709	1088	0.0121

在这里插入图片描述
2、路径:浏览-收藏-购买(pv-fav-buy)

### pv-fav-buy
WITH pv AS
(
SELECT SUM(pv_grouping)
FROM user_behavior_cnt_grouping
WHERE pv_grouping > 0
),
pv_fav AS
(
SELECT SUM(fav_grouping)
FROM user_behavior_cnt_grouping
WHERE pv_grouping > 0 AND fav_grouping > 0
),
pv_fav_buy AS 
(
SELECT SUM(fav_grouping)
FROM user_behavior_cnt_grouping
WHERE pv_grouping > 0 AND fav_grouping > 0 AND buy_grouping > 0
)
SELECT (SELECT * FROM pv) '浏览用户数量',
			 (SELECT * FROM pv_fav) '浏览用户进行收藏的数量', 
			 (SELECT * FROM pv_fav_buy) '浏览并收藏的用户进行购买的数量',
			 (SELECT * FROM pv_fav) / (SELECT * FROM pv) '浏览用户到收藏用户的转化率',
			 (SELECT * FROM pv_fav_buy) / (SELECT * FROM pv_fav) '浏览且收藏的用户到成功购买的转化率';
-- 89709	944	99	0.0105	0.1049

在这里插入图片描述
3、浏览-加购-购买(pv-cart-buy)

### pv-cart-buy
WITH pv AS
(
SELECT SUM(pv_grouping)
FROM user_behavior_cnt_grouping
WHERE pv_grouping > 0
),
pv_cart AS
(
SELECT SUM(cart_grouping)
FROM user_behavior_cnt_grouping
WHERE pv_grouping > 0 AND cart_grouping > 0
),
pv_cart_buy AS 
(
SELECT SUM(cart_grouping)
FROM user_behavior_cnt_grouping
WHERE pv_grouping > 0 AND cart_grouping > 0 AND buy_grouping > 0
)
SELECT (SELECT * FROM pv) '浏览用户数量',
			 (SELECT * FROM pv_cart) '浏览用户到加购的数量',
			 (SELECT * FROM pv_cart_buy) '浏览并加购的用户进行购买的数量',
			 (SELECT * FROM pv_cart) / (SELECT * FROM pv) '浏览用户到加购用户的转化率',
			 (SELECT * FROM pv_cart_buy) / (SELECT * FROM pv_cart) '浏览且加购的用户到成功购买的转化率';
-- 89709	2762	279	0.0308	0.1010

在这里插入图片描述
4、浏览-收藏和加购-购买(pv-fav+cart-buy)

### pv-fav&cart-buy

WITH pv AS
(SELECT SUM(pv_grouping)
FROM user_behavior_cnt_grouping
WHERE pv_grouping > 0
),
pv_favcart AS 
(SELECT SUM(fav_grouping) + SUM(cart_grouping)
FROM user_behavior_cnt_grouping
WHERE pv_grouping > 0 AND fav_grouping > 0 AND cart_grouping > 0
),
pv_favcart_buy AS 
(SELECT SUM(fav_grouping) + SUM(cart_grouping)  # 这里将收藏和加购两项相加
FROM user_behavior_cnt_grouping
WHERE pv_grouping > 0 AND fav_grouping > 0 AND cart_grouping > 0 AND buy_grouping > 0  # 注意 fav 与 cart 用 AND 连接
)
SELECT (SELECT * FROM pv) '浏览用户', 
			 (SELECT * FROM pv_favcart) '从浏览到收藏和加购用户数量', 
			 (SELECT * FROM pv_favcart_buy) '从浏览到收藏和加购再到购买的用户数量',
			 (SELECT * FROM pv_favcart) / (SELECT * FROM pv) '浏览用户到收藏或加购的转化率',
       (SELECT * FROM pv_favcart_buy) / (SELECT * FROM pv_favcart) '浏览并收藏或加购的用户到成功购买的转化率';
-- 89709	158	39	0.0018	0.2468

在这里插入图片描述

最终结果汇总如下:

在这里插入图片描述

4.1.3 对结果的分析

(1)整体转化率结果的分析

(2)不同路径转化率的结果分析

用户直接购买的转化率最高,达到了12.1%,第二是先收藏后购买,转换率有10.49%

4.1.4 提出假设

分析可能的问题和原因,提出假设并进行验证。

4.2 消费分析

(暂略)

其他角度的分析(已经舍弃)

提出问题:
(1)用户访问分析
1、总访问量有多少?
2、总访客数有多少?
3、人均访问量有多少?
(2)用户消费分析
1、消费率(人均购买次数)是多少?
2、复购率是多少?
(3)日期
用户行为和日期的关系?
(4)时间
用户行为和时间的关系?
(5)用户价值分析/用户分层分析

5. 总结

参考:
(前三个已经够用)

  1. 14 MySQL模块:SQL分析实战案例,以及相关优快云博客:SQL项目实战练习:淘宝用户行为数据分析实战
  2. 淘宝用户行为分析-SQL
  3. 淘宝用户行为分析(数据分析实战项目 | python + SQL + tableau)
  4. 用户为什么不下单?从零掌握电商数据分析/用户行为分析(二)——九章的相关视频,值得学习
  5. 数据分析——实战|淘宝用户行为分析案例
  6. 数据分析实战之淘宝用户行为分析
  7. SQL项目实战练习:淘宝用户行为数据分析实战
  8. 数据分析丨excel处理数据的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值