0


“天池”淘宝用户消费行为分析——sql

文章目录

0 项目背景

练手项目: 当今电商行业的运营模式需要针对用户的喜好程度或用户习惯进行相应的策略性改变,而策略的来源则是通过对用户的显式反馈或是隐式反馈进行用户行为分析,进一步为用户提供个性化、差异化的的服务,最终达到营收率提升的目的。

1 项目明细

1.1 数据的来源及明细

UserBehavior是阿里巴巴提供的一个淘宝用户行为数据集。数据来源请戳
在这里插入图片描述
UserBehavior.csv
本数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。数据集的组织形式和MovieLens-20M类似,即数据集的每一行表示一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔。关于数据集中每一列的详细描述如下:
数据集的详细描述
注意到,用户行为类型共有四种,它们分别是:
用户行为的四种类型
关于数据集大小的一些说明如下:
数据集的大小说明

1.2 项目目的

选取1000000(100w)个隐式反馈数据集中找到用户行为的一些“规律”。并通过这些“规律”进行漏斗模型,RFM模型分析得到对用户有针对性的电商营销方式。

1.3 项目思路

研究思路

2、数据预处理

此次项目使用的是 Navicat Premium数据库管理工具连接Mysql 8.0,进行对UserBehavior.csv 数据集的处理

2.1 数据导入

方法一:在Navicat里面根据指示直接导入数据表,点这里~

方法二:代码导入

# 创建一个表userbehaviour用来存放数据,数据类型根据官方文档设置createtable userbehaviour(
userID int,
itemID int,
categoryID int,
bahaviortype text,timestampint);# 写入文件路径loaddatainfile"D:\tianchi\UserBehavior.csv"intotable userbehavior
fieldsterminatedby','linesterminatedby'\n';

导入csv文件数据执行提示错误(ERROR 1290),如果你也出现这个问题,这里贴上解决方案噢(通俗易懂)

数据量太大,这里只截取前100w的数据用作分析啦:

# 查看前10行数据SELECT*FROM`userbehaviour`limit10;# 查看数据集的大小SELECTcount(DISTINCT u.userID )'用户数量',count( u.itemID )'商品数量',count( u.categoryID )'商品类目数量',count( u.behaviour )'所有行为数量'FROM
    userbehaviour u;

查看数据集

2.2 数据预处理

数据查重及处理

# 展示重复数据SELECT*FROM userbehaviour as u
WHERE(u.userID,u.itemID,u.categoryID,u.behaviour,u.TIMESTAMP)IN(SELECT*FROM userbehaviour 
GROUPBY userID,itemID,categoryID,behaviour,TIMESTAMPHAVINGcount(*)>1);# 数据量过大,要运行很久

缺失值查找与处理

# 查看数据的缺失值SELECTcount( userID ),count( itemID ),count( categoryID ),count( behaviour ),count(TIMESTAMP)FROM
    userbehaviour;

查找缺失值
没有缺失值,太好了 ^ _ ^

2.3 日期与时间格式化
# 时间格式转化# 添加日期date | 时间hour 字段ALTERTABLE userbehaviour 
ADDhourVARCHAR(2),ADDdateVARCHAR(10);# 往字段date、hour中导入数据,调整time时间戳格式UPDATE userbehaviour setdate= FROM_UNIXTIME(TIMESTAMP,"%Y-%m-%d");UPDATE userbehaviour sethour= FROM_UNIXTIME(TIMESTAMP,"%H");

函数:FROM_UNIXTIME
作用:将MYSQL中以INT(11)存储的时间以"YYYY-MM-DD"格式来显示。
语法:FROM_UNIXTIME(unix_timestamp,format)函数,具体戳这~

# 修改TIMESTAMP字段的存储空间ALTERTABLE userbehaviour
MODIFYCOLUMNTIMESTAMPVARCHAR(255);# 转变时间戳的格式UPDATE userbehaviour setTIMESTAMP= FROM_UNIXTIME(TIMESTAMP);UPDATE userbehaviour setTIMESTAMP= SUBSTRING_INDEX(TIMESTAMP,'.',1);

修改后:
修改时间戳后
SUBSTRING_INDEX( ) 函数的使用,戳这~

2.4 删除异常值
# 查看日期的最大值与最小值,看是否有异常值selectmax(date),min(date)from userbehaviour;

查看结果
没有异常值哈哈,如果有异常值,可以通过执行以下代码删除异常值噢

# 筛选出日期在2017年11月25日 ——— 2017年12月3日之外的数据SELECTcount(*)FROM
userbehaviour
WHEREdate<'2017-11-25'ordate>'2017-12-03';# 剔除不在日期区间的数据DELETEFROM userbehaviour
WHEREdate<'2017-11-25'ORdate>'2017-12-03';

经过预处理后,数据集还剩…

#查看还剩多少SELECTcount(DISTINCT u.userID )'用户数量',count( u.itemID )'商品数量',count( u.categoryID )'商品类目数量',count( u.behaviour )'所有行为数量'FROM
    userbehaviour u;

预处理后
//是的,经过预处理后数据量没有变…因为,源数据已经很干净了T_T(偷笑),当作练习啦!

3、数据分析

数据预处理终于搞定了!!接下来我们进入正式的分析吧!

3.1 数据整体情况
# 总体UV(Unique visitor)、PV(Page View)、人均浏览数、成交量SELECTcount(DISTINCT userID )'UV 独立访客量',SUM(CASEWHEN behaviour ='pv'THEN1ELSE0END)'PV 页面浏览量',SUM(CASEWHEN behaviour ='pv'THEN1ELSE0END)/count(DISTINCT userID )'PV 人均浏览量',SUM(CASEWHEN behaviour ='buy'THEN1ELSE0END)'BY成交量'FROM
    userbehaviour;

总体
总体UV、PV、人均浏览次数、成交量

# 日均UV(Unique visitor)、PV(Page View)、人均浏览数、成交量SELECTdate,count(DISTINCT userID )'UV 独立访客量',SUM(CASEWHEN behaviour ='pv'THEN1ELSE0END)'PV 页面浏览量',SUM(CASEWHEN behaviour ='pv'THEN1ELSE0END)/count(DISTINCT userID )'PV 人均浏览量',SUM(CASEWHEN behaviour ='buy'THEN1ELSE0END)'BY成交量'FROM
    userbehaviour 
GROUPBYdate;

日均

日均UV、PV、人均浏览次数、成交量

3.2 用户行为转化
# 总用户行为转化# 漏斗模型SELECT
    behaviour '行为类型',count(*)'行为数量'FROM
    userbehaviour 
GROUPBY
    behaviour 
ORDERBY
    行为数量 DESC;

总用户行为漏斗
在这里插入图片描述
总用户行为漏斗图,浏览行为转化为加购、收藏、购买的转化率逐级降低。

计算转化率:

# 分析每种情况下的转化率CREATEVIEW user_p ASSELECT userID,itemID,sum(CASEWHEN behaviour ='pv'THEN1ELSE0END)AS click,sum(CASEWHEN behaviour ='fav'THEN1ELSE0END)AS favor,sum(CASEWHEN behaviour ='buy'THEN1ELSE0END)AS buy,sum(CASEWHEN behaviour ='cart'THEN1ELSE0END)AS buycar
FROM
    userbehaviour 
GROUPBY
    userID,
    itemID;

下面我就不贴运行结果图啦,直接将得出的结果写在备注了。

# 总的点击(浏览)量 : 896106SELECTsum(click) 点击量 FROM user_p;# 有浏览+购买的数量 :9845SELECTsum( buy )'浏览+购买'FROM user_p 
WHERE
    click >0AND buy >0AND favor =0AND buycar =0;# 有浏览+加购的数量 : 23999SELECTsum( buycar )'浏览+加购'FROM user_p 
WHERE
    click >0AND buy =0AND favor =0AND buycar >0;# 有浏览+收藏的数量 : 9973SELECTsum( favor )'浏览+收藏'FROM user_p 
WHERE
    click >0AND buy =0AND favor >0AND buycar =0;# 有浏览+流失的数量 : 789133SELECTsum( click )'浏览+流失'FROM user_p 
WHERE
    click >0AND buy =0AND favor =0AND buycar =0;# 有浏览+加购+购买的数量 : 2876SELECTsum( buy )'浏览+加购+购买'FROM user_p 
WHERE
    click >0AND buy >0AND favor =0AND buycar >0;# 有浏览+收藏+购买的数量 : 942SELECTsum( buy )'浏览+收藏+购买'FROM user_p 
WHERE
    click >0AND buy >0AND favor >0AND buycar =0;# 有浏览+加购+收藏的数量 : 678SELECTsum( favor )+sum( buy )FROM user_p 
WHERE
    click >0AND buy =0AND favor >0AND buycar >0;# 有浏览+加购+收藏+购买的数量 : 289SELECTsum( favor )+sum( buy )'浏览+加购+收藏+购买'FROM user_p 
WHERE
    click >0AND buy >0AND favor >0AND buycar >0;

总点击(浏览)量:896106
转换类型转换量转换率浏览–>加购239992.68%浏览–>收藏99731.11%浏览–>购买98451.10%浏览–>流失78913388.06%
浏览+加购 :23999
转换类型转换量转换率浏览+加购–>购买287611.98%
浏览+收藏 :9973
转换类型转换量转换率浏览+收藏–>购买9429.44%
浏览+收藏+加购 :678
转换类型转换量转换率浏览+收藏+加购–>购买28942.63%
从以上结果说明:

1、用户从浏览到购买的转化率只有1.10%
2、用户从浏览后加入购物车再购买的转化率有9.44%
3、用户从浏览后收藏再购买的转化率有11.98%
4、用户从浏览后加入购物车和收藏再购买的转化率高达42.63%
5、用户浏览页面后什么也没干即用户流失率有88.06%

进一步分析:
1、从用户浏览后加购以及收藏的行为后转化率提升了约10倍,以及同时有收藏加购行为的转化率更是直接提升了高达42倍可以看出,加购或收藏以及加购收藏的行为会提升交易成交量。因此我们可以从产品的交互界面、营销机制等方面提高用户收藏、加购的行为,进而提升交易量。
2、用户的流失率太高,有88.06%。即用户花了很多时间去浏览商品,却没有加购、收藏、购买的行为。猜测可能是推荐的商品并不符合用户的需求。因为如果推荐的商品是用户喜欢的,自然会下单。因此我们做一个假设检验,看看是否是推荐系统的“锅”。

提出假设: 推荐系统不给力,推荐的商品不是用户想要的

分析思路: 通过查看点击(浏览)量前20的商品ID以及购买量前20的商品ID,看重复值的概率有多大(即查看浏览量多的是不是下单多的,如果是,说明推荐的是用户需要的,如果不是,说明推荐系统不给力)

1、点击(浏览)量前20的商品类别

# 浏览点击量前20的商品ID及点击次数CREATEVIEW click ASSELECT categoryID,count( categoryID )AS 点击量 
FROM userbehaviour 
WHERE behaviour ='pv'GROUPBY categoryID 
ORDERBY
    点击量 DESCLIMIT20;

点击量前20的商品类别ID及点击次数
2、购买量前20的商品类别

# 购买量前20的商品类别ID及购买量CREATEVIEW buy ASSELECT categoryID,count( categoryID )AS 购买量 
FROM userbehaviour 
WHERE behaviour ='buy'GROUPBY categoryID 
ORDERBY
    购买量 DESCLIMIT20;

购买量前20的商品类别ID及购买量
3、查看点击量前20的商品类别ID与购买量前20的商品类别ID的重复值

# 查看点击量前20的商品类别ID 以及购买量前20的商品类别ID 是相同的商品类别IDSELECT buy.categoryID
FROM buy JOIN click ON click.categoryID = buy.categoryID;

点击量前20的商品类别ID与购买量前20的商品类别ID的重复值
很明显,我们似乎错怪了推荐系统!购买量前20的商品类别中有12种商品都是点击量前20里面的,说明我们推荐系统展示的商品是和我们用户的需求相关的
(不要怀疑淘宝的推荐系统了,不然我怎么每次打开淘宝推荐的都是我想要的,然后疯狂“剁手”…T^T)
番外: 那是不是商家砸多点钱提升产品的曝光率,他们的商品就会卖得越好呢!?(兴奋)
(思考状…应该不是绝对的。你曝光的再多不是我要的我也不会点?

4、既然点击量和购买量前20的商品类别有如此高的重合性,还会是什么原因导致用户流失率这么高呢?

接下来我们对每个商品进行细分,看下曝光的具体商品和购买的商品是否有相关性

4.1 计算点击量前10的商品的购买量

# 浏览量前10的商品CREATEVIEW dianji ASSELECT itemID,count( itemID ) 点击次数 
FROM userbehaviour 
WHERE behaviour ='pv'GROUPBY itemID 
ORDERBY
    点击次数 DESCLIMIT10;# 计算点击量前10的商品的购买量select*from(SELECT itemID,count(behaviour)as 购买量
from userbehaviour
where behaviour ='buy'groupby itemID )as a
where itemID in(SELECT itemID FROM dianji);

点击量前10的商品的购买量
4.2 计算购买量前10的商品的点击量

# 购买量前10的商品CREATEVIEW goumai ASSELECT itemID,count( itemID ) 购买次数 
FROM userbehaviour 
WHERE behaviour ='buy'GROUPBY itemID 
ORDERBY
    购买次数 DESCLIMIT10;# 计算购买量前10的商品的点击量select*from(SELECT itemID,count(behaviour)as 点击量
from userbehaviour
where behaviour ='pv'groupby itemID )as a
where itemID in(SELECT itemID FROM goumai);

购买量前10的商品的点击量
4.3 查看点击量前10与购买量前100的商品ID 是否有重复值

# 查看点击量前10与购买量前100的商品ID 是否有重复值SELECT goumai.itemID
FROM goumai JOIN dianji ON goumai.itemID = dianji.itemID;

点击量前10与购买量前100的商品ID 是否有重复值
分析:
1、浏览量Top10的商品的购买量很少,有些甚至没有。也就是说,平台给与的流量顾客的点击是高的,但是产品所产生的销售没有。由于电商业务是以销售为导向的,所以这些商品并不适合冲量销售,不应当给予过多的流量支持。
2、反观购买量这边,浏览量都是比较低的,并且和前面浏览量TOP10里没有一个重复的商品ID,也就是说高浏览和高购买是两类不同的商品。

4.4 结论
1、推荐的商品顾客并不喜欢购买,由于高浏览量并没有带来购买,所以转化率低。
2、我们发现3122135、3237415、2124040这三类商品购买量比较高,在高需求量的基础上我们考虑淘宝调整推送机制,增加对这几类商品的推送,以满足用户需求。

4.5 对措
1.优化推荐机制,把更多流量给到顾客愿意购买的商品

2.通过更好的商品推荐,页面交互,积分会员等功能等降低流失率

3.引导加购,可以加强营销机制引导顾客加购,比如加购物车联系客服领优惠券

3.3 用户复购率和跳失率

1、复购率

# 复购率SELECTSUM(casewhen buy_amount >1THEN1ELSE0END)'复购人数',COUNT(userID)'已购人数',SUM(casewhen buy_amount >1THEN1ELSE0END)/COUNT(userID)'复购率'FROM(SELECT userID,count(behaviour) buy_amount
FROM userbehaviour
WHERE behaviour ='buy'GROUPBY userID)as a;

复购率
复购率在0.6621,淘宝用户粘性较高

2、跳失人数

# 跳失人数SELECTcount(*)'跳失人数'FROM userbehaviour
GROUPBY userID
HAVINGcount(behaviour)=1;

跳失人数
跳失人数为0,用户对于淘宝的体验普遍很好

3.4 用户时间习惯
3.4.1 日期维度用户行为习惯
# 用户时间习惯# 日期维度分析用户行为SELECTdate,count(DISTINCT userID)'用户数',SUM(casewhen behaviour ='pv'then1else0end)'浏览数',SUM(casewhen behaviour ='cart'then1else0end)'加购数',SUM(casewhen behaviour ='fav'then1else0end)'收藏数',SUM(casewhen behaviour ='buy'then1else0end)'成交数'FROM userbehaviour
GROUPBYdateORDERBYdate;

日期维度用户行为分析
日期维度用户习惯
11月25日、11月26日和12月2日、12月3日分别都为周六、日,从图中可以看出周末期间和工作日期间用户活跃度没有太大起伏,对于12月2日和12月3日的猜想:
双12活动的预热引起了用户活跃度的上升

3.4.2 时间维度用户行为习惯

提出假设: 用户在一天中晚上休息时间点击量会上升

# 时间维度分析用户行为SELECThour,count(DISTINCT userID)'用户数',SUM(casewhen behaviour ='pv'then1else0end)'浏览数',SUM(casewhen behaviour ='cart'then1else0end)'加购数',SUM(casewhen behaviour ='fav'then1else0end)'收藏数',SUM(casewhen behaviour ='buy'then1else0end)'成交数'FROM userbehaviour
GROUPBYhourORDERBYhour;

时间维度分析用户行为
一天内用户行为分布
4时-10时 活跃度上升至稳定值
10时-19时 活跃度趋于稳定
19时-23时 活跃度上升至最高值(重点)
23时-次日4时 活跃度都呈下降趋势直至最小值(注意点)
用户的活跃度还是跟日常生活作息规律息息相关的

3.5 用户商品偏好类别
# 用户商品偏好类# 浏览行TOP25SELECT itemID '商品ID',count(behaviour)'浏览次数',ROW_NUMBER()over(ORDERBYcount(behaviour)DESC)'排名'from userbehaviour
WHERE behaviour ='pv'GROUPBY itemID
ORDERBYcount(behaviour)DESCLIMIT25;# 购买行TOP25SELECT itemID '商品ID',count(behaviour)'浏览次数',ROW_NUMBER()over(ORDERBYcount(behaviour)DESC)'排名'from userbehaviour
WHERE behaviour ='buy'GROUPBY itemID
ORDERBYcount(behaviour)DESCLIMIT25;# 加购行TOP25SELECT itemID '商品ID',count(behaviour)'浏览次数',ROW_NUMBER()over(ORDERBYcount(behaviour)DESC)'排名'from userbehaviour
WHERE behaviour ='cart'GROUPBY itemID
ORDERBYcount(behaviour)DESCLIMIT25;# 收藏行TOP25SELECT itemID '商品ID',count(behaviour)'浏览次数',ROW_NUMBER()over(ORDERBYcount(behaviour)DESC)'排名'from userbehaviour
WHERE behaviour ='fav'GROUPBY itemID
ORDERBYcount(behaviour)DESCLIMIT25;

商品浏览
商品浏览TOP25
在这里插入图片描述
商品加购TOP25
商品收藏
商品收藏TOP25
商品购买
商品购买TOP25

3.6 用户价值层度

RFM 模型介绍:RFM是3个指标的缩写,最近一次消费时间间隔(Recency),消费频率(Frequency),消费金额(Monetary)。通过这3个指标对用户分类。详细介绍

由于源数据并没有设计金额量的维度,所以此处无法对M维度进行具体分析,由此针对RF维度对用户行为进行分析

3.6.1 R维度评分
# R 维度评分# 创建R维度视图CREATEVIEW r_value ASSELECT userID,min(gap) R 
from(SELECT userID,DATEDIFF('2017-12-04',date) gap
FROM userbehaviour
WHERE behaviour ='buy')as a 
GROUPBY userID;# 进行R维度打分SELECT userID '用户ID',R '最近消费时间间隔',(casewhen R BETWEEN0and2then3WHEN R BETWEEN3and5then2ELSE1END)as'R维度评分'FROM r_value;

DATEDIFF()函数的用法,戳这~
R维度评分
R维度评分占比饼图:
R维度评分占比饼图

3.6.2 F维度评分
# F维度分析# 创建F维度视图CREATEVIEW f_value ASSELECT userID,count(behaviour)as F
FROM userbehaviour
WHERE behaviour ='buy'GROUPBY userID;# 进行F维度打分SELECT userID,F,(casewhen F BETWEEN1and9then1WHEN F BETWEEN10AND19THEN2WHEN F BETWEEN20AND29THEN3WHEN F BETWEEN30AND39THEN4WHEN F BETWEEN40AND49THEN5WHEN F BETWEEN50AND59THEN6ELSE7END)'F维度评分'FROM f_value;

F维度评分
F维度评分占比饼图:
F维度评分占比

3.6.3 RF 维度综合评分进行用户价值分层
# RF综合打分视图# 进行R维度打分CREATEVIEW r_score ASSELECT userID ,R ,(casewhen R BETWEEN0and2then3WHEN R BETWEEN3and5then2ELSE1END)as R_Score
FROM r_value;# 进行F维度打分CREATEVIEW f_score ASSELECT userID,F,(casewhen F BETWEEN1and9then1WHEN F BETWEEN10AND19THEN2WHEN F BETWEEN20AND29THEN3WHEN F BETWEEN30AND39THEN4WHEN F BETWEEN40AND49THEN5WHEN F BETWEEN50AND59THEN6ELSE7END) F_Score
FROM f_value;# RF综合打分CREATEVIEW rf_score ASSELECT a.userID '用户ID',a.R_Score 'R维度评分',b.F_Score 'F维度评分', a.R_Score + b.F_Score 'RF维度综合评分'FROM r_score a JOIN f_score b ON a.userID = b.userID;

RF维度综合用户评分:

# RF维度综合用户评分SELECT(CASEwhen RF维度综合评分 BETWEEN2AND3then'易流失用户'when RF维度综合评分 BETWEEN4AND5then'挽留用户'when RF维度综合评分 BETWEEN6AND7then'发展用户'ELSE'忠诚用户'END)'用户分层',count(*)'用户数量'FROM rf_score
GROUPBY 用户分层;

RF维度综合用户评分
用户分层
分析:
1、将R维度评分+F维度评分=RF综合评分的指标,
客户分类评分易流失用户2-3分挽留用户4-5分发展用户6-7分忠诚用户7分以上
2、大部分用户集中在易流失用户和挽留用户上
对措:
客户分类表现措施易流失用户消费时间距离近,消费频率低提高消费频率挽留用户消费时间距离远,消费频率低联系用户,调查挽回发展用户消费时间距离远,消费频率高邮箱推送,app提醒,促销忠诚用户消费时间距离近,消费频率高提高vip服务

4、结论及应对方法

结论:
1、 流量高的商品并不是购买量高的商品,高流量的商品购买量低导致了整体的流量转化率低,也就是推荐展示的逻辑并没有以销售为导向。

2、从用户行为路径中发现,用户浏览后直接购买的转化率较低,而通过加购,收藏等行为后购买的转化率会提升,故需要引导顾客积极加购或者收藏,且对比转化率后发现加购物车所带来的转化是最好的。

3、用户主要集中在易流失用户和挽留用户,两者加总占用户数的99.61%

建议:
1、建议算法部门优先展示购买量TOP10的商品类给顾客,例如3122135、3237415、2124040等,如果说浏览量高的商品是新品或者近期主推的商品,是否可以考虑和TOP10购买的商品按照类目合理搭配销售,提升转化率和连带率。

2、需积极引导顾客加购物车或者收藏宝贝,对于界面设计部门是考虑如何交互能够让顾客更愿意点击,对于运营部门,可以设置机制引导,例如加购联系客服送5元无门槛优惠券,加购送小样赠品等的机制来引导。

3、淘宝的用户搜寻商品的时间段主要在下午6点至晚上11点,也就是大多数人下班后休息的时间。建议运营部门在这个时间段多策划一些营销活动,提高转换率,比如商家可以进行直播带货。

4、对于重要发展用户,其消费频率低,但最近消费距离现在时间较短,因此要想办法提高他的消费频率,通过CRM的红包发放、会员权益奖励、短信提醒优惠等方式提升消费频率。

5、对于重要挽留用户,最近消费时间距离现在较远、消费频率低。这种用户有即将流失的危险。建议通过APP推送、短信和邮件等形式发放有偿问卷主动联系用户,调查清楚哪里出了问题,制定相应的挽回策略。

参考博文:[1]https://blog.csdn.net/Kobe123brant/article/details/116863804
[2]https://blog.csdn.net/weixin_40244969/article/details/109908414
[3]https://zhuanlan.zhihu.com/p/121530969


本文转载自: https://blog.csdn.net/weixin_46951551/article/details/123296751
版权归原作者 Limei. 所有, 如有侵权,请联系我们删除。

“&ldquo;天池&rdquo;淘宝用户消费行为分析&mdash;&mdash;sql”的评论:

还没有评论