学习复盘 - 淘宝用户行为分析

一、项目背景

1、分析背景

        双十二是中国最大的网购节日之一,由淘宝电商平台发起并广泛推广。作为一天的购物狂欢活动,双十二吸引了大量消费者的关注和参与。在这个节日期间,人们会在淘宝平台上进行大量的购物和交易,这使得双十二成为了一个独特的分析用户行为的机会。双十二淘宝用户行为分析项目从用户访问行为、用户消费行为、用户流失漏斗分析和商户价值RFM分析等多个维度进行研究和分析,以深入了解用户需求和行为,帮助淘宝平台提升用户留存率和收入增长。这样的分析可以为商户提供精准的营销策略和个性化服务,提高用户的购买意愿和忠诚度,从而实现平台、商户和用户的共赢。

针对双十二淘宝用户的行为分析可以提供以下项目背景和目的:

1)用户访问行为分析

这一环节通过对用户访问行为的分析,可以了解用户的关注点、兴趣爱好和搜索意愿等,为后续的用户消费行为提供依据。

2)用户消费行为分析

这一环节包括用户的总购买次数、每日人均购买次数和每日付费率、每小时付费率等。通过对用户的消费行为进行分析,可以了解用户的购买力和购物习惯等,从而为后续的用户留存和流失分析提供依据。

3)用户流失漏斗分析

这一环节包括用户的访问流失、注册转化、购物车转化和订单完成等环节。通过对用户流失漏斗进行分析,可以了解用户的留存率、转化率和订单量等关键指标,从而找出可能导致用户流失的瓶颈环节和改进方案。

4)商户价值RFM分析 

这一环节基于用户消费行为数据进行的客户细分分析方法,通过对用户的最近一次交易时间、购买频率和平均交易金额等指标的评估,将用户分为不同的价值层级,从而提供个性化的营销策略和服务。这样的分析可以帮助商户识别重要价值客户、重要保持客户、重要发展客户和重要挽留客户。

2、数据来源

数据来源于阿里云天池官方数据集,其中数据包含2014年11月17日至2014年12月17日之间约一百万的用户数据;

3、字段理解

user_id:用户编号     

item_id:商品编号

behavior_type:用户行为类型(包含点击、收藏、加购、购买四种行为,原始字段中分别用数字1、2、3、4表示)

user_geohash:地理位置

item_category:商品类别编号

time:用户行为发生时间

二、数据处理

1、导入数据及相关包

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data = pd.read_csv('../Project/tianchi_mobile_recommend_train_user.csv')
#中文字体显示
plt.rcParams["font.family"]="Microsoft YaHei"

其中数据一共12256906条,各字段数据类型符合要求,采样的数据集561.1M。

2、数据清洗

1、重复值处理

查看数据的描述性

data.duplicated().sum()

删除重复数据后只剩80多万数据;

2、缺失值处理
data.isna().sum()

发现数据中缺失值集中存在user_geohash,数据量比较大,可以考虑删除改字段,替换原数据

data.drop(columns='user_geohash',inplace = True)

查看数据中user_geohash字段是否已经被删除

data.info()

3、对时间维度进行拆解

对item_category字段进行处理,考虑进行拆分,time就可以作为日期和时间两个维度进行分析,其中因为split函数只能用于str(字符串),需要将time列的格式转换为str。

 #新建date列,存放time中的日期信息
data['date'] = data['time'].str.split(' ').str[0] 
#新建hour列,存放time中的小时
data['hour'] = data['time'].str.split(' ').str[1] 

对列的数据类型进行更改

data['time'] = pd.to_datetime(data['time'])
data['date'] = pd.to_datetime(data['date'])
data['hour'] = pd.to_numeric(data['hour'])

可以对数据进行重命名,便于记忆

data.rename(columns={'user_id':'用户名','item_id':'商品名','behavior_type':'行为类型','item_category':'商品种类','time':'用户行为时间'},inplace=True)

三、数据分析及可视化

1、用户访问行为分析

  • 每日PV(Page View):当天淘宝APP页面的浏览量或者点击量;
  • 每日UV(Unique Visitor):当天进入淘宝APP的用户数量(需要去重);
1)日访问量

先对数据进行时间date分组再选择任意列来进行计数用户的访问量uv和访问页面用户量pv,这选择的是’用户名‘。其中uv和pv不同在于,uv对于多次访问网页的同一用户不进行重复计数。

pv_daily = data.groupby('date')['用户名'].count() 
uv_daily = data.groupby('date')['用户名'].apply(lambda x:x.drop_duplicates().count())

对数据进行可视化,先构建画布,然后将画布划分出两行列的子区域,将两个图分别放在两个子区域中。

fig = plt.figure()
axes = fig.subplots(2,1)

# 绘制条形图
pv_daily.plot(ax=axes[0],title = 'pv_daily')
uv_daily.plot(ax=axes[1],title = 'uv_daily')
plt.show()
小结:

 1、可以看出pv和uv的最大值都出现在12.12当天,说明双十二的促销活动起到了一定的引流效果
2、pv和uv的变化趋势大概一致,结合两图对比,可以认为uv变化使得pv变化
3、对于平台来说,比起促进同一用户访问多次页面,更重要的是吸引更多的用户从而pv会随之提高
4、pv和uv趋势相似,但pv的数据量比uv大很多,也由此说明同一用户会在同一天访问页面多次

2)小时访问量

小时访问量和日访问量类同,只是分析维度不同,小时访问量的分析维度是hour,日访问量的分析维度是日期date;

pv_hour = data.groupby('hour')['用户名'].count() #与uv_daily不同的是分组依据不同这里是hour
uv_hour=data.groupby('hour')['用户名'].apply(lambda x:x.drop_duplicates().count())
fig = plt.figure()
axes = fig.subplots(2,1)

# 绘制条形图
pv_hour.plot(ax=axes[0],title = 'pv_hour')
uv_hour.plot(ax=axes[1],title = 'uv_hour')
plt.show()

小结:

1、在0-5点的这个时间段里面,pv和uv都是持续下降的趋势
2、在17-21点,uv变化趋势是增加的再持平,但是pv是持平后再增加的趋势,因此可以客观的认为人们再17-21点的空闲时间更多,因此的访问页面的次数也增多
3、因此可以认为17-21点是淘宝用户活跃的时间段,平台可以在这个时间段推送商品。

2、用户消费行为分析

1)用户总购买次数

先在用户行为类型的字段中筛选出付款用户的的数据集

data_paid = data[data.行为类型 == 4]
data_paid

data_buy.describe()

先通过data_buy.describe()会计算出 data_buy 数据的均值、标准差、最小值、25%分位数、中位数(50%分位数)、75%分位数和最大值等统计信息

再画频数分布图,分为50组(组距770/50=15.4)

plt.hist(data_buy,bins=50)
plt.show()

小结:

购买次数在0-15.4之间的数据占绝大多数,平台可以关注购买次数在15.4以上的用户,可能还会有价值。

2)每日人均购买次数

先查看已经付费的用户明细的数据集,在上面已将筛选出来了,是data_paid数据集。

其次是对 data_paid 数据按照日期和用户名进行分组,并计算每个组中商品名出现的次数。

data_perdaypeo=data_paid.groupby(['date','用户名'])['商品名'].count()
data_perdaypeo

最后对 data_perdaypeo 数据按照日期进行分组,并计算每个日期下的平均每人购买商品数量。

data_daypeo=data_perdaypeo.groupby('date').sum()/data_perdaypeo.groupby('date').count()
data_daypeo

最后可视化,先输出 data_daypeo 数据的描述统计信息,然后绘制折线图,最后显示图形。这样可以通过统计结果了解数据的分布情况,并通过折线图观察每天平均每人购买商品数量的变化趋势。

data_daypeo.describe() 
data_daypeo.plot()

小结:

12.12的人均购买次数最多,并且人均购买次数大于2.176825的顾客可以挖掘其价值.

3)每日付费率、每小时付费率

每日付费率:每日付费用户数量/每日活跃用户的数量

每小时付费率 :每小时付费的用户数量/每小时活跃的用户数

每日付费率:

#每日付费率
data_paid.head()
data_pay=data_paid.groupby('date')['用户名'].apply(lambda x:x.drop_duplicates().count())/data.groupby('date')['用户名'].apply(lambda x:x.drop_duplicates().count())
data_pay
data_pay.describe()
plt.plot(data_pay)
plt.xticks(rotation=70)
plt.show()

小结:

1、由图显而易见,12.12当天的付费率最高,并且高于标准差0.05,数据是非常可观的
2、12.1-12.8期间日付率有所下降,可能是因为用户在等待12.12的促销活动,致使12.12的付费率最可观。

每小时付费率:

#每小时付费率
data_paid.head()
data_pay_hour=data_paid.groupby('hour')['用户名'].apply(lambda x:x.drop_duplicates().count())/data.groupby('hour')['用户名'].apply(lambda x: x.drop_duplicates().count())
data_pay_hour.describe()
plt.plot(data_pay_hour)
plt.show

小结:

1、10点之后的付费率比较高,在21点到达了极值
2、在15-19点付费率明显下降,可能这个时间点是下班高峰期,由此可见平台可以在19点之后推广产品信息,避开15-19点这个时间段尽量在19-21点之间

4)复购率

购买天数大于等于2的用户数量 / 购买天数大于1的用户

data_paid.head()
# 对日期进行去重
data_rebuy=data_paid.groupby('用户名')['date'].apply(lambda x:x.drop_duplicates().count())
data_rebuy_rate=data_rebuy[data_rebuy >1].count()/data_rebuy[data_rebuy >0].count()
data_rebuy_rate

算出复购率0.8717083051991897

小结:

用户的复购率在87%,说明双十二活动抓住了用户的爽点,用户在双十二期间粘性很高.

3、漏斗流失分析

先筛选出浏览、点击、收藏、加购、购买五个数据集 其数据量分别是8164040、7479078、240919、333371、110672。

# 页面访问数(浏览用户数)
data0 = data['用户名'].count()
# 行为类型为1的用户数(点击用户数)
data1 = data[data.行为类型==1]['用户名'].count()
# 行为类型为2的用户数(收藏用户数)
data2 = data[data.行为类型==2]['用户名'].count()
# 行为类型为3的用户数(加购用户数)
data3 = data[data.行为类型==3]['用户名'].count()
# 行为类型为4的用户数(购买用户数)
data4 = data[data.行为类型==4]['用户名'].count()

数据可视化:

# 制作漏斗图
# 导入库
import plotly.graph_objects as go
# 创建漏斗图数据列表
user_counts = [data0, data1, data3, data2, data4]
# 创建漏斗图标签列表
labels = ['总用户数', '点击用户数', '加购用户数', '收藏用户数', '购买用户数']
# 创建漏斗图
fig = go.Figure(go.Funnel(
    y = labels,
    x = user_counts,
    textinfo = "value+percent initial",
    marker = {"color": ["#A5B1D1", "#6D9ECB", "#3D85C6", "#1A6DB1", "#005599"]},
))

# 设置漏斗图布局
fig.update_layout(
    title = "用户行为漏斗图",
    font = {"size": 14},
)

# 显示漏斗图
fig.show()

小结:

1、图中发现用户流失率最高的环节是点击-加购
2、 直观发现数据并不是很理想,平台应该优化商品的信息,突出商品的优势,或者优惠力度增强用户的购买欲抓住用户的爽点

补充plotly.graph_objects 和 matplotlib.pyplot 的不同:

  • matplotlib.pyplot 是Python中最著名的绘图模块之一。它有完整的函数库,可用于绘制各种静态图形,如折线图、散点图、直方图、条形图等。Matplotlib 所绘制的图形可以保存为PDF、SVG、JPG、PNG等格式的文件。

  • plotly.graph_objects 可以用于制作交互式数据可视化图形。Plotly是一种基于Web的绘图库,它将数据可视化提升到了一个全新的层次。Plotly支持可交互的图形,用户可以直接在图形上操作,例如缩放、拖动、旋转、选择等。

4、商户价值RFM分析

RFM模型
1、r recency:用户的新近性,最后一次消费时间体现。
2、f frequency:用户的消费频率
3、m monetary:用户的消费金额,此数据没有涉及消费金额,可以不分析此维度

R 思路:

1、根据用户进行分组,获得每个用户最大的日期
2、通过日期计算消费间隔,进而计算平均间隔,大于均值的赋予标签1,小于均值赋予0

F 思路:统计各个用户的消费频次,小于均值为0,大于为1

data_paid.head()
import datetime
data_recency = data_paid.groupby('用户名')['date'].max()
data_recency = (pd.to_datetime(datetime.date.today())-data_recency).apply(lambda x:x.days)
data_recency_avg = data_recency.mean()
data_recency[data_recency<data_recency_avg] = 0
data_recency[data_recency>=data_recency_avg] = 1

data_recency

data_frequency = data_paid.groupby('用户名')['商品名'].count()
data_frequency_avg = data_frequency.mean()
data_frequency[data_frequency<data_frequency_avg] = 0
data_frequency[data_frequency>=data_frequency_avg] = 1
data_frequency

 将R和F整合在一起拼接r,f需要将其转为字符串

data_rf = pd.concat([data_recency,data_frequency],axis=1)
data_rf.columns = ['recency','frequency']
data_rf['recency'] = data_rf['recency'].astype(str)
data_rf['frequency'] = data_rf['frequency'].astype(str)
data_rf['RF'] = data_rf['recency']  + data_rf['frequency']
data_rf

 对不同分类重命名为中文,更加直观

def trans_label(x):
    if x == '00':
        return '重要挽留客户'
    elif x== '01':
        return '重要保持客户'
    elif x == '10':
        return '重要发展客户'
    else:
        return '重要价值客户'

一个新的列,通过对 data_rf['RF'] 应用 trans_label 函数得到的结果进行赋值。

统计客户类型并且可视化

plt.rcParams["font.family"]="Microsoft YaHei" 
labels = ['重要价值客户', '重要保持客户', '重要发展客户', '重要挽留客户']
counts = [464, 2412, 3042, 2968]

plt.bar(labels, counts)
plt.xlabel('客户类型')
plt.ylabel('数量')
plt.title('不同客户类型数量分布')
plt.show()

小结:

由数据可知:
 这类数据中重要价值客户数量并不理想因此我们可以针对不同的客户有不同营销方法
1.重要挽留客户:这类客户过去可能是高价值客户,但最近的购买行为有所下降,面临着流失的风险,商户和平台可以通过个性化推荐和定向营销的方式提高客户的忠诚度,防止流失
2.重要保持客户:这类客户频繁购买但是最近的购买行为有所减少,商户可以保持和巩固与这类客户的关系,注重商品的信息,可提供个性化懂得优惠,激发此类客户的再次购买欲望
3.重要发展客户:这类客户近期购买频率增加,商户要对这类客户重度关注,同时注意商品的品质,定期提供个性化推荐和促销。跨销售等方式增强这类客户的粘性
4.重要价值客户:这类客户无论是过去还是最近,购买频率都表现的很出色,针对这类客户要提供vip待遇,成为极度关注的客户群体,为他们提供特别的关怀和优惠,进一步提高他们的忠诚度和购买频率,增加这类客户的生命周期。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值