电商用户行为分析(二)

该博客分析了电商用户从点击到购买的转化率,发现从点击到加入购物车的转化率为6.25%,再到购买的转化率为2.24%。用户在点击到收藏阶段流失严重,推测可能因平台推荐商品不符合用户兴趣。购买率和复购率分别为68%和66%,表现出用户对平台的信任。留存率在8天内均保持较高水平,显示出良好的用户留存效果。建议通过优化推荐算法和提供优惠活动提高用户转化率。
摘要由CSDN通过智能技术生成

电商用户行为分析

2.2用户行为转化分析

2.2.1用户行为阶段转换

下面我们开始对用户的行为进行分析,找到用户在四个行为的转化率、流失率,在何种情况下用户的购买欲望会上升,下降以及四个行为之间的关联。

早在之前我们就已经查询了四个行为的总数量
在这里插入图片描述
从这里其实就可以看出点击数远远要超过下面三个行为,为了使数据更透明化,我们使用漏斗图来分析,下面我们使用了pyecharts来对漏斗图进行绘制,虽然用pyplot也可以进行绘制(通过绘制两个横向柱形图,一个全数据,一个用来遮挡主数据图),但是pyecharts绘制要简单的多。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pymysql import Connect
import matplotlib.font_manager as fm
from pyecharts.charts import Funnel
from pyecharts import options as opts

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
myfont = fm.FontProperties(fname=r'C:\WINDOWS\Fonts\simfang.ttf')
colors = ['lightcoral', 'coral', 'darkorange', 'gold', 'palegreen', 'paleturquoise',
          'skyblue', 'plum', 'hotpink', 'pink']

conn = Connect(host='localhost', port=3306, user='root', password='123456', database='demo')
cursor = conn.cursor()  # 获取游标

sql = '''select behavior_type, count(*)
from ubd
group by behavior_type
'''

cursor.execute(sql)
data = cursor.fetchall()
data = np.array(data)

a = np.argsort(data[:, 1])  # 将数据排序的索引得到
a = a[::-1]  # 由于是升序,需要我们自己将索引反转输出
data = data[a]  # 通过索引来达到排序的功能
print(data)

num = int(data[0][1])  # 用点击量做为总量
x = [data[i][0] for i in range(data.shape[0])]
y = [round((int(data[i][1]) / num) * 100, 2) for i in range(data.shape[0])]  # 计算比率
print(x)
print(y)
data = [[x[i], y[i]] for i in range(len(x))]
print(data)

funnel = (
    Funnel()
        .add("", data, label_opts=opts.LabelOpts(formatter="{b} : ({c}%)", is_show=True, position='outside'),
             tooltip_opts=opts.TooltipOpts(trigger='item', formatter='{b} : {c}%'))
        .set_global_opts(title_opts=opts.TitleOpts(title='用户行为转换率'))
)

funnel.render('1.html')

在这里插入图片描述
从图中可以看出,从点击到加入购物车的转化率只有6.25%,其实这里应该将加入购物车和收藏看做是同一个阶段,它们本质上是一样的行为,那我们不妨将点击到加入购物车的转化率看为9.51%,再到购买的转化率更是低到了2.24%。现在我们将用户的点击到收藏分为了三个阶段,目标即是找到转化率最低的阶梯,因此我们再通过第二阶段到第三阶段来进行分析。

num = int(data[1][1]) + int(data[2][1])
x = ['cart+fav', 'buy']
y = [100, round((int(data[3][1]) / num) * 100, 2)]
data = [[x[i], y[i]] for i in range(len(x))]
funnel = (
    Funnel()
        .add("", data, label_opts=opts.LabelOpts(formatter="{b} : ({c}%)", is_show=True, position='outside'),
             tooltip_opts=opts.TooltipOpts(trigger='item', formatter='{b} : {c}%'))
        .set_global_opts(title_opts=opts.TitleOpts(title='购买转换率'))
)

funnel.render('2.html')

在这里插入图片描述
从图中可以看出第二阶段到第三阶段的转换率为23.5%,比第一阶段到第二阶段的9.51%转化率要高出很多,那么出问题的就在于从点击到加入购物车和收藏这一阶段。分析这一阶段首先要想到用户怎样才会点击到商品,这里做两个假设:
1.用户进入淘宝首页点击平台的推荐,但是是不喜欢的商品类型。
2.用户点击推荐的商品类型后,推荐的商品却无法吸引用户。

下面我们分别对商品类型和商品的点击排行,购买排行做出可视化(仅给出第一个图的代码,后面的图大同小异)

sql = '''select category_id,count(behavior_type) as 点击量
from ubd
where behavior_type='pv'
group by category_id
order by 点击量 desc
'''

cursor.execute(sql)
data = cursor.fetchall()
data = np.array(data)
data = (data[:5])  # 由于商品的类型有7824中,这里我们只取最前的五种


x = [data[i][0] for i in range(data.shape[0])]
y = [int(data[i][1]) for i in range(data.shape[0])]
x.reverse()
y.reverse()
print(x)
print(y)

b = plt.barh(x, y, color=colors, height=0.5)
for i in b:
    w = i.get_width()
    plt.text(w, i.get_y() + i.get_height() / 2, '%d' %
             int(w), ha='left', va='center')
plt.title('商品类型点击率前5', fontproperties=myfont)
plt.show()

在这里插入图片描述

在这里插入图片描述
从这两张图可以看出平台推荐的商品类型和用户购买的商品类型不太符合,前5中只有2个一样,且点击排名第1的商品类型在购买率只能排在第5。下面我们再使用商品的数据来进行验证(由于画图代码和商品类型大同小异,故不贴出):
在这里插入图片描述
在这里插入图片描述
商品的点击量和购买量前5甚至都没有一样的,这应该足以说明平台对用户的推荐商品类型大多是用户所不喜欢的,我们的假设确实是合理的。

2.2.2用户行为分析

通过从用户的消费情况、留存情况等等,来分析平台对用户的吸引力。

用户的消费情况我们根据用户的总数,购买过商品的用户数和回头客(进行过2次及以上次数购买)的数量构建一个漏斗图来查看。

sql = """select(select count(distinct user_id) from ubd) as 总用户数,
count(distinct user_id) as 购买用户数,
round(count(distinct user_id)/(select count(distinct user_id) from ubd)*100,'%') as 付费率
from ubd
where behavior_type='buy'
"""

sql1 = """select(select count(distinct user_id) from ubd) as 总用户数,
count(user_id) as 复购人数,
round(count(user_id)/(select count(distinct user_id) from ubd where behavior_type='buy')*100,'%') as 复购率
from(select user_id,count(behavior_type) as 购买次数
     from ubd
     where behavior_type='buy'
     group by user_id
     having 购买次数 >=2
     order by 购买次数 desc) as a
"""

cursor.execute(sql)
data = cursor.fetchall()
data = np.array(data)
print(data)
cursor.execute(sql1)
data1 = cursor.fetchall()
data1 = np.array(data1)
print(data1)
x = ['总用户数', '购买率', '复购率']
y = [data[0][0] / data[0][0] * 100, int(data[0][2]), int(data1[0][2])]

data = [[x[i], y[i]] for i in range(len(x))]
funnel = (
    Funnel()
        .add("", data, label_opts=opts.LabelOpts(formatter="{b} : ({c}%)", is_show=True, position='outside'),
             tooltip_opts=opts.TooltipOpts(trigger='item', formatter='{b} : {c}%'))
        .set_global_opts(title_opts=opts.TitleOpts(title='用户行为转换率'))
)

funnel.render('3.html')

在这里插入图片描述
从图中我们看到68%的用户都进行过购买操作,其中又有66%的用户进行了回购的操作。

用户的留存情况需要我们计算出留存率,在如今的app运营中,每天都会有新用户加入,在这些新用户使用的这段时间,有用户会流失也有用户会一直使用,留存率则是一直在使用着app的用户数量和第一批新用户数量之比。由于我们收集到的数据仅有11月25日到12月3日一共8天的数据,那也只能统计这一段时间内的留存率情况。

首先我们将用户的活跃日期(进行过任意操作)查询为一张表,将11月25日定为第一批用户注册日期,再将用户的注册日期查询为一张表,将其内连接为一张表,使用自带的时间函数计算出活跃的天数与其注册天数的差,即可得出用户在(n为得出的差)第n天是否活跃。当然一个用户可能会出现不同的差,也就是可能例如第二天活跃就有1,第三天不活跃就没有2,第四天活跃就有3。

select ubd1.user_id, ubd1.date, ubd2.注册日期, datediff(date,注册日期) as 活跃的第n天 
from (select user_id, date   
			from ubd
			group by user_id, date ) as ubd1
inner join (select user_id, min(date) as 注册日期
						from ubd
						group by user_id) as ubd2
on ubd1.user_id = ubd2.user_id;

在这里插入图片描述
差为0就是表示当天为注册天,下面我们对这些活跃天进行统计,由于每天都有人会注册,要通过对注册日期进行分组来计算每一天的新增人数和相对与这一天的新增人数之后每一天的留存人数。

select 注册日期,
sum(case when 活跃的第n天=0 then 1 else 0 end) as 每日新增用户数,
sum(case when 活跃的第n天=1 then 1 else 0 end) as 1天后用户数,
sum(case when 活跃的第n天=2 then 1 else 0 end) as 2天后用户数,
sum(case when 活跃的第n天=3 then 1 else 0 end) as 3天后用户数,
sum(case when 活跃的第n天=4 then 1 else 0 end) as 4天后用户数,
sum(case when 活跃的第n天=5 then 1 else 0 end) as 5天后用户数,
sum(case when 活跃的第n天=6 then 1 else 0 end) as 6天后用户数,
sum(case when 活跃的第n天=7 then 1 else 0 end) as 7天后用户数,
sum(case when 活跃的第n天=8 then 1 else 0 end) as 8天后用户数
from(select ubd1.user_id, ubd1.date, ubd2.注册日期, datediff(date,注册日期) as 活跃的第n天 
     from(select user_id, date   
			     from ubd
			     group by user_id, date) as ubd1
     inner join (select user_id, min(date) as 注册日期
						from ubd
						group by user_id) as ubd2
     on ubd1.user_id = ubd2.user_id) as a
group by 注册日期

在这里插入图片描述
然后再对查询出的这个表再次套娃,用这些用户数除以每日新增用户数来计算出留存率,这里我们计算出了每一天新增人数之后的留存率,如果只想要第一个注册日期(即11月25日)之后的留存率,那么就不用

select 注册日期,每日新增用户数,
concat((round((1天后用户数/每日新增用户数)*100, '%')), '%') as1天留存率,
concat((round((2天后用户数/每日新增用户数)*100, '%')), '%') as2天留存率,
concat((round((3天后用户数/每日新增用户数)*100, '%')), '%') as3天留存率,
concat((round((4天后用户数/每日新增用户数)*100, '%')), '%') as4天留存率,
concat((round((5天后用户数/每日新增用户数)*100, '%')), '%') as5天留存率,
concat((round((6天后用户数/每日新增用户数)*100, '%')), '%') as6天留存率,
concat((round((7天后用户数/每日新增用户数)*100, '%')), '%') as7天留存率,
concat((round((8天后用户数/每日新增用户数)*100, '%')), '%') as8天留存率
from(select 注册日期,
sum(case when 活跃的第n天=0 then 1 else 0 end) as 每日新增用户数,
sum(case when 活跃的第n天=1 then 1 else 0 end) as 1天后用户数,
sum(case when 活跃的第n天=2 then 1 else 0 end) as 2天后用户数,
sum(case when 活跃的第n天=3 then 1 else 0 end) as 3天后用户数,
sum(case when 活跃的第n天=4 then 1 else 0 end) as 4天后用户数,
sum(case when 活跃的第n天=5 then 1 else 0 end) as 5天后用户数,
sum(case when 活跃的第n天=6 then 1 else 0 end) as 6天后用户数,
sum(case when 活跃的第n天=7 then 1 else 0 end) as 7天后用户数,
sum(case when 活跃的第n天=8 then 1 else 0 end) as 8天后用户数
from(select ubd1.user_id, ubd1.date, ubd2.注册日期, datediff(date,注册日期) as 活跃的第n天 
     from(select user_id, date   
			     from ubd
			     group by user_id, date) as ubd1
     inner join (select user_id, min(date) as 注册日期
						     from ubd
						     group by user_id) as ubd2
     on ubd1.user_id = ubd2.user_id) as a
group by 注册日期) as b

在这里插入图片描述
从表中可以看出注册人数最多的11月25日之后的8天的留存率都在70%以上,在12月2日左右的留存率甚至接近了100%,确实是符合之前分析的情况。其实有这么高可能也是因为数据也就仅仅这几天了,不过也足够说明淘宝在12月活动取得了很大的成功。

以上就是用户行为转化分析的所有结果,可以得到以下的信息:
1.用户在点击浏览阶段到收藏和加入购物车阶段的流失率达到了90.49%之高,再从收藏和加入购物车阶段到购买阶段的流失率有77.5%。因此需要找到流失率过高的原因,也就有了我们在上面做出的假设和验证。
2.用户对平台推荐的大多数商品类型不感兴趣,这是导致了第一点出现的主要原因。
3.用户的购买率和复购率分别为68%和66%,这是相当不错的比率,说明了用户对平台的信任,使得他们愿意在淘宝平台上购买,而不是其他的平台。
4.最后就是留存率了,其实计算出来的绝对偏高了,要知道根据Facebook的40-20-10法则,次日留存、3日留存、7日留存能达到40%、20%、10%就已经是较佳的水平了,但是只有这么几天的数据也没办法。而且即使是偏高了也远远超出40-20-10法则的比率,足以说明淘宝的对用户的挽留,推送,活动是很成功的。

针对这些信息,我可以提出几个小小的建议:
1.用户在点击阶段到收藏和加入购物车阶段的流失率可以通过各种各样的小活动来提升,比如说收藏就给优惠券,包赔运费等等。
2.第一点的建议还是治标不治本,更应该优化对用户的算法推荐,使用关联,协同过滤的算法将用户聚类,在投放推荐的同时再配上优惠券等形式的活动。
3.平台首页的商品类型推荐更应该偏向于商品类型的购买率,每天都可以实时更新。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值