1、数据的简介:天池淘宝用户数据

2、数据导入和清洗

这次使用的SQL界面工具-SQL workbench

2.1 导入数据

create table userbehavior(
userID int,
itemID int,
categoryID int,
bahaviortype text,
timestamp int
);load data infile "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/UserBehavior.csv"
into table userbehavior
fields terminated by ','
lines terminated by '\n';

我们看一下这个数据大概的样子:

select * from userbehavior limit 10;

2.2 数据清洗

根据字段内容进行分析后,将UserID,ItemID,TimeStamp设置成联合主键,经验证,不存在数据重复。

select UserID,ItemID,TimeStamp from userbehavior
GROUP BY UserID,ItemID,TimeStamp having count(1)>1;

2.3 查看数据的缺失值

 select count(userID), count(itemID), count(categoryID), count(bahaviortype), count(timesstamp) from userbehavior;


这里数据实在太大,达到了100150807,为了快速的完成,这里只采用了500000

2.4 数据的时间处理

这里的数据是一个时间戳,我们需要将这个数据转换到我们日常常用的时间格式

create table usertest2(select * from userbehavior limit 500000
);
# 时间进行转换到日常格式
UPDATE usertest set datee = FROM_UNIXTIME(timesstamp,'%Y-%m-%d'), Timee = FROM_UNIXTIME(timesstamp,'%h');
#增加两个列
alter table userbehavior change Date datee date;
alter table userbehavior change Timee Timee varchar(10);

2.5 异常值处理

select max(datee), min(datee) from usertest;


这里的时间是2017-12-03年到2017-09-11的之间的数据

3、数据分析

3.1 这里先看一下用户行为的分布

create view user_p as
select userID, itemID,
sum(case when bahaviortype = 'pv' then 1 else 0 end) as click,
sum(case when bahaviortype = 'fav' then 1 else 0 end) as favor,
sum(case when bahaviortype = 'buy' then 1 else 0 end) as buy,
sum(case when bahaviortype = 'cart' then 1 else 0 end) as buycar from usertest group by userID,  itemID
;
SELECT * FROM day01.user_p;


这里是创建了一个视图,方便数据的简化和操作,关于视图的知识可以看下面两篇文章:
视图1:https://www.w3school.com.cn/sql/sql_view.asp
SQL视图的作用:https://blog.csdn.net/weixin_34037515/article/details/92609031

3.2 数据层级的漏斗转化(基于漏斗分析)

漏斗分析:详细介绍

# 分析每种情况下的转化率
create view user_p as
select userID, itemID,
sum(case when bahaviortype = 'pv' then 1 else 0 end) as click,
sum(case when bahaviortype = 'fav' then 1 else 0 end) as favor,
sum(case when bahaviortype = 'buy' then 1 else 0 end) as buy,
sum(case when bahaviortype = 'cart' then 1 else 0 end) as buycar from usertest group by userID,  itemID
;
#click量449357
select sum(click) from user_p;# 有buy量的行为的数目5066
select sum(buy) from user_p where click>0 and buy>0 and favor=0 and buycar=0;
# 有加buycar的行为数目 11956
select sum(buycar) from user_p where click>0 and buy=0 and favor=0 and buycar>0;
# 有favor行为的数目 4482
select sum(favor) from user_p where click>0 and buy=0 and favor>0 and buycar=0;# 有favor并且buy  443
select sum(buy) from user_p where click>0 and buy>0 and favor>0 and buycar=0;#有加buycar并且有buy行为  1467
select sum(buycar) from user_p where click>0 and buy>0 and favor=0 and buycar>0;# 有加购和favor的数目: 298
select sum(favor)+sum(buy) from user_p where click>0 and buy=0 and favor>0 and buycar>0;# 有加购和favor的数目: 145
select sum(favor)+sum(buy) from user_p where click>0 and buy>0 and favor>0 and buycar>0;


由此我们可以看出,从浏览量到直接购买转化率才1.01%,而浏览后有加购物车行为的购买转化率是12.27%,有收藏行为的转化率是9.88%,所以顾客有收藏或者加购物车的行为之后,这时候再购买的转化率达到了48.66%,说明会提升转化率,所以我们需要从产品交互界面、营销机制等方面让用户去多加购,多收藏。同时我们发现浏览后加购的转化率是12.27%,并且加购后到购买转化率为12.27%相比收藏后的转化率来说是更高的,所以引导加购行为更容易,效率更高。

当然我们也从中发现了一个巨大的问题,就是用户从点击量到下一层操作中,转化率都很低,说明出用户花了大量的时间去浏览商品,而真正下单的却很少,我们也都知道淘宝天猫的大部分用户都是女性,那女性逛街是非常厉害的,一下午甚至是一天,为什么呢?是因为女性往往购物不是买自己需要什么,而是自己喜欢什么,也就是所谓的闲着没事瞎逛,所以对于淘宝天猫这种购物平台,商品的推荐功能显得尤为重要,如果能够推荐用户喜欢的商品,那自然会下单,如果不喜欢也就只能是看看而已。

4.3 具体转化率原因的分析脑图

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

1、浏览量前20的商品类

select categoryID, count(categoryID) as clicknumber
from usertest where bahaviortype='pv'
group by categoryID order by clicknumber desc limit 20;


2、购买量前20的商品类

select categoryID, count(categoryID) as buynumber
from usertest where bahaviortype='buy'
group by categoryID order by buynumber desc limit 20;


我们将两者相同的商品ID查找出来:

我们发现前面曝光率比较高的商品,也出现在购买量比较多的列表当中,所以说明我们推荐系统展示的商品是和我们用户的需求相关的,20个商品种类中有6个商品是能够满足用户的需求的,当然,这里只有前20个的商品种类,数量不够有说服力,但是很说明问题

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

select * from
(select itemID, count(bahaviortype) as buynumber
from usertest where bahaviortype='buy' group by itemID
) as a where itemID in
(select itemID from (select *, count(categoryID) as clicknumber
from usertest where bahaviortype='pv'
group by categoryID order by clicknumber desc limit 20) t);


计算购买量前20的点击量

select * from
(select itemID, count(bahaviortype) as buynumber
from usertest where bahaviortype='pv' group by itemID
) as a where itemID in
(select itemID from (select *, count(categoryID) as buynumber
from usertest where bahaviortype='buy'
group by categoryID order by buynumber desc limit 20) t);


点击量前20的商品购买了基本只有一个购买量,我们反看购买量前20的商品,点击量基本都是在20一下,在点击量里面是比较少的,说明推荐系统确实是不给力,没有给用户推荐到想要购买的商品

4.4 结论

因此可以得出结论:推荐的商品顾客并不喜欢购买,由于高浏览量并没有带来购买,所以转化率低

同时我们还发现,商品3104240、1309498、1360115、2028325是商品购买量比较高的商品,所以可能需要提高这些商品的曝光率

总结:

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

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

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

5、基于RFM分析模型的用户分层分析

RFM模型:详细介绍

RFM是3个指标的缩写,最近一次消费时间间隔(Recency),消费频率(Frequency),消费金额(Monetary)。通过这3个指标对用户分类。
接下来就需要利用SQL语句,计算每个用户的最近一次消费时间间隔和消费频率,消费金额由于数据缺失,我就使用随机数生成一列用来代替价格。

alter table usertest add price float;
update usertest set price=ceil(rand()*199);
select * from usertest limit 10;


1、计算最近因此消费时间间隔(R)
R = 数据统计时间-用户最新消费时间
F = 用户购买次数总和
M=商品价格

我们查看一下最近的时间是什么时候?

select datee from usertest order by datee desc;


这里把数据集中最新的时间定为数据统计时间为2017-12-03时间

select userID, datediff('2017-12-03', max(datee))+1 as R, count(bahaviortype) as F, price
from usertest where bahaviortype = 'buy' group by userID;


我们先找到RFM的各个值的最大和最小值,然后给R和F以及价格的价值打分

select max(F) from
(select userID, datediff('2017-12-03', max(datee))+1 as R, count(bahaviortype) as F, price
from usertest where bahaviortype = 'buy' group by userID order by R desc) t;select min(F) from
(select userID, datediff('2017-12-03', max(datee))+1 as R, count(bahaviortype) as F, price
from usertest where bahaviortype = 'buy' group by userID order by R desc) t;select min(price) from
(select userID, datediff('2017-12-03', max(datee))+1 as R, count(bahaviortype) as F, price
from usertest where bahaviortype = 'buy' group by userID order by R desc) t;select max(price) from
(select userID, datediff('2017-12-03', max(datee))+1 as R, count(bahaviortype) as F, price
from usertest where bahaviortype = 'buy' group by userID order by R desc) t;select min(R) from
(select userID, datediff('2017-12-03', max(datee))+1 as R, count(bahaviortype) as F, price
from usertest where bahaviortype = 'buy' group by userID order by R desc) t;select max(R) from
(select userID, datediff('2017-12-03', max(datee))+1 as R, count(bahaviortype) as F, price
from usertest where bahaviortype = 'buy' group by userID order by R desc) t;


然后我们分别对这些数据进行打分,将分数新建字段,并将结果新建一个表,方面后面价值用户分析

create table RFM(
select *,
(
case when R <= 2 then 4 when R between 3 and 4 then 3when R between 5 and 7 then 2when R between 8 and 9 then 1 end
) as Rscore,
(
case when F >= 19 then 4when F between 13 and 18 then 3when F between 7 and 12 then 2when F between 1 and 6 then 1 end
) as Fscore,
(
case when M between 1 and 50 then 1when M between 51 and 100 then 2when M between 101 and 150 then 3when M between 151 and 199 then 4 end
) as Mscore
from
(select userID, datediff('2017-12-03', max(datee))+1 as R, count(bahaviortype) as F, price as M
from usertest where bahaviortype = 'buy' group by userID) t);


计算Rscore和Fscore以及Mscore的均值

select avg(Rscore), avg(Fscore), avg(Mscore) from rfm;



我们将高于均值的定位高,低于均值的定位低,所以,根据三个特征的高低不同排序,定位不同的价值用户

select classuser, count(userID) as peoplenumber from
(select userID,
(
case when Rscore>'3.0625' and Fscore > '1.0998' and Mscore > '2.4807' then '重要价值用户'when Rscore>'3.0625' and Fscore <= '1.0998' and Mscore > '2.4807' then '重要发展用户'when Rscore<='3.0625' and Fscore > '1.0998' and Mscore > '2.4807' then '重要保持用户'when Rscore<='3.0625' and Fscore <= '1.0998' and Mscore > '2.4807' then '重要挽留用户'when Rscore>'3.0625' and Fscore > '1.0998' and Mscore < '2.4807' then '一般价值用户'when Rscore>'3.0625' and Fscore <= '1.0998' and Mscore <= '2.4807' then '一般发展用户'when Rscore<='3.0625' and Fscore > '1.0998' and Mscore <= '2.4807' then '一般保持用户'when Rscore<='3.0625' and Fscore <= '1.0998' and Mscore <= '2.4807' then '一般挽留用户' end
) as classuser
from rfm) t group by classuser;

可以发现用户集中在重要挽留用户和一般挽留用户上,同时一般发展用户和重要发展用户也有很大的一个数量
  • 对于占比比较大的重要挽留用户上,最近的消费频率比较低和最近一次消费时间间隔比较长,应该想办法提高这些用户的消费,可以通过发放优惠券或或者是使用活动的优惠推送。
  • 对于一般挽留用户,尽可能的提高推荐系统的精准度,让这类用户增加浏览量,从而进一步提高的购买量,不过这类用户价值并不是很大,不宜花费太多的成本进行挽留。
  • 对于重要发展用户,最近的消费频率低,但是消费时间间隔比较近,我们需要重点关注,为什么这类重要的用户消费频率会低?是没有找到合适的商品还是其他原因,这个需要进一步的分析。

6、结论和建议

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

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

3.用户主要集中在重要发展用户和重要挽留用户,以及一般发展用户和一般挽留用户,四者加总占用户数的92%

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

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

  1. 淘宝的用户搜寻商品的时间段主要在下午6点至晚上11点,也就是大多数人下班后休息的时间。建议运营部门在这个时间段多策划一些营销活动,提高转换率。

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

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

在这个博文上面上进行了一些改进和修改,详细的分析可以查阅下面这篇博文。

参考博文:https://zhuanlan.zhihu.com/p/121530969

SQL项目实战练习:淘宝用户行为数据分析实战相关推荐

  1. Python项目实战 —— 04. 淘宝用户行为分析

    Python项目实战 Python项目实战--目录 Python项目实战 -- 04. 淘宝用户行为分析 一.背景 二.解题思路 三.数据分析 3.1 数据清洗 3.2 数据分析 3.2.1 用户整体 ...

  2. 数据分析实战之淘宝用户行为分析(3) -- 用户行为路径分析

    数据分析实战之淘宝用户行为分析(3) -- 用户行为路径分析 淘宝行为分析Tableau可视化展示 数据分析实战之淘宝用户行为分析(5) - 数据分析报告 数据分析实战之淘宝用户行为分析(4) - 用 ...

  3. 天池-淘宝用户行为数据分析(python+Tableau)

    天池-淘宝用户行为数据分析(python+Tableau) 一.背景 ​ 用户行为分析可以让产品更加详细.清楚地了解用户的行为习惯,从而找出网站.app.推广渠道等产品存在的问题,有助于产品发掘高转化 ...

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

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

  5. 数据分析项目实战1——淘宝用户购买行为分析(天池)

    一.分析背景.数据来源.数据解释 https://tianchi.aliyun.com/dataset/649 由于userbehavior数据集的数据量较大,本次分析使用Navicat将前10万条数 ...

  6. 案例:淘宝用户行为数据分析(SQL实现)

    一.项目介绍 本文针对淘宝APP的运营数据,使用阿里云天池上公开的数据集,以行业常见指标对用户行为进行分析,主要工具为MySQL,涉及分组汇总,引用变量,视图,关联查询等内容,可视化工具为excel和 ...

  7. 【数据分析实战】淘宝用户行为模式分析

    文章导览 目标定义 数据获取 数据抽样 探索性分析 数据清洗 用户行为分析 用户消费行为分析 漏斗分析 用户行为和商品种类分析 用户价值度RFM模型分析 1.目标定义 以淘宝APP2014年11月18 ...

  8. 大数据实战 --- 淘宝用户行为数据分析

    目录 开发环境 数据描述 功能需求 数据准备 数据清洗 用户行为分析 找出有价值的用户 开发环境 Hadoop+Hive+Spark+HBase 启动Hadoop:start-all.sh 启动zoo ...

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

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

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

    文章目录 1. 数据概述 2. 分析思路 提出问题 提出假设 数据分析 3. 数据预处理 选择子集 补全表格 删除重复值 处理缺失值 处理日期时间(数据一致性) 异常值处理 表格预览 4. 数据分析 ...

最新文章

  1. DIV层跟随鼠标位置显示提示
  2. ABP虚拟文件系统(VirtualFileSystem)实例------定制菜单栏显示用户姓名
  3. qt 加载rtsp流_qt_ffmpeg_rtsp 在QT中拉取RTSP视频流并用FFMPEG解码播放 - 下载 - 搜珍网...
  4. HDU 6168 Numbers 思维
  5. study notes for python
  6. MySQL常用函数系列之九:日期和时间函数 函数(4)
  7. linux用于开发qt java_Linux下Qt程序的打包发布
  8. 第1章:认识Java
  9. atitit 数字音频技术概论 艾提拉著 目录 1. 声学基础 2 1.1. 1.2人耳的听觉效应9 2 2. 第1章数字音频基础 2 2.1. 1.1音频的发展历史 2 2.2. 1.2音频的发展
  10. PDMS Pipeline Tool 教程(二):通用功能
  11. 14种神笔记方法,只需选择1招,让你的学习和工作效率提高100倍!
  12. JavaScript 图片转文字,文字转语音
  13. 论文相关------如何在论文写作中使用拉丁文简写
  14. 怎样快速提高计算机能力,如何提高算术能力?不借助计算机、笔、纸等工具,怎么能快速心算出多位数计算结果?如:489x85 如:128965-98542有什么口决及速算的方法的详细步骤?...
  15. 超详细图文教程·阿里云免费学生ECS云服务器领取并使用全过程(部署Python多人聊天室程序)
  16. 一些相似单词的区别之处
  17. dede在添加文章页增加附件上传后点击浏览找不到文件提示No Exsits Path解决
  18. C笔记05-选择顺序结构,关系与相等,优先级和结合性
  19. 第八十三章 Caché 函数大全 $ZDATE 函数
  20. SCI、EI论文框架

热门文章

  1. python 调用 C++ 函数
  2. .xmind用什么软件打开_xps用什么软件打开(xps文件打开方法)
  3. vue+i18n 切换语言后无法刷新数据 的 解决方案
  4. 【专题5:硬件设计】 之 【50.运算放大器详解b - 负反馈电路、正反馈电路和共模干扰】
  5. 联想电脑预装office自动卸载工具
  6. 翻译 Learning Unsupervised Video Object Segmentation through Visual Attention
  7. 【python包】NumPy-快速处理数据2
  8. 【STM32f401学习之路-00】搭建工程环境
  9. 医脉神剑之超声成像基础原理(转)
  10. 游戏后台管理模块开发流水账