电商用户行为分析

在这里插入图片描述

一、背景介绍

随着互联网的发展,网上购物成为了一种趋势,但同时各大电商平台的竞争也愈发激烈。利用进行发现问题及规律,进行精细化营。结合各个维度的数据以及用户行为进行数据分析,对用户展开有针对性的运营活动,提供个性化,差异化的策略,以实现运营目的。

本文利用SQL对2012年11月25日-2017年12月3日的淘宝用户行为数据进行分析,发现其中存在的业务问题,提供建议。

二、提出问题

1.分析框架指标构建
在这里插入图片描述

2.提出问题

1)什么产品及产品类目销售量最好,及复购率情况

2)用户从浏览到最终购买整个过程的流失情况,提出改善转化率的意见

3)在研究的时间段里找出用户最活跃的日期以及每天活跃时间段,了解用户的行为时间模式

4)基于RFM模型,找出价值客户

三、 数据理解及处理

1.数据来源

数据来源于阿里巴巴天池比赛的公开数据集

数据链接如下:

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

数据集包含了2017.11.25-2017.12.3之间,约百万用户的行为(点击、购买、加入购物车、收藏),一共有上亿条记录,五个字段

2.字段说明

字段名称说明
user_id用户id信息
items_id商品id
category商品所属类别
behavior_type用户的行为类型,包括pv,buy,cart,fav
timestamp发生行为的时间
行为类型说明
pv商品详情页pv,等价于点击
buy商品购买
cart加入购物车
fav收藏商品

3.数据清洗

由于上亿条字段,我们这里只抽取了200万条记录用于分析,然后用python连接mysql把数据导入数据库

数据没有发现缺失值重复值以及所有字段都需要,在python中把timestamp转化成了标准的时间格式

#利用python把数据写入数据库
#读取全部数据
df = pd.read_csv('./UserBehavior.csv',header=None,iterator=True)
head_data = df.get_chunk(100150807)
#从中随机抽取出200万条数据
sample_data = head_data.sample(n=2000000,random_state=42)
#列名重命名
data.rename(columns={0: 'user_id', 1: 'items_id', 2: 'category_id', 3:'behavior_type', 4:'time'}, inplace=True)
#异常时间处理
sample_data = sample_data[sample_data.time>0]
sample_data['time']=sample_data['time'].apply(lambda x:time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(x)))
sample_data = sample_data[(sample_data.time>='2017-11-25 00:00:00')&(sample_data.time<='2017-12-04 00:00:00')]
#删除重复值
sample_data.drop_duplicates()

# pandas类型和sql类型转换
def map_types(df):
    dtypedict = {}
    for i, j in zip(sample_data.columns, sample_data.dtypes):
        if "object" in str(j):
            dtypedict.update({i: NVARCHAR(length=255)})
        if "float" in str(j):
            dtypedict.update({i: Float(precision=2, asdecimal=True)})
        if "int" in str(j):
            dtypedict.update({i: Integer()})
    return dtypedict

dtypedict = map_types(sasmple_data)
# 通过dtype设置类型 为dict格式{“col_name”:type}
data.to_sql(name='userbehavior', con=con, if_exists='replace', index=False, dtype=dtypedict)

四、分析建模

1.整体情况

  • PV,UV以及访问深度

SELECT Date(time),
       SUM(IF(behavior_type='pv',1,0)) AS 'PV',
       COUNT(DISTINCT user_id) AS 'UV',
	   SUM(IF(behavior_type='pv',1,0))/COUNT(DISTINCT user_id) as 'PV/UV'
FROM userbehavior
GROUP BY Date(time)
ORDER BY Date(time);

在这里插入图片描述

从上图可以看出,PV、UV 这两个指标的变化趋势几乎保持一致。在 2017 年 11 月 25 日-12 月 1 日之间,都是较为稳定的,而在 2017 年 12 月 2 日这天开始,PV 和 UV 都不断增加。可以就此提出假设:双12活动前的运营活动导致日活上升

  • 人均PV走势

在这里插入图片描述

每日的人均访问在11月27日和11月28日有所下降,但是是否属于异常,需要根据公司的业务确定一个标准,与标准进行比较才能得知是否异常

  • 日增新用户数以及新用户占比

    这里第一次访问页面的用户定义为新用户,用第一天当做用户访问app的日期

    CREATE VIEW re_view AS  -- 视图
    SELECT user_id,
    	Date(time) date,
    	MIN(Date(time)) OVER(PARTITION BY user_id) AS 'first_date'
    FROM userbehavior;
    
    SELECT a.date '日期',
    a.total '总访客数',
    b.new '日增新访客数',
    b.new/a.total '新访客占比'
    FROM
    (SELECT Date(time) date,
    	     COUNT(DISTINCT user_id) AS 'total'
    	     FROM userbehavior
    	     GROUP BY Date(time)) as a
    LEFT JOIN
    (SELECT date,
    		COUNT(DISTINCT user_id) AS 'new'
    		FROM re_view
    		WHERE date=first_date
    		GROUP BY date) as b
    ON a.date = b.date;
         
    

在这里插入图片描述

从上图可以看出,日新增用户数是不断在下降,在12月2日出现轻微的上升,但日新增用户数占比是在不断下降的,表明这段时间的日活跃用户大部分来自留存用户

  • 跳出率

    跳失率=浏览商品详情页即退出的次数/该页面总访问数(浏览即退出:浏览页面后就退出,未进行其他任何行为)跳失率为5.83%

    SELECT COUNT(distinct user_id) as '点击即跳转的用户'
    FROM userbehavior
    WHERE user_id NOT IN (SELECT DISTINCT user_id FROM userbehavior WHERE behavior_type='fav')
    AND user_id NOT IN (SELECT DISTINCT user_id FROM userbehavior WHERE behavior_type='cart')
    AND user_id NOT IN (SELECT DISTINCT user_id FROM userbehavior WHERE behavior_type='buy');
    

    但由于每个平台所定义的口径不一样,所以暂时无法衡量这个跳失率算高还是低。用户跳出的原因有很多,这里也可以使用“人-货-场“的逻辑来进行思考,影响跳失率的影响有哪些。

  • 用户行为转化漏斗

    SELECT behavior_type, COUNT(*) '用户行为数' FROM userbehavior GROUP BY behavior_type ORDER BY 用户行为数 DESC;
    

在这里插入图片描述

从上面的图可以看出来用户从浏览页面到加入购物车或者收藏的转化率只有9.37%,收藏或加入购物车的用户将近有四分之一会购买商品。这个环节可以根据用户的习惯进行商品推荐以此来提高转化。

  • 复购率

    SELECT COUNT(DISTINCT a.user_id) AS '总购买用户数',
            SUM(IF(a.ct>=2,1,0)) AS '购买两次以上的用户数',
    	CONCAT(ROUND((SUM(IF(a.ct>=2,1,0))/COUNT(DISTINCT a.user_id))*100,2),'%') AS '复购率'
    FROM
         (SELECT user_id,COUNT(behavior_type) AS 'ct'
          FROM userbehavior
          WHERE behavior_type='buy'
          GROUP BY user_id) AS a
    

    总购买用户数38231,复购用户数1643,复购率4.3%

2.基于时间维度的用户行为

  • 每天用户不同行为的走势

    SELECT Date(time) date,
           SUM(IF(behavior_type='pv',1,0)) AS '访问量',
           SUM(IF(behavior_type='fav',1,0)) AS '收藏量',
           SUM(IF(behavior_type='cart',1,0)) AS '加入购物车量',
           SUM(IF(behavior_type='buy',1,0)) AS '购买量'
    FROM userbehavior
    GROUP BY date
    ORDER BY date;
    

    在这里插入图片描述

从以上数据来看,从11月25日-12月1日之间,各项指标都是比较平稳,而在12月2日-3日之间急剧上升,并达到了最大值。分析和前面的日均 PV、UV 的分析一致,可能是受双十二预热活动的影响,导致用户数急剧上升

  • 每个小时的活跃用户情况

    SELECT HOUR (time) hour,COUNT(*) '时活跃量',COUNT(DISTINCT user_id) '时活跃用户数' FROM userbehavior GROUP BY HOUR (time) ORDER BY HOUR (time) ASC;
    

在这里插入图片描述

用户量以及活跃量从23:00到次日凌晨4:00开始减少,从5:00开始,活跃用户数及活跃量逐渐增加。

活跃用户数以及活跃量集中在20:00 -22:00,并且21:00,22:00这两个时间点用户最活跃,浏览量最多,用户在晚上空闲时间较多。

3.商品维度

  • 浏览量前10的商品

    SELECT category_id,COUNT(behavior_type) AS '商品浏览量'
    FROM userbehavior
    WHERE behavior_type='pv'
    GROUP BY category_id
    ORDER BY 商品浏览量 DESC
    LIMIT 10;
    

在这里插入图片描述

可以看出4756105,2355072,4145813,3607361,982926这几个类商品占据的比较多,那这几类商品是否购买量也是最多的呢

  • 购买量最多的10种商品
SELECT category_id,COUNT(behavior_type) AS '商品购买量'
FROM userbehavior
WHERE behavior_type='buy'
GROUP BY category_id
ORDER BY 商品购买量 DESC
LIMIT 10;

在这里插入图片描述

浏览量购买量都多的商品有4145813,982916,4756105,4801426,1320293。说明其他热搜商品没有很好的转化为购买。需要去分析其运营活动是否有效的把需要的商品推荐给需要的用户

  • 用户价值RFM

由于不同用户对公司带来的以是不一样的,根据二八定律,我们可以得知,20% 的头部用户可以带来 80% 的收益,所以通过对用户进行分层,找到最优质价值的用户群,可以针对这部分用户实施精准化营销,也可以有效降低这部分用户的流失。

RFM 模型是衡量客户价值和客户创利能力的重要工具,是按照 R(Recency-近度)、F(Frequency-频度)、M(Monetary-额度)三个维度进行细分客户群体。

近度R(Recency):**R代表客户最近的活跃时间距离数据采集点的时间距离。R越大,表示客户越久未发生交易,R越小,表示客户越近有交易发生。R越大则客户越困难会“沉睡”,流失的可能性越大。在这部分客户中,可能有些优质客户,值得公司通过一定的营销手段进行激活。

频度F(Frequency):F代表客户过去某段时间内(如一年、半年、30天等)的活跃频率。F越大,则表示客户同本公司的交易越频繁,不仅仅给公司带来人气,也带来稳定的现金流,是非常忠诚的客户;F越小,则表示客户不够活跃,且可能是竞争对手的常客。针对F较小、且消费额较大的客户,需要推出一定的竞争策略,将这批客户从竞争对手中争取过来。

额度M(Monetary): M表示客户每次消费金额的多少。可以用最近一次消费金额,也可以用过去的平均消费金额,根据分析的目的不同,可以有不同的标识方法。一般来讲,单次交易金额较大的客户,支付能力强,价格敏感度低,是较为优质的客户,而每次交易金额很小的客户,可能在支付能力和支付意愿上较低。当然,也不算绝对的。

一般根据不同的业务可以灵活选取指标,每个业务的标准也不一样,这里以个人定义的标准来进行划分。一般来说也可以使用机器学习的kmeans算法来进行自动的聚类

RFM值计算

CREATE view RF_model AS  
SELECT user_id,
       DATEDIFF('2017-12-03',MAX(Date(time))) AS 'R',
       COUNT(behavior_type) AS 'F'
FROM userbehavior
WHERE behavior_type='buy'
GROUP BY user_id
ORDER BY user_id;

CREATE view M_model AS  
SELECT user_id,
       COUNT(behavior_type) AS 'M'	   
FROM userbehavior
WHERE behavior_type in ('buy','cart','fav')
GROUP BY user_id
ORDER BY user_id;

RFM打分表

价值打分最近一次消费时间间隔®消费频率(F)消费金额(M)
16-80-10-2
23-52-33-6
30-24-57-10
CREATE VIEW RFM_score AS
SELECT user_id,
       CASE WHEN R BETWEEN 0 AND 2 THEN 2
            WHEN R BETWEEN 3 AND 5 THEN 1
            WHEN R BETWEEN 6 AND 8 THEN 0
       ELSE NULL END AS 'R_score',
       CASE WHEN F BETWEEN 0 AND 1 THEN 0
            WHEN F BETWEEN 2 AND 3 THEN 1
            WHEN F BETWEEN 4 AND 5 THEN 2
       ELSE NULL END AS 'F_score',
	   CASE WHEN M BETWEEN 0 AND 2 THEN 0
       WHEN M BETWEEN 3 AND 6 THEN 1
       WHEN M BETWEEN 7 AND 10 THEN 2
       ELSE NULL END AS 'M_score'sql
FROM RFM
ORDER BY user_id;

计算RFM的平均值及标签

CREATE VIEW RFM_class AS
SELECT user_id,
       R_score AS 'R值打分',
       F_score AS 'F值打分',
	   M_score AS 'M值打分',
       CASE WHEN R_score>(SELECT AVG(R_score) FROM RFM_score) THEN '高' ELSE '低' END AS 'R_class',
       CASE WHEN F_score>(SELECT AVG(F_score) FROM RFM_score) THEN '高' ELSE '低' END AS 'F_class',
	   CASE WHEN M_score>(SELECT AVG(M_score) FROM RFM_score) THEN '高' ELSE '低' END AS 'M_class'
FROM RFM_score
GROUP BY user_id;

根据打分划分客户

preview

CREATE VIEW RFM_label
AS
SELECT user_id,R_class,F_class,M_class,
(CASE 
WHEN R_class = '高' and F_class ='高' and M_class ='高' then '重要价值客户'
WHEN R_class = '高' and F_class ='低' and M_class ='高' then '重要发展客户'
WHEN R_class = '低' and F_class ='高' and M_class ='高' then '重要保持客户'
WHEN R_class = '低' and F_class ='低' and M_class ='高' then '重要挽留客户'
WHEN R_class = '高' and F_class ='高' and M_class ='低' then '一般价值客户'
WHEN R_class = '高' and F_class ='低' and M_class ='低' then '一般发展客户'
WHEN R_class = '低' and F_class ='高' and M_class ='低' then '一般保持客户'
WHEN R_class = '低' and F_class ='低' and M_class ='低' then '一般挽留客户'
else 0 end
)AS userclass
FROM RFM_class;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-06ESyqPx-1602939732434)(一、背景介绍.assets/image-20201016143609869.png)]

根据RFM分层结果统计每个用户群所占比例

SELECT a.user_class AS '用户类别',
       a.ct AS '用户数',
       a.ct/(SELECT COUNT(DISTINCT user_id) FROM RFM_label) AS '用户占比'
FROM
(SELECT user_class,
       COUNT(DISTINCT user_id) AS 'ct'
FROM RFM_label
GROUP BY user_class) AS a
GROUP BY a.user_class;

在这里插入图片描述

五、结论及建议

本文分析了淘宝 2017 年 11 月 25 日至 2017 年 12 月 3 日之间的 200 万条用户行为数据,从用户的整体购物情况、用户行为路径等方面进行分析,结合分析结果,提出以下的建议:

(1)由用户购买行为转化可知,大部分用户在浏览了商品后,并没有产生加入购物车或收藏的行为,表明产品吸引力以及匹配度不够,应需要进一步根据用户的用户画像,精准地为推荐用户感兴趣的商品;

(2)用户的活跃时段分别在早上 10:00-17:00 以及晚上的 20:00-23:00 之间,这个时间段是个黄金时间段,特别是在晚上的这个时间段,用户访问量和独立访客数都达到最大值,平台可以利用这个时间段投放广告,加大力度宣传产品;

(3)从热搜商品和热销商品上来看,热搜商品购买率不高,需要进一步分析用户未购买原因,可以增加热搜商品并且购买率高的商品的曝光度以此来提高活跃用户情况以及增加营收。

(4)根据用户价值分析,我们可以得到用户分层结果,可以根据每个用户群的特性,实现差异化营销:

  • 重要价值用户这类用户的最近消费时间较近,且消费频次高,需要重点关注,对于这类用户可以考虑给其提供 VIP 服务,以防流失;
  • 保持用户这类用户的最近消费时间较远,但消费频次较高,说明这类型的用户已经有一段时间没来消费了,对于这类用户可以采用邮件推送、短信推送、APP 推送等方式来唤醒用户,提高用户的粘性;
  • 发展用户这类用户的特点是最近消费时间近,但消费频度低,对于这类用户可以适当的赠送优惠券或采取捆绑销售的方式来增加用户的消费频度;
    时间段投放广告,加大力度宣传产品;

(3)从热搜商品和热销商品上来看,热搜商品购买率不高,需要进一步分析用户未购买原因,可以增加热搜商品并且购买率高的商品的曝光度以此来提高活跃用户情况以及增加营收。

(4)根据用户价值分析,我们可以得到用户分层结果,可以根据每个用户群的特性,实现差异化营销:

  • 重要价值用户:这类用户的最近消费时间较近,且消费频次高,需要重点关注,对于这类用户可以考虑给其提供 VIP 服务,以防流失;
  • 保持用户:这类用户的最近消费时间较远,但消费频次较高,说明这类型的用户已经有一段时间没来消费了,对于这类用户可以采用邮件推送、短信推送、APP 推送等方式来唤醒用户,提高用户的粘性;
  • 发展用户:这类用户的特点是最近消费时间近,但消费频度低,对于这类用户可以适当的赠送优惠券或采取捆绑销售的方式来增加用户的消费频度;
  • 挽留用户:这类用户的最近消费时间较远,最近一段时间的消费频度较低,这类用户面临流失或已经流失的情况,应当采取挽留措施,如优惠券等方式召唤回这部分用户。
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值