一、数据说明以及需求分析
1.1数据说明
本数据集是阿里巴巴提供的一个淘宝用户行为数据集,本次分析数据提供了1万用户量级的完整行为数据。数据包含了抽样出来的1W用户在一个月时间(11.18~12.18)之内的移动端行为数据。
字段 | 字段说明 | 提取说明 |
user_id | 用户标识 | 抽样&字段脱敏 |
item_id | 商品标识 | 字段脱敏 |
behavior_type | 用户对商品的行为类型 | 包括浏览、收藏、加购物车、购买,对应取值分别是1、2、3、4 |
item_category | 商品分类标识 | 字段脱敏 |
time | 行为时间 | 精确到小时级别 |
使用工具:Mysql数据库,DataGrip,Excel,Tableau
1.2数据需求分析
根据数据集特点,本次数据分析将从两个维度对数据进行分析:
用户维度
1、PV(页面浏览量)、UV(独立访客)、PV/UV
2、用户活跃度分析:分析用户在不同时段的活跃度,探索哪些时间段用户更倾向于进行购买或其他行为,进而优化营销策略和系统推荐。
3、用户购买行为分析:
间隔时间,了解用户再次购买的平均时间间隔,可以帮助预测用户下次购买的时间,投放优惠券
漏斗分析:从收藏转化率、购物车转化率、成交转化率,对用户行为从浏览到购买进行漏斗分析,构建用户行为漏斗模型,分析用户从浏览到购买各个环节的转化情况,找出可能存在的流失点并提出改进建议。
产品维度
1、浏览量、成交量、加购量、成交率探索用户对商品的购买偏好,了解商品的销售规律
2、用户价值分群(RFM模型)
二、数据处理
2.1时间格式处理
导入时发现time的格式并不是标准的时间格式,将其格式改成datetime:
导入数据如下:
为了能够进一步更好的分析时间数据,将添加time_date以及time_hour:
ALTER TABLE tbdata.user_action
ADD COLUMN time_date DATE,
ADD COLUMN time_hoUr TIME;
UPDATE tbdata.user_action
SET time_date = DATE(time),
time_hour = TIME(time);
处理格式结果如下:
2.2行为格式的处理
由数据集说明可知,behavior_type列的合法数据为1、2、3、4,将对数据进行检查:
SELECT *
FROM tbdata.user_action
WHERE behavior_type NOT IN (1, 2, 3, 4);
结果显示并没有非法字段
接下来根据behavior_type列创建出列behavior解释行为,来增加数据的可读性:
ALTER TABLE tbdata.user_action
ADD COLUMN behavior VARCHAR(20);
UPDATE tbdata.user_action
SET behavior = CASE behavior_type
WHEN 1 THEN 'pv'
WHEN 2 THEN 'fav'
WHEN 3 THEN 'cart'
WHEN 4 THEN 'buy'
END;
处理格式结果如下:
2.3检查数据
由于数据集只给了一个月的数据,所以暂时不需要进行数据的筛选,接下来检查数据集中是否有缺失值。
select count(user_id),count(item_id),count(behavior_type),count(behavior),count(item_category),
count(time),count(time_date),count(time_hour) from tbdata.user_action
检查数据结果如下:
共20335303条数据,无缺失字段、缺失值。
三、模型构建以及数据可视化
3.1用户维度
3.1.1 PV/UV(平均浏览量)
页面浏览量(pv_daily)、独立访客(uv_daily)以及PV/UV(平均浏览量):
SELECT
time_date AS 日期,
COUNT(*) AS pv_daily,
COUNT(DISTINCT user_id) AS uv_daily,
COUNT(*) / COUNT(DISTINCT user_id) AS pv_uv_ratio
FROM
tbdata.user_action
GROUP BY
time_date;
结果如下:
数据应用到Tableau做仪表盘:
由图可知,日常访客和浏览量总体比较稳定,双十二活动拉动大量用户“围观”,相关数据也明显提高。
3.1.2用户活跃度分析
分析用户在不同时段的活跃度,探索哪些时间段用户更倾向于进行哪些行为,进而优化营销策略和系统推荐。对每日每时段的行为进行分类统计:
SELECT
time_date AS 日期,
time_hour AS 时段,
SUM(CASE WHEN behavior = 'pv' THEN 1 ELSE 0 END) AS 浏览,
SUM(CASE WHEN behavior = 'fav' THEN 1 ELSE 0 END) AS 收藏,
SUM(CASE WHEN behavior = 'cart' THEN 1 ELSE 0 END) AS 加购物车,
SUM(CASE WHEN behavior = 'buy' THEN 1 ELSE 0 END) AS 购买
FROM
tbdata.user_action
GROUP BY
time_date, time_hour;
获得结果如下:
数据应用到Tableau做仪表盘:
分析活跃度高的时间段内用户行为特点:
- 用户在10点-15点以及20点-22点活跃度最高,凌晨活跃度最低。这可能是因为这些时间段是用户上班后和下班前的休息时间,或者是晚饭后的闲暇时间,用户更有可能浏览购物网站或进行线上购物。
- 凌晨活跃度较低,这可能是因为大多数用户此时处于睡眠状态。
针对不同时间段的用户行为特点制定营销策略:
- 在活跃度较高的时间段增加特价促销活动或推出限时折扣,吸引用户在这些时间段进行购物行为。
- 在凌晨活跃度较低的时间段可以发送睡前提醒或推送消息,提醒用户关注新品上线或活动预告,以唤起用户兴趣。
根据分析结果进行系统优化:
- 在活跃度高的时间段增加服务器资源以提高网站或应用的访问速度和稳定性,确保用户体验良好。
- 在凌晨活跃度较低的时间段进行系统维护或数据备份等操作,以减少对用户的影响
3.1.3用户购买行为分析
1、购买间隔时间
间隔时间,了解用户在每个类别商品再次购买的平均时间间隔,可以帮助预测用户下次购买的时间,投放优惠券:
SELECT
t1.user_id,
t1.item_category,
t1.item_id,
t1.time AS buy_time,
TIMESTAMPDIFF(SECOND, t2.time, t1.time)/3600.0 AS 间隔时间
FROM
tbdata.user_action t1
JOIN
tbdata.user_action t2 ON t1.user_id = t2.user_id AND t1.item_id = t2.item_id
WHERE
t1.behavior = 'buy'
AND t2.behavior = 'buy'
AND t1.time > t2.time
ORDER BY
t1.user_id,
t1.item_id,
t1.time;
得到结果如下:
数据应用到Tableau做仪表盘:
2、漏斗分析
从收藏转化率、购物车转化率、成交转化率,对用户行为从浏览到购买进行漏斗分析,分析用户从浏览到购买各个环节的转化情况,找出可能存在的流失点并提出改进建议。
SELECT
time_date,
SUM(CASE WHEN behavior = 'pv' THEN 1 ELSE 0 END) AS 浏览,
SUM(CASE WHEN behavior = 'fav' THEN 1 ELSE 0 END) AS 收藏,
SUM(CASE WHEN behavior = 'cart' THEN 1 ELSE 0 END) AS 加购物车,
SUM(CASE WHEN behavior = 'buy' THEN 1 ELSE 0 END) AS 购买,
SUM(CASE WHEN behavior = 'fav' THEN 1 ELSE 0 END) / SUM(CASE WHEN behavior = 'pv' THEN 1 ELSE 0 END) AS 收藏浏览转化率,
SUM(CASE WHEN behavior = 'cart' THEN 1 ELSE 0 END) / SUM(CASE WHEN behavior = 'fav' THEN 1 ELSE 0 END) AS 加购物车收藏转化率,
SUM(CASE WHEN behavior = 'buy' THEN 1 ELSE 0 END) / SUM(CASE WHEN behavior = 'cart' THEN 1 ELSE 0 END) AS 购买加购转化率,
SUM(CASE WHEN behavior = 'buy' THEN 1 ELSE 0 END) / SUM(CASE WHEN behavior = 'pv' THEN 1 ELSE 0 END) AS 总体转化率
FROM
tbdata.user_action
WHERE
behavior IN ('pv', 'fav', 'cart', 'buy')
GROUP BY
time_date;
获得的结果如下:
数据应用到Tableau做仪表盘:
其中左侧为相对于浏览的各行为的转化百分比,右侧是各个行为相对于上一个行为的转化百分比。
分析原因:
1、收藏加购转化率高但购买浏览量转化率低:可能是由于用户在加入购物车前收藏了很多商品,但最终购买转化率低下,可能是由于价格、运费或者支付方式等因素影响了用户最终的购买决策。
2、购买收藏转化率较高:这个指标比较好,表明用户在收藏后最终购买的意愿较高,可能是由于收藏的商品在后续推荐中有更多曝光,或者收藏的商品符合用户的购买偏好。
解决方案:
1、对于购买浏览量转化率低而收藏加购转化率高的问题,可以分析用户在购买前的犹豫点,针对性地优化购买流程或者提供更多的购买诱因。
2、对于购买收藏转化率较高的情况,可以进一步推广收藏功能,增加用户收藏行为,以提高最终购买转化率。
3.2产品维度
3.2.1商品的销售规律
探索用户对商品的购买偏好:浏览量、成交量、加购量、成交率等指标,了解商品的销售规律:
SELECT
item_id,
COUNT(CASE WHEN behavior = 'pv' THEN 1 ELSE NULL END) AS 浏览量,
COUNT(CASE WHEN behavior = 'fav' THEN 1 ELSE NULL END) AS 加购量,
COUNT(CASE WHEN behavior = 'buy' THEN 1 ELSE NULL END) AS 成交量,
COUNT(CASE WHEN behavior = 'buy' THEN 1 ELSE NULL END) / COUNT(CASE WHEN behavior = 'pv' THEN 1 ELSE NULL END) AS 成交率,
FROM
tbdata.user_action
GROUP BY
item_id;
结果如下:
由于商品过多,选择浏览量前20的商品进行数据分析
如图分析:
- 浏览量较高成交率低:在浏览量较高的商品中,可能存在更多的竞争,因此成交率和加购率可能会受到影响。
- 浏览量较低但成交率较高:,能存在更强的购买意图。这些商品可能满足了某些特定需求,因此即使浏览量较低,但购买率较高。
- 购物车遗弃率高: 消费者可能会将商品添加到购物车中,然后继续在其他网站或商家处比较价格和优惠,最终选择了其他选项。
3.2.2用户价值分群(RFM模型)
RFM模型是一种常用的用户分析方法,用于将用户按照他们的消费行为进行分群,以识别高价值的用户群体。RFM代表了三个方面的指标:
- 最近一次购买时间(Recency):指用户最近一次购买商品或服务的时间间隔。通常情况下,距离上次购买时间越短的用户越有可能继续购买。
- 购买频率(Frequency):指用户在一段时间内购买商品或服务的次数。购买频率高的用户可能更加忠诚或活跃。
- 购买金额(Monetary):指用户在一段时间内的累计购买金额。购买金额高的用户可能是高价值客户。
R(时间间隔) | F(消费频率) | M(消费金额) | 分层结果 |
高 | 高 | 高 | 重要价值用户 |
高 | 低 | 高 | 重要发展用户 |
低 | 高 | 高 | 重要保持用户 |
低 | 低 | 高 | 重要挽留用户 |
高 | 高 | 低 | 一般价值用户 |
高 | 低 | 低 | 一般发展用户 |
低 | 高 | 低 | 一般保持用户 |
低 | 低 | 低 | 一般挽留用户 |
因为数据源里没有金额相关的信息,所以只通过R和F来对客户价值进行评分。
R:用户最近一次的购买时间到12月18日的时间差表示用户最近一次消费间隔
F:用户购买的次数表示用户消费频率
M:本次数据集未包含相关字段,故不考虑
建立打分规则
按价值打分 | 消费间隔R | 消费频率F | 客户类型 | |||
1 | 13天以上 | 0-5次 | 一般价值客户:最近消费时间远,购买频率低 | |||
2 | 9-13天 | 6-11次 | 重要发展用户:最近消费时间远,购买频率高 | |||
3 | 5-9天 | 12-17次 | 重要保持用户:最近消费时间近,购买频率低 | |||
4 | 0-4天 | 17次以上 | 重要价值用户:最近消费时间近,购买频率高 |
计算R、F值
SELECT
user_id,
CASE
WHEN DATEDIFF('2014-12-18', MAX(CASE WHEN behavior = 'buy' THEN time_date END)) >= 13 THEN 1
WHEN DATEDIFF('2014-12-18', MAX(CASE WHEN behavior = 'buy' THEN time_date END)) >= 9 THEN 2
WHEN DATEDIFF('2014-12-18', MAX(CASE WHEN behavior = 'buy' THEN time_date END)) >= 5 THEN 3
ELSE 4
END AS R_score,
CASE
WHEN COUNT(CASE WHEN behavior = 'buy' THEN 1 END) BETWEEN 0 AND 5 THEN 1
WHEN COUNT(CASE WHEN behavior = 'buy' THEN 1 END) BETWEEN 6 AND 11 THEN 2
WHEN COUNT(CASE WHEN behavior = 'buy' THEN 1 END) BETWEEN 12 AND 17 THEN 3
ELSE 4
END AS F_score
FROM
tbdata.user_action
GROUP BY
user_id;
得到:
接下来用这两项的每一项平均值作为判断高于还是低于,比如重要价值用户,必须是两项的分值都比平均值要高,才能作为重要价值的用户。
SELECT
user_id,
CASE
WHEN R_score < 2 AND F_score < 3 THEN '一般价值客户'
WHEN R_score < 2 AND F_score > 2 THEN '重要发展用户'
WHEN R_score > 1 AND F_score < 3 THEN '重要保持用户'
WHEN R_score > 1 AND F_score > 2 THEN '重要价值用户'
ELSE '未知类型'
END AS customer_type
FROM
tbdata.rmf;
进行计数:
数据分析:
- 一般价值客户:有1053个一般价值客户,这些客户的交易频率和交易金额都不是很高,他们偶尔购买产品或服务的用户。
- 重要发展用户:有217个重要发展用户,这些客户可能具有潜在的增长价值,因为他们的交易频率较高,但交易金额较低。通过针对他们的需求进行定向营销和促销活动,可能会激发他们的消费潜力。
- 重要保持用户:有3859个重要保持用户,。尽管他们的交易频率可能不是很高,但他们的交易金额可能相对较高。因此,维护这些客户的忠诚度非常重要,可以通过提供个性化的服务和优惠来确保他们继续选择你的产品或服务。
- 重要价值用户:有4870个重要价值用户,这些客户是最有价值的客户群体,他们的交易频率和交易金额都较高。因此,重点关注并满足这些客户的需求,以保持他们的忠诚度并促进长期的收入增长是非常重要的。