一、背景及数据
背景:
# 原数据集共有大约1200万条数据,为便于运行随机抽取100万条数据,内容为淘宝APP2014年11月18日至2014年12月18日的用户行为数据,共6列字段,列字段分别是:
# user_id:用户身份,脱敏
# item_id:商品ID,脱敏
# behavior_type:用户行为类型(包含点击、收藏、加购物车、支付四种行为,分别用数字1、2、3、4表示)
# user_geohash:地理位置
# item_category:品类ID(商品所属的品类)
# time:用户行为发生的时间
# 提出问题
# 不同时间维度下用户活跃度如何变化?
# 用户的留存情况如何(复购率及漏斗流失情况)?
#用户价值情况?
数据来源:和鲸社区用户上传,一并参考"和鲸训练营-数分基础"
软件使用:主要使用Spyder(Python3.9) ,辅助使用MySQL、Tableau
二、分析过程及结果
1.导入数据即数据清洗准备工作
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
file_path=r'D:\练习大数据集\和鲸\taobao_user_bahavior.csv'
plt.rcParams['font.sans-serif']=['Microsoft YaHei'] #显示中文
plt.rcParams['axes.unicode_minus']=False #显示负数
behavior_data=pd.read_csv(file_path) #读取数据
pd.set_option('display.max_columns', None) #显示完全
#查看首行及相关信息
behavior_data.head(1)
behavior_data.info()
user_geohash地理位置字段有大量缺失
#查看缺失情况-直接分字段求合计
behavior_data.isnull().sum()
#剔除大量缺失的地理位置列
behavior_data.drop('user_geohash',axis=1,inplace=True)
此外基于原表中的time字段属性为精确到小时的object字符串,对其进行格式转换并拆分便于下一步分析
#拆分日期时间便于分析
behavior_data['time']=pd.to_datetime(behavior_data['time'])#原数据首先转换为datetime格式
#拆分出年月日并将其由object转化为datetime格式
behavior_data['date']=behavior_data['time'].dt.date
behavior_data['date']=pd.to_datetime(behavior_data['date']) #没有这一步则单独取12.12数据匹配不上,数据格式不匹配
#拆分出小时
behavior_data['hour']=behavior_data['time'].dt.hour
鉴于原表用数字1 2 3 4分别代替用户点击、收藏、加购、购买行为,为便于分析,将其转为文字显示
#将用户行为类型的数字编码转化为文字方便使用
behavior_type_transform=['click','collect','cart','buy']
behavior_data["behavior_type"]=behavior_data["behavior_type"].map(lambda s: behavior_type_transform[s-1])
#数据预处理清洗完毕后查看基本信息
behavior_data.head(1)
behavior_data.info()
2.流量维度分析
2.1总流量情况概览
#总访问pv(访问多少次)
pv_gross=behavior_data['user_id'].count()
#总访问uv(访问多少人)
uv_gross=behavior_data['user_id'].nunique()
#人均访问量PV/UV
pv_uv_gross=pv_gross/uv_gross
#日均访问量
visit_daily=pv_gross / behavior_data['date'].nunique()
#用户行为数据
behavior_gross_num1=behavior_data['behavior_type'].value_counts().sort_values(ascending=False)
# behavior_gross=behavior_data.groupby(by='behavior_type')['user_id'].count().sort_values(ascending=False)
# 以上两种方法结果一样count()与value_counts()
#用户行为数量
behavior_gross_num2=behavior_data.groupby(by='behavior_type')['user_id'].nunique().sort_values(ascending=False)
#购买用户数量量
buy_num=behavior_data[behavior_data['behavior_type']=='buy']['user_id'].nunique()
#人均购买次数:购买次数/人数
round(behavior_data[behavior_data['behavior_type']=='buy']['user_id'].count() / behavior_gross_num2['click'],3)
#购买用户人均购买次数
round(behavior_data[behavior_data['behavior_type']=='buy']['user_id'].count() / behavior_gross_num2['buy'],3)
#购买率
round(behavior_gross_num2['buy']/behavior_gross_num2['click'],3)
#复购率
#先求每个用户购买次数,再求大于2的用户数/总用户数
buy_times=behavior_data[behavior_data['behavior_type']=='buy'].groupby('user_id')['behavior_type'].count().reset_index()
round(buy_times[buy_times['behavior_type']>=2]['user_id'].count()/buy_times['user_id'].count(),3)
2.1.1数据汇总结果如下:
访问总量(PV):100000
访问总量(UV):9918
人均访问量(PV/UV):100.8267795926598
日均访问量:32258.064516129034
用户行为(总量):
behavior_type
click 942366
cart 28098
collect 19772
buy 9764
用户行为(人次):
behavior_type
click 9911
cart 5735
buy 4607
collect 3634
购买用户数量:4607
人均购买次数(购买次数/总人数):0.985
购买用户人均购买次数(购买次数/购买人数):2.119
购买率(购买用户人数/总用户人数):0.465
复购率(购买两次及两次以上的用户人数/购买用户人数):0.493
2.1.2结论
①自2014.11.18—2014.12.18,网站总访问量100万次,总访客数9918人,人均访问量101次,日均访问量约3万次
②在用户行为数据中,其中商品详情页点击次数约94万次,加购次数约2万8千次,收藏次数约2万次,购买次数约1万次
③具体到购买数据中,购买用量为4607人,人均购买次数约为1次/人,购买用户人均购买次数约为2次/人,购买率约46%(有46%的人在使用APP后会选在进行购买),复购率约49%(有49%的人在首次购买后仍会选择使用该APP进行二次及以上复购)
④这一个月中用户购买率及复购率都接近50%,表明基于总用户,25%的用户会在该APP发生至少两次购买行为,但上述相关总量指标还是应进行同比环比后再判断其质量,选择对比对象时应注意此期间包含12.12日促销活动。若同比往年或同行业相对较低或未达到预期,则结合指标拆解即维度一并查找原因
2.2日流量情况分析
2.2.1日流量计算及绘图
#日访问量pv(访问多少次)
pv_daily=behavior_data.groupby(by='date')['user_id'].count()
#日访问量uv(访问多少人)
uv_daily=behavior_data.groupby(by='date')['user_id'].nunique()
#人均访问量:PV/UV 也叫访问深度
pv_uv_daily=pv_daily / uv_daily
#日点击情况
click_daily=behavior_data[behavior_data['behavior_type']=='click'].groupby(by='date')['user_id'].count()
#日收藏情况
collect_daily=behavior_data[behavior_data['behavior_type']=='collect'].groupby(by='date')['user_id'].count()
#日加购物车情况
cart_daily=behavior_data[behavior_data['behavior_type']=='cart'].groupby(by='date')['user_id'].count()
#日支付情况
buy_daily=behavior_data[behavior_data['behavior_type']=='buy'].groupby(by='date')['user_id'].count()
#将日情况综合成一个DataFrame并修改列名
daily_data=pd.concat((pv_daily,uv_daily,pv_uv_daily,click_daily,collect_daily,cart_daily,buy_daily),axis=1)
daily_data.columns = ['pv_daily','uv_daily','pv_uv_daily','click_daily','collect_daily','cart_daily','buy_daily']
#绘制活跃情况图
plt.subplot(311)
plt.plot(daily_data.index,daily_data['pv_daily'])
plt.title('日访问量pv')
plt.subplot(312)
plt.plot(daily_data.index,daily_data['uv_daily'])
plt.title('日访问量uv')
plt.subplot(313)
plt.plot(daily_data.index,daily_data['pv_uv_daily'])
plt.title('人均访问量pv/uv')
plt.show()
日活跃情况走势图
由上图可发现在2014.12.12前走势基本平稳,12.12当天出现明显峰值,后迅速下降至日常水平
#绘制用户行为日均走势图
plt.figure(figsize=(18,10),dpi=80)
plt.subplot(411)
plt.plot(daily_data.index,daily_data['click_daily'])
plt.title('日点击量')
plt.subplot(412)
plt.plot(daily_data.index,daily_data['collect_daily'])
plt.title('日收藏量')
plt.subplot(413)
plt.plot(daily_data.index,daily_data['cart_daily'])
plt.title('日加购物车量')
plt.subplot(414)
plt.plot(daily_data.index,daily_data['buy_daily'])
plt.title('日购买量')
plt.show()
日用户行为走势图
2.2.2结论及分析
①从日活跃情况及用户行为变动可看出,点击、收藏、加购等行为在12.12日前3-4天已逐渐呈现稳步上升趋势,购买指标在12.12当天呈跳跃式增长,符合下单习惯。
②各指标在双12前几天即呈现上升趋势,表明此时活动效果已经初步显露,人们的消费欲望提高,一方面,在这三四天里可以考虑增加活动优惠的推送消息,进一步刺激消费欲望;另一方面,可以在双12前通过预订商品或者直接提前锁定商品价格方式,提前释放用户的购买需求,以减少活动时间延长所带来消费欲望可能减退的不确定性影响。
2.3时流量分析
2.3.1整体时流量计算及绘图
指标计算
#整体时均访问
pv_data_hour=behavior_data.groupby(by='hour')['user_id'].count()
uv_data_hour=behavior_data.groupby(by='hour')['user_id'].nunique()
pv_uv_data_hour=pv_data_hour / uv_data_hour
#整体时均点击、收藏、加购、购买
click_data_hour=behavior_data[behavior_data['behavior_type']=='click'].groupby(by='hour')['user_id'].count()
collect_data_hour=behavior_data[behavior_data['behavior_type']=='collect'].groupby(by='hour')['user_id'].count()
cart_data_hour=behavior_data[behavior_data['behavior_type']=='cart'].groupby(by='hour')['user_id'].count()
buy_data_hour=behavior_data[behavior_data['behavior_type']=='buy'].groupby(by='hour')['user_id'].count()
#整体时均总合成一个df
data_hour=pd.concat((pv_data_hour,uv_data_hour,pv_uv_data_hour,click_data_hour,collect_data_hour,cart_data_hour,buy_data_hour),axis=1)
data_hour.columns=['pv_data_hour','uv_data_hour','pv_uv_data_hour','click_data_hour','collect_data_hour','cart_data_hour','buy_data_hour']
绘制小时访问趋势图
#整体小时pv uv 人均访问
plt.subplot(311)
plt.title('总体小时访问量pv')
plt.plot(data_hour.index,data_hour['pv_data_hour'])
plt.subplot(312)
plt.title('总体小时访问量uv')
plt.plot(data_hour.index,data_hour['uv_data_hour'])
plt.subplot(313)
plt.title('总体小时人均访问量pv/uv')
plt.plot(data_hour.index,data_hour['pv_uv_data_hour'])
plt.show()
小时流量情况走势图
数据期内,访问量通常在每天18-20点左右逐步上升,对应一般下班时间,大概21-22点左右达到顶峰,后逐渐下降至次日凌晨4-5点达到低点(约18点左右开始UV相对上升幅度不大,而PV上升幅度较为明显,可能表明用户集中高密度使用APP)
绘制小时用户行为趋势图
#整体小时用户行为
plt.subplot(411)
plt.plot(data_hour.index,data_hour['click_data_hour'])
plt.title('总体小时点击量')
plt.subplot(412)
plt.plot(data_hour.index,data_hour['collect_data_hour'])
plt.title('总体小时收藏量')
plt.subplot(413)
plt.plot(data_hour.index,data_hour['cart_data_hour'])
plt.title('总体小时加购物车量')
plt.subplot(414)
plt.plot(data_hour.index,data_hour['buy_data_hour'])
plt.title('总体小时购买量')
plt.show()
小时用户行为趋势图
购买量在17-18达到低值,随后与各项指标一起呈上升趋势,也基本符合整体日流量趋势
2.3.2结论
① 从小时流量及小时用户行为走势情况来看,用户多习惯于在每天18点-22点范围内集中频繁使用APP,此时间段为用户高度活跃期(可能因为下班休闲、主播带货等)
②根据这一特征,在此时间段可以集中推送与用户相关度较高的商品(向高转化率、高销量优质商品倾斜)及优惠活动。从推广角度看,此时间段的流量推广应适当提价;23时-4时是用户行为活动的低谷期,在此期间应减少高成本的流量推广活动,在推送消息次数有限的前提下减少此时段的消息推送。
3.用户维度分析
3.1用户转化率情况
3.1.1转化率计算与绘图
#查看不同用户行为的总量并统一到一个df中
user_behavior=behavior_data['behavior_type'].value_counts().reset_index()#计算某列中不同值的个数(感觉类似于按具体字段内容groupby后count,毕竟groupby只能按字段名,而非具体内容)
user_behavior.columns=['用户行为','访问量']
#计算各个环节转化率
temp1 = user_behavior['访问量'][1:].values
temp2 = user_behavior['访问量'][0:-1].values#类似列表左侧(上方)从0开始,右侧(下方)从-1开始,此处左闭右开代表从第一个到倒数第二个
p = np.around(temp1 / temp2,decimals=4)*100 #np的around方法保留几位小数(np数组,小数位数)
p = list(p) #转化为列表,或者上一步直接用tolist()方法
p.insert(0,100) #打头插入100%
user_behavior['单一环节转化率%']=p
# user_behavior.drop('单一环节转化率',axis=1,inplace=True)
user_behavior['整体转化率%']=round(user_behavior['访问量'] / user_behavior.loc[0,'访问量'],4) *100
user_behavior['单一环节流失率%']=100-user_behavior['单一环节转化率%']
收藏-购买、加购-购买转化率
click_collect=np.around(user_behavior[user_behavior['用户行为']=='buy']['访问量'].values / user_behavior[user_behavior['用户行为']=='collect']['访问量'].values,decimals=4)*100
click_cart=np.around(user_behavior[user_behavior['用户行为']=='buy']['访问量'].values / user_behavior[user_behavior['用户行为']=='cart']['访问量'].values,decimals=4)*100
绘制条形图
plt.title('不同环节转化率%')
p1=plt.bar('收藏/点击',user_behavior[user_behavior['用户行为']=='collect']['整体转化率%'])
plt.bar_label(p1,label_type='edge')
p2=plt.bar('加购/点击',user_behavior[user_behavior['用户行为']=='cart']['整体转化率%'])
plt.bar_label(p2,label_type='edge')
p3=plt.bar('购买/点击',user_behavior[user_behavior['用户行为']=='buy']['整体转化率%'])
plt.bar_label(p3,label_type='edge')
p4=plt.bar('购买/收藏',click_collect)
plt.bar_label(p4,label_type='edge')
p5=plt.bar('购买/收藏',click_cart)
plt.bar_label(p4,label_type='edge')
plt.show()
从前三列个柱形图来看,点击后的转化率还需进一步进行环比同比对比才能确定高低,如果出于较低水准,则可能要考虑推送机制(推送的商品是否符合用户浏览倾向、质量如何、定价如何等)
从后两列柱形图来看,虽然从数字上收藏行为与加购行为对购买的转化率较高,但由于没有一一对应所购买的商品是否有收藏、加购行为,无法得出收藏加购后购买的可能性提高的结论。主要因为用户路径可能存在多种可能,点击、收藏与加购并非顺序固定的流程,故也不便使用漏斗图,无法通过单环节的流量比率来判断各环节的转化率。
3.2用户路径分析
3.2.1用户路径计算
针对用户路径多样的情况,对所有购买商品探究其潜在路径,结合判断用户转化与流失
#-—————用户购买路径偏好分析——————
#购买的用户集合(有多少个用户购买过,如果不加set会是array类型,加set便于转化为dataframe,为啥非得是Set,用list试了下很慢很慢)
buy_route_set=set(behavior_data[behavior_data['behavior_type']=='buy']['user_id'].unique())
#取出所有购买记录按时间排序后再按用户、商品id分组,便于下一步对每件售出商品探究路径
buy_route_data=behavior_data[behavior_data['user_id'].map(lambda a: a in buy_route_set )].sort_values(by='date').groupby(['user_id',"item_id","item_category"],as_index=False)
#上面这一套有点类似于SQL先取出符合条件的id,再子查询嵌套select x where id in(xxx)得出这些id的所有记录
#同一用户对同一件商品若购买多件,则按照最后一件的购买时间作为购买时间的标志
#直接购买用户数
buy_route_data_num1=buy_route_data.filter(lambda x: set(x[x['date']<=x[x['behavior_type']=='buy']['date'].max()]['behavior_type'])=={'buy'})['user_id'].nunique()
#思路在于在按用户、商品group后,首先保证buy的日期最晚,随后取出在该日期前的用户行为,细化到用户行为只有'buy'的,对userid去重计数
print('直接购买用户数量',buy_route_data_num1)
buy_route_data_num2=buy_route_data.filter(lambda x: set(x[x['date']<=x[x['behavior_type']=='buy']['date'].max()]['behavior_type'])=={'click','buy'})['user_id'].nunique()
#思路在于在按用户、商品group后,首先保证buy的日期最晚,随后取出在该日期前的用户行为,细化到用户行为只有'click'与'buy'的,即该商品在购买(buy)之前只经历了click的行为,即由click转化到buy,对userid去重计数
print('点击-购买用户数量',buy_route_data_num2)
buy_route_data_num3=buy_route_data.filter(lambda x: set(x[x['date']<=x[x['behavior_type']=='buy']['date'].max()]['behavior_type'])=={'click','collect','buy'})['user_id'].nunique()
print('点击-收藏-购买用户数量',buy_route_data_num3)
buy_route_data_num4=buy_route_data.filter(lambda x: set(x[x['date']<=x[x['behavior_type']=='buy']['date'].max()]['behavior_type'])=={'click','cart','buy'})['user_id'].nunique()
print('点击-加购-购买用户数量',buy_route_data_num4)
buy_route_data_num5=buy_route_data.filter(lambda x: set(x[x['date']<=x[x['behavior_type']=='buy']['date'].max()]['behavior_type'])=={'click','collect','cart','buy'})['user_id'].nunique()
print('点击-收藏-加购-购买用户数量',buy_route_data_num5)
直接购买用户数量 3322
点击-购买用户数量 2393
点击-收藏-购买用户数量 45
点击-加购-购买用户数量 262
点击-收藏-加购-购买用户数量 3
(PS:运行时间花了好久)
直接购买、点击-购买是比较主要的路径,收藏、加购后购买相对较少
3.2.2 结论
①点击后的转化率相对较低,需要与业内其他平台的相关指标进行对比,如果处于较低水平,可以考虑推送机制是否精准、推送的商品质量是否有待提高、定价相对同行是否过高、详情页是否需要优化、售前服务质量是否有待提高等维度来定位问题所在
②结合上文收藏、点击数据可见,虽然收藏、加购的用户量不低,但真正转化为购买的用户量占比较少。收藏的转化相对更低,是否可以考虑对收藏一段时间但尚未下单的商品设置推送提醒,或者对用户收藏、加购的商品品类发放优惠券、推送促销活动,也可推送与收藏加购商品同类别但更畅销、更优质的商品以提升销量。
3.3用户留存
3.3.1用户留存指标计算
这一块感觉看别人用的Python代码略复杂,改用MySQL实现计算,Tableau接入绘图
select
register_time,
count(distinct a.user_id) as new_user_daily,
count(distinct case when DATEDIFF(DATE_FORMAT(time,'%Y-%m-%d'),register_time)=1 then a.user_id else null end) / count(distinct a.user_id) as retain1,
count(distinct case when DATEDIFF(DATE_FORMAT(time,'%Y-%m-%d'),register_time)=3 then a.user_id else null end) / count(distinct a.user_id) as retain3,
count(distinct case when DATEDIFF(DATE_FORMAT(time,'%Y-%m-%d'),register_time)=7 then a.user_id else null end) / count(distinct a.user_id) as retain7,
count(distinct case when DATEDIFF(DATE_FORMAT(time,'%Y-%m-%d'),register_time)=14 then a.user_id else null end) / count(distinct a.user_id) as retain14,
count(distinct case when DATEDIFF(DATE_FORMAT(time,'%Y-%m-%d'),register_time)=30 then a.user_id else null end) / count(distinct a.user_id) as retain30
from
(SELECT
user_id,
min(DATE_FORMAT(time,'%Y-%m-%d')) as register_time
from
taobao_user_bahavior
group by
user_id
) a left join taobao_user_bahavior b on a.user_id=b.user_id and DATEDIFF(DATE_FORMAT(time,'%Y-%m-%d'),register_time)>0
group by register_time
-- 假设11.18用户为首日新增
(如果按照自身与自身连接应该可以算出活跃用户的留存,但是可能电脑性能不太行,SQL没跑出来,显示磁盘空间不足)
![](https://i-blog.csdnimg.cn/blog_migrate/e3a4c6067a831fe0933cc0f2caf2ca0c.png)
3.3.2结论
前期整体来看留存率随时间推移较为平稳,也有部分日期呈现出相对较大的涨跌,平均来看retain1次日留存约为0.39,短期留存还有较大提升空间,或可考虑通过分发推送提醒等方式提升。
3.4用户RFM
3.4.1RFM分类
由于该数据集缺乏金额数据,故此处仅从R(最近一次购买时间)、F(购买频率)两个维度进行拆分。
# R:最近一次交易时间间隔,F:频率,此处定义为这一个月里的消费品率
date_max=behavior_data['date'].max()
data_RFM=pd.DataFrame()
data_RFM['R']=(date_max-behavior_data[behavior_data['behavior_type']=='buy'].groupby('user_id')['date'].max()).map(lambda a: a.days)
#date_max选择数组中的最晚日期,减去有购买行为用户的最晚消费日期,取天数
data_RFM['F']=behavior_data[behavior_data['behavior_type']=='buy'].groupby('user_id')['date'].count()
data_RFM.describe() #描述性统计为打分做依据
def r_score(x):
if x<=2:
return 5
if x>=3 and x<=5:
return 4
if x>=6 and x<=8:
return 3
if x>=9 and x<=17:
return 2
if x>=18:
return 1
def f_score(x):
if x==1:
return 1
if x==2:
return 2
if x==3:
return 3
if x==4:
return 4
if x>=5:
return 5
#为R与F赋值,具体分档赋值应结合业务与经验
data_RFM['R_SCORE']=data_RFM['R'].map(r_score)
data_RFM['F_SCORE']=data_RFM['F'].map(f_score)
#根据评分均值区分True or False 便于最后拆分归类维度
data_RFM['R>R_MEAN']=data_RFM['R_SCORE']>data_RFM['R_SCORE'].mean()
data_RFM['F>F_MEAN']=data_RFM['F_SCORE']>data_RFM['F_SCORE'].mean()
def user_classification(x):
r,f=x
if r==True and f==True:
return '重要价值用户'
elif r==True and f==False:
return '重要发展用户'
elif r==False and f==True:
return '重要保持客户'
elif r==False and f==False:
return '重要挽留客户'
else:
return None
data_RFM['user_classification']=data_RFM[['R>R_MEAN','F>F_MEAN']].apply(user_classification,axis=1)
RFM_user=data_RFM['user_classification'].value_counts()#各个层次用户分别合计
RFM_user / RFM_user.sum() *100 #各个层次用户占比
重要价值用户 31.73%
重要挽留客户 31.26%
重要发展用户 19.47%
重要保持客户 17.54%
3.4.2结论
①重要价值用户:主要提升该部分用户的满意度,服务升级,发放专属特别优惠,推送推广时也应当注意频率和方式,提升用户体验。
②重要发展用户:最近消费时间间隔小,但消费频率不高,需要提高其消费频率,可在每次购买商品收货后提供限时代金券、限时优惠券等,提升下一步的消费欲望。
③重要保持用户:交易频繁但最近无交易,可以向该类用户增加活动优惠、相关商品的推送频率等,唤回该部分用户。
④重要挽留用户:最近消费时间间隔大,且消费频率低,这类用户即将流失,发放调查问卷调查用户体验找出问题原因,想办法挽留客户,若是价格原因则推送优惠券,若是推送不准确则改进推送机制。
4.商品维度分析
根据二八法则判断重点销售的商品品类及单个商品(数据集缺乏销售数据,只能统计下销量,若搭配销售二八法则可能更好)
#求每个品类销售数量二八区分
item_category=behavior_data[behavior_data['behavior_type']=='buy'].groupby('item_category')['user_id'].count().sort_values(ascending=False).reset_index()
item_category.rename(columns={'user_id':'item_category_count'},inplace=True) #改名
item_category['累积销售数量']=item_category['item_category_count'].cumsum() #求累计
total_count=item_category['累积销售数量'].max() #累计一共是多少
item_category['累计占比']=item_category['累积销售数量']/total_count #求占比
#求单个商品销售数量二八区分
item=behavior_data[behavior_data['behavior_type']=='buy'].groupby('item_id')['user_id'].count().sort_values(ascending=False).reset_index()
item.rename(columns={'user_id':'item_id_count'},inplace=True) #改名
item['累积销售数量']=item['item_id_count'].cumsum() #求累计
total_id_count=item['累积销售数量'].max() #累计一共是多少
item['累计占比']=item['累积销售数量']/total_id_count #求占比
#绘制占比图
plt.subplot(121)
plt.title('商品品类销量占比')
plt.ylabel('累计比率')
plt.plot(item_category['累计占比'])
plt.grid()
plt.subplot(122)
plt.title('单个商品销量占比')
plt.ylabel('累计比率')
plt.plot(item['累计占比'])
plt.grid()
plt.show()
前600个品类贡献了近80%的销量(占比约30%),前7500个品类贡献了近80% ,后者分布过于零散可能如果有金额数据更好,整体来看运营活动针对这30%的商品品类应当分配更多的资源,以期获得显著的销量提升效果。
5.总结
1.基本情况
自2014.11.18—2014.12.18,网站总访问量100万次,总访客数9918人,人均访问量101次,日均访问量约3万次;在用户行为数据中,其中商品详情页点击次数约94万次,加购次数约2万8千次,收藏次数约2万次,购买次数约1万次;具体到购买数据中,购买用量为4607人,人均购买次数约为1次/人,购买用户人均购买次数约为2次/人,购买率约46%(有46%的人在使用APP后会选在进行购买),复购率约49%(有49%的人在首次购买后仍会选择使用该APP进行二次及以上复购)这一个月中用户购买率及复购率都接近50%
2.流量维度
用户的活跃时间基本规律得集中于18-22点,用户访问量、各项行为指标明显上升,故而可在此期间多进行推送、促销等活动
3.用户维度
①点击后的转化率还需进一步进行环比同比对比才能确定高低,如果出于较低水准,则可能要考虑推送机制(推送的商品是否符合用户浏览倾向、质量如何、定价如何等)
②直接购买、点击-购买是比较主要的路径,收藏、加购后购买相对较少;收藏的转化相对更低,是否可以考虑对收藏一段时间但尚未下单的商品设置推送提醒,或者对用户收藏、加购的商品品类发放优惠券、推送促销活动,也可推送与收藏加购商品同类别但更畅销、更优质的商品以提升销量。
③整体来看留存率随时间推移较为平稳,也有部分日期呈现出相对较大的涨跌,可判断是否触及警戒需要排查原因等;平均来看retain1次日留存约为0.39,短期留存还有较大提升空间,或可考虑通过分发推送提醒等方式提升。
④根据RFM进行用户分类,针对不同价值用户采取不同策略,将用户向重要价值用户方向提升,减少挽留用户
4.商品维度
根据二八法则敲定重点商品与品类加大资源倾斜