数分练习-淘宝用户行为

一、背景及数据

背景:

# 原数据集共有大约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没跑出来,显示磁盘空间不足) 

从上至下分别为次日、3、7、14、30留存情况,最下一行为日新增用户

 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.商品维度

        根据二八法则敲定重点商品与品类加大资源倾斜

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值