淘宝用户行为分析

您所在的位置:网站首页 淘宝用户行为数据分析sql 淘宝用户行为分析

淘宝用户行为分析

2023-06-17 10:57| 来源: 网络整理| 查看: 265

淘宝用户行为分析 一、项目背景

随着电商行业的发展度过红利期,新客获取的流量成本居高不下,对消费品牌的直接影响则是销售贡献中增量的减少。为了弥补乏力的增长,各个品牌越来越重视对存量人群进行精细化运营,因为与获取新客相比,对存量老客的运营维护成本更低,反而能带来更高的转化率。

二、数据说明 2.1数据来源

本次使用的用户行为数据集由阿里云-天池提供。

https://tianchi.aliyun.com/dataset/dataDetail?dataId=649

2.2字段说明

所提供数据来自阿里巴巴真实业务数据, 是2017年11月25日至2017年12月3日之间用户行为数据,由于原数据较大(100万),在此只导入前10万条数据进行分析。

此数据集中已有的字段及behavior_type值域说明如下:

三、分析思路 3.1分析目标

基于对淘宝用户行为数据的挖掘,形成数据结论后,输出一套能提高运营效率的策略建议赋能业务增长。

3.2分析思路

项目整体的分析思路:明确问题-分析原因-落地建议。

【明确问题】:通过对整体数据的分析,透视业务现状,并结合分析框架明确业务问题;

【分析原因】:把复杂的业务问题通过多维度分析方法拆解成多个小问题,并选择合适的分析方法、分析模型逐一对问题进行分析

【落地建议】:分析得到的数据结论,需要结合业务场景,转成可落地执行的策略建议,帮助赋能业务增长

四、数据清洗 4.1选择子集

现有的5个字段都有用途,故选择所有子集。

4.2列名均明确易懂,不需要重命名。 4.3删除重复项

– 查找是否存在重复数据并删除

– 新建行id

alter table userbehavior add id int primary key auto_increment

– 找到重复id并删除重复行记录

delete from userbehavior where id in (select id from (select id,user_id,item_id,time_stamp, row_number()over(partition by user_id,item_id,time_stamp)'重复值' from userbehavior) as temp where 重复值>1) 4.4缺失值处理

查找是否存在缺失值

select * from userbehavior where user_id is null or category_id is null or item_id is null or time_stamp is null

数据显示无缺失值。

4.5一致化处理、数据排序、异常值处理

(1)时间戳的处理

为了方便后文更复杂的日期分析,这里用函数FROM_UNIXTIME(时间戳,时间格式) 将时间戳转为不同格式的时间。

alter table userbehavior add dates varchar(255); update userbehavior set dates = FROM_UNIXTIME(time_stamp,'%Y-%m-%d'); alter table userbehavior add hours varchar(255); update userbehavior set hours = from_unixtime(time_stamp,'%H'); alter table userbehavior add datetime varchar(255); update userbehavior set datetime = FROM_UNIXTIME(time_stamp,'%Y-%m-%d %H:%i:%s'); alter table userbehavioradd weekday varchar(255); update userbehavior set weekday = weekday(datetime)+1;

(2)剔除超出时间范围的数据

有了日期字段后,就可以直接将超出指定时间范围的数据剔除掉。

delete from userbehavior where dates'2021-12-03'

至此,已完成数据清洗工作,剩余的数据便是可以直接用来分析的“纯净”数据。

五、明确问题

此部分要求对业务有个整体的认识,在本案例中,主旨是进行用户行为分析,所以要知道总共有多少会员、他们分布情况如何等。

5.1会员总数 SELECT COUNT(DISTINCT user_id) '会员数' FROM userbehavior

根据统计结果可以知道,出现有业务中,共有983名会员在2017年11月25日-12月3日期间发生了动作。

5.2 AIPL漏斗分析

知道整体有多少会员后,接下来要进一步对他们的行为进行观察,因为分析的是淘宝行为,在电商领域比较常用的方法是AIPL营销模型:

A - Awareness 认知:浏览

I - Interested 兴趣:收藏、加购

P - Purchase 购买:购买

L - Loyalty 忠诚:复购

为了方便进行复杂分析,需要对表结构进行【行列互换】,此操作通过【创建视图】来完成:

CREATE VIEW behavior AS SELECT user_id, datetime, dates, hours, max(CASE behavior_type when 'pv' then 1 else 0 end) ' view ', max(CASE behavior_type when 'fav' then 1 else 0 end) 'favor', max(CASE behavior_type when 'cart' then 1 else 0 end) 'cart', max(CASE behavior_type when 'buy' then 1 else 0 end) 'buy' FROM userbehavior GROUP BY user_id, datetime; ------------------------------------ select * from behavior 5.2.1 AIP计算 SELECT SUM(view) 'A', SUM(favor)+SUM(cart) 'I', SUM(buy) 'P' FROM behavior 5.2.2 L计算

A. 第N次消费计算 通过dense_rank() 窗口函数对会员按每次消费时间进行排序,即可得到每个会员的第n次消费,将字段命名为 n_consume;并用查询语句新建视图consume

CREATE view consume as select user_id,datetime,buy, dense_rank()over(partition by user_id ORDER BY datetime)as 'n_consume' from behavior where buy =1 ORDER BY user_id,datetime

B. 统计L行为 从consume提取复购的次数,即 n_consume 大于1的行为都算进L中,计算结果如图:

select sum(buy)'L' from consume where n_consume>1

根据以上分析结果,可以计算出每个环节的转换率:

A→I:9%;I→P:23%;P→L:64%

5.3整体分析

整体分析的目的是为了找出用户运营存在的问题或特点,进而提出分析目标,并以此作为接下来进一步分析的目标。

在整体分析到明确问题的过程中,需要有【象限思维】,即按轻重缓急列出问题的重要性排序。这样才能有序地分析,业务才能在有限资源的条件下选择分析结论进行落地实践。

【拉新环节 A→I】 部分做得较差,可能拉新完成率较低。将该问题列为优先级:重要紧急 P0

【收割之客户复购 P→L】 部分做得很好,可以据此总结业务经验或复购规律,进一步推广应用。将该事项列为优先级:重要不紧急 P1

【收割之客户首购 I→P 】部分效果还可以,可以进一步挖掘用户购买转化路径。将该事项列为优先级:不重要不紧急 P2

六、分析原因 6.1分析思路

【P0: A→I 】部分是转化率低的问题,在零售行业中,【人货场】分析是最常用且有效的分析方法,故此案例也将应用该方法进行分析;

【P1: P→L】部分是用户复购表现很好,可以通过【用户复购分析】,挖掘、总结复购特征;

【P2: I→P】部分目的在与进一步透析用户购买行为,可以通过【购买率特征分析】和【RFM模型】进行分析。

6.2【人货场】分析

【P0: A→I 】部分:通过【人货场】分析,解决A认知用户到I兴趣用户行为转化率低的问题。

6.2.1人

【人】的部分主要在于观察用户行为特点,以总结经验。

因为数据维度有限,会员自身行为相关的数据除了商品外就是时间,而商品计划在【货】部分进行分析,故此部分旨在分析用户A到I高效转化的时间特征。

各时段AI转化分布,结合group by 语句,即可计算各时段AI转化情况。

select A.hours,A浏览行为,I兴趣行为, concat(round((I兴趣行为/A浏览行为),3)*100,'%')as 'A→I转化率' from (select hours,count(*)'A浏览行为' from behavior where view=1 group by hours)A left join (select hours,count(*)'I兴趣行为' from behavior where favor=1 or cart=1 group by hours)I on A.hours=I.hours order by A.hours

由于计算结果中,有很多不同的值。根据对比思维,我们需要【比较基准】,才知道这些转化率哪些高,哪些低,才可进一步判断。

以常见的“平均值”作为对比的基准,计算语句如下:

select Avg(A浏览行为) 'A浏览行为 平均值', Avg(I兴趣行为) 'I兴趣行为 平均值', concat(round(AVG(I兴趣行为)/AVG(A浏览行为),3)*100,'%')as 'A→I转化率 平均值' from (select hours, count(*) 'A浏览行为' from behavior where pv=1 group by hours) A left join (select hours, count(*) 'I兴趣行为' from behavior where favor=1 or cart=1 group by hours) I on A.hours = I.hours order by A.hours;

分析结论

因为每个时间段浏览的人数不同,为了确保分析的结果有效,在这里要选择浏览量大于平均值3733的时间段来观察。

在这些时间段中,我们认为转化率大于平均值9.1%的时段就是既是浏览人数多,又是转化率高的时段,即11点、15-17点、19点、22-23点。其中,23点的转化率大于10%,为最大值,可以作为最佳广告投放时间。

6.2.2货

此部分需要对【人货匹配】情况进行分析,进而可针对性地将货品根据会员行为进行调整。

总商品数统计

在分析之前,需要先对AI阶段涉及的总商品情况进行观察:

SELECT count(DISTINCT item_id) 'A' FROM userbehavior WHERE behavior_type ='pv'

接下来,计算用户感兴趣的商品:

select count(distinct item_id) 'I' FROM userbehavior where behavior_type IN ('favor','cart')

接下来,结合【假设验证思维】,基于有效浏览产生兴趣的商品数差异较大的情况,提出假设:用户偏好的商品主要集中在少数商品,而大部分长尾商品则是被错误地推荐到用户。

验证思路:

将被浏览最多的前100款商品 以及 用户最感兴趣(即加购、收藏)的前100款商品 进行交叉查询

如果交叉出的商品数较少,则假设成立

反之,则假设不成立

按如下语句提取被浏览最多的前100款商品和最感兴趣的前100款商品

-- 被浏览最多的前100款商品 select item_id, count(*) 'A' from userbehavior where behavior_type = 'pv' group by item_id order by A desc limit 100; -- 用户最感兴趣的前100款商品 select item_id, count(*) 'I' from userbehavior where behavior_type IN ('favor','cart') group by item_id order by I desc limit 100

按验证思路里说的,分别进行A, I 热门的前100款单品交叉,查看交叉数量:

select count(*) 'A & I 交叉商品数' from (select item_id, count(*) 'A' from userbehavior where behavior_type = 'pv' group by item_id order by A desc limit 100) A inner join (select item_id, count(*) 'I' from userbehavior where behavior_type in ('favor','cart') group by item_id order by I desc limit 100 ) I on A.item_id = I.item_id

分析结论

结果显示,仅有5款商品既是⾼浏览量,也是⾼收藏/加购的,故假设成⽴:⽤⼾偏好的商品主要集中在少数商 品,⽽⼤部分⻓尾商品则是被错误地推荐到⽤⼾,进⽽可得出【⼈货匹配】效率低的结论。

6.2.3场

【场】广义来说指的是与用户的触点,例如在线下零售业,则是门店; 在线上电商,则是在线店铺、平台、投放渠道等。

从这个角度,分析此段时间淘宝平台的活动情况:

结合业务经验,数据时间段在双十一之后,双十二之前,即是两个大促的中间节点

查询2017年双十二的相关信息如下:

活动:天猫双12年终品牌盛典

预热时间:2017年12月7日00:00:00-2017年12月11日23:59:59;

上线时间:2017年12月12日00:00:00-2017年12月12日23:59:59。

由活动时间可知,分析时间段处于双十二预热时间前夕的低潮期,客观上营销效果整体比较平淡,进而影响AI转化率。

6.2.4分析小结 ⼈:为提⾼转化率,可选择在浏览值⼤于3733且转化率⼤于9.1%的时间段加⼤投放⼒度;其中,23点为转化率⼤于10%,为最佳投放时间。

货:⼈货匹配效率低,平台⼤部分商品为⻓尾商品,但它们并不能很好地吸引⽤⼾兴趣,需要进⼀步优化商品信息以提升转化率。

场:从平台活动周期⻆度来说,分析时间段正处于⼤促活动预热前的低潮期,此客观因素也在⼀定程度上导致转化率低。

6.3用户复购分析

【P1: P→L】部分:根据此前制定的分析思路,PL部分计划进行【用户复购分析】以挖掘复购特征。

结合具体业务,复购分析的目的是为了优化用户触达策略,即何时何地向哪些已购用户推送什么商品可提升复购率。此案例中,受数据限制及考虑受众,暂不对商品推荐进行建模分析。将通过分析用户【复购周期】以解决业务中触达时间的问题。

现该部分问题转化为分析用户复购周期问题,对于此,从业务角度主要包括何时触达、触达多久两部分。

6.3.1何时触达

可通过计算用户平均回购周期,即可在用户发生购买行为后,在平均回购周期内对其进行营销触达。

为了计算方便,这里我们新建一个记录用户第N次购买的视图取名为consume_dates

注意,这里与开头计算AIPL的视图consume的区别,在于这里的窗口函数,是基于dates这个字段,也就是按日期去对用户购买行为进行排序

create view consume_dates as select distinct user_id, dates, dense_rank() over (partition by user_id order by dates ) as n_consume from behavior where buy = 1; ----------------------------------- select * from consume_dates

计算步骤:

通过以下语句先计算出每个用户每次消费的回购周期

select a.user_id,a.dates,a.n_consume, datediff(a.dates,b.dates)‘回购周期(天)’ from consume_dates a,consume_dates b where a.user_id=b.user_id and b.n_consume=a.n_consume-1 结果说明:如图,user_id 为100的用户 n_consume=2,回购周期=2天 即为期第二次消费时,与第一次消费间隔了2天,也就是说该用户在2天前进行了第一次消费。

基于以上语句,将每人次的回购周期进行平均,取得最终的平均回购周期 : select avg(datediff(a.dates,b.dates))'平均回购周期(天)' from consume_dates a,consume_dates b where a.user_id=b.user_id and b.n_consume=a.n_consume-1

分析结论

即可以在用户购买行为后的2-3天内对其进行触达。

6.3.2触达多久

通过计算不同时段下购买的客户最长购买周期,供业务触达时参考。

统计每个客户“首次消费日期”、“最后消费日期”后,相减即可算得每个客户的消费周期,命名为“最长消费间隔”。 select a.user_id, a.dates '首次消费日期', max(dates) '最后消费日期', datediff(最后消费日期,a.dates) '最长消费间隔' from (select user_id, dates from consume_dates where n_consume=1) a join (select user_id, MAX(dates) '最后消费日期' from consume_dates where n_consume >1 group by user_id) b on a.user_id = b.user_id group by a.user_id 基于以上中语句,按日期进行分组统计,计算得每天消费的客户平均最长消费间隔。 select avg(最长消费间隔)'平均最长消费间隔' from (select a.user_id,a.dates '首次消费日期',max(dates)'最后消费日期', datediff(最后消费日期,a.dates)'最长消费间隔' from (select user_id,dates from consume_dates where n_consume=1)a join (select user_id,max(dates)'最后消费日期' from consume_dates where n_consume>1 group by user_id)b on a.user_id=b.user_id group by a.user_id)t

分析结论

结果显示,整体平均最长消费间隔为4.42天。

6.3.3分析小结

用户的平均回购周期为2.35天,可以在用户购买行为后的2-3天内对其进行触达。而整体平均最长消费间隔为4.42天,可以在4-5天内重复1-2次以确保顾客能接收到足够的营销刺激。

6.4购买率特征分析

【P2: I→P】部分:由此前漏斗分析可知,平台用户复购率高达64%,也就是说用户只要突破0到1的消费,接下来就有64%的机会复购,所以此部分重点应放在如何提升AI→P。

为了提高AI客户的购买转化率,可以通过高购买率客户与低购买率客户对比,挖掘高购买率客户特征,进而指导业务运营策略。

先创建视图user_feature,以便统计每个客户的购买率。语句如下:

create view user_feature as select user_id, sum(view) '浏览', sum(favor)+sum(cart) '收藏加购', sum(buy) '购买', (sum(cart)+sum(favor))/sum(view) '加购率', sum(buy)/(sum(view)+sum(cart)+sum(favor)) '购买率', dense_rank() over(order by sum(buy)/(sum(view)+ sum(cart)+sum(favor)) desc) '购买率排序' from behavior group by user_id; ------------------------------ select * from user_feature order by 购买率 desc

统计可知,共有386个客户,查询语句如下:

高购买率 vs 低购买率

结合【二八原则】,认为前20%为高购买率客户,后20%为低购买率客户。即:386*0.2 =77,即前77位客户为高购买率客户;

386-77 = 309,即309-386位的客户为低购买率客户。

6.4.1高购买率客户特征 select avg(浏览)'平均浏览数',avg(收藏加购)'平均兴趣数', avg(加购率)'平均加购率' from user_feature where 购买率排序0

低购买率客户品类集中度:

select count(distinct category_id) '购买品类集中度' from userbehavior where behavior_type ='buy' and user_id in ( select distinct user_id from user_feature where 购买率排序>=309 and 购买率>0) 6.4.3分析小结

1)⾼购买率客户浏览商品数36远小于低购买率客户浏览商品数194。

2)⾼购买率客户平均加购率11%大于低购买率客户平均加购率7% 。

3)⾼购买率客户购买品类集中度399 远大于低购买率客户购买品类集中度97。

综上所述可得⼈群画像:⾼购买率⼈群浏览商品数少,但加购率⾼,⼤概率为决策型顾客,看对了商品就下手购 买;而低购买率人群更多是纠结型顾客,需要反复浏览商品来确认最终想要的。 此外,低购买率人群品类集中度⾼,可列出这些品类,有⽬的性地优化品类信息,减少用户浏览跳失率。

6.5 RFM模型分析

为促进用户购买,需进行精细化用户运营,即可通过RFM模型实现。

由于数据限制,并无用户购买金额数据,故此处可与AIPL模型结合,重新定义R、F、M:

R:客户最近一次购买离分析日期的距离,用以判断购买用户活跃状态F:客户收藏、加购行为次数 M:客户购买行为次数 因此,RFM分群结果及人群特征如下:

重要价值用户(R高F高M高):用户处于购买活跃期,感兴趣的商品多,购买次数也多

一般价值用户(R高F高M低):用户处于购买活跃期,感兴趣的商品多,购买次数少

重要发展用户(R高F低M高):用户处于购买活跃期,感兴趣的商品少,购买次数多

一般发展用户(R高F低M低):用户处于购买活跃期,感兴趣的商品少,购买次数少

重要唤回用户(R低F高M高):用户已不活跃,感兴趣的商品多,购买次数也多

一般唤回用户(R低F高M低):用户已不活跃,感兴趣的商品多,购买次数少

重要挽留用户(R低F低M高):用户已不活跃,感兴趣的商品少,购买次数多

一般挽留用户(R低F低M低):用户已不活跃,感兴趣的商品少,购买次数少

6.5.1计算R、F、M值

(1)计算R值

select user_id, dates '最后消费日期', datediff('2021-12-03', dates) 'R' from consume_dates a where n_consume = ( select MAX(n_consume) from consume_dates b where a.user_id = b.user_id )

(2)计算F、M值

select user_id, sum(favor)+sum(cart) 'F', sum(buy) 'M' from behavior group by user_id

(3)将前两个表合并,写成一个语句,并新建视图RFM

create view RFM as select r.user_id, R, F, M from (select user_id, dates '最后消费日期', datediff('2021-12-03', dates) 'R' from consume_dates a where n_consume = ( select MAX(n_consume) from consume_dates b where a.user_id = b.user_id )) r left join (select user_id, sum(favor)+sum(cart) 'F', sum(buy) 'M' from behavior group by user_id ) fm on r.user_id = fm.user_id; ---------------------- select * from RFM 6.5.2划分族群

(1)为了划分R、F、M值的高与低,这里采用常用的平均值法作为阈值,语句如下:

select avg(R),avg(F),avg(M) from RFM

(2)根据以上RFM阈值,及RFM定义,将每个客户划分到不同的用户价值族群中。

create view user_rfm as select user_id, case when R9.3115 and M>2.8018 then '重要价值用户' when R9.3115 and M9.3115 and M2.4501 and F2.8018 then '重要挽留用户' when R>2.4501 and F


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3