基于AARRR、RMF模型对淘宝用户行为进行分析


一、分析目的

客户商业价值的概念是基于客户对商家的利益而言的。客户作为企业收入的来源,是企业生存的基础。从战略的角度讲,客户不仅决定着企业的收入,而且是企业借助其品牌自身形象、提高企业市场价值、建立竞争优势的宝贵财富。对于企业而言,客户是一种具有商业价值的利润源泉。
本文针对淘宝双十一期间的客户数据流,利用AARRR模型进行分析,解决三个问腿:不同时间维度下用户活跃度如何变化;用户的留存情况如何(复购率及漏斗流失情况)以及用户价值情况。

二、数据来源

字段说明

本数据集共有大约1200万条数据,数据为淘宝APP2014年11月18日至2014年12月18日的用户行为数据,共6列字段,列字段如下:

字段名称字段含义
user_id用户身份(脱敏)
item_id商品ID(脱敏)
behavior_type用户行为类型(包含点击、收藏、加购物车、支付四种行为,分别用数字1、2、3、4表示)
user_geohash地理位置
item_category品类ID(商品所属的品类)
time用户行为发生的时间

三、数据处理

1.引入库

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')

2.数据清理及预处理

data = pd.read_csv('tianchi_mobile_recommend_train_user.csv')
# 删除重复值
data.drop_duplicates(inplace=True)
#查看缺失值
data.isnull().sum()
# 缺失值均为地理信息,对用户行为分析无影响,不做处理
data.drop('user_geohash',axis=1, inplace=True)
#恢复索引
data = data.reset_index(drop=True)
# 将time列拆分为date列和hour列
data['time'] = pd.to_datetime(data['time'])
data['date'] = data['time'].dt.date
data['date'] = pd.to_datetime(data['date'])
data['hour'] = data['time'].dt.hour
data.head()
#将item_id和item_category转换成str
data.item_id = data.item_id.astype(str)
data.item_category = data.item_category.astype(str)

四、用户行为分析(AARRR模型)

活跃度

首先计算出日访问量,日独立访客量和人均访问量,封装成一个新的df。

#日访问量
pv_daily_s = data.groupby(by='date')['user_id'].count()
pv_daily_s.head()

在这里插入图片描述

#日独立访客量
uv_daily_s = data.groupby(by='date')['user_id'].nunique()
uv_daily_s.head()

在这里插入图片描述

#人均访问量(日访问量/日独立访客量)
uv_pv_s = pv_daily_s / uv_daily_s
uv_pv_s.head()

在这里插入图片描述

df = pd.concat((pv_daily_s,uv_daily_s,uv_pv_s),axis=1)
df.columns = ['pv','uv','pv/uv']
df.head()

在这里插入图片描述
接着对日访问量、日独立访问量、人均访问量进行分析

plt.figure(figsize=(13,13), dpi=320)
plt.figure(1)
ax1 = plt.subplot(311)
ax1.plot(df.index,df.pv, color="b",linestyle = "-")
ax1.set_title('pv')
ax2=plt.subplot(312)
ax2.plot(df.index,df.uv, color="r",linestyle = "-")
ax2.set_title('uv')
ax3=plt.subplot(313)
ax3.plot(df.index,df.pv/df.uv, color="k",linestyle = "-")
ax3.set_title('pv/uv')

得出如下图所示:
在这里插入图片描述
根据上图可得结论:在12月5日之前,活跃度在一定水平上波动。12月5日后,活跃度开始明显上升,并在双十二当天达到峰值。初步推断其可能的原因为12月5日之后双十二预热活动开始,用户活跃度上升。

双十二当天活跃度的变化

选择双十二当天的数据,分析其活跃时间段,双12当天每小时的访问量,双12当天每小时的访客量,双12当天每小时的人均访问量,形成一个新的df

#取出双12当天的数据
data_1212 = data.loc[data['date']=='2014-12-12']
#查看双12当天每小时的访问量
pv_hour_s = data_1212.groupby(by='hour')['user_id'].count()
#查看双12当天每小时的访客量
uv_hour_s = data_1212.groupby(by='hour')['user_id'].nunique()
#查看双12当天每小时的人均访问量
pv_uv_s = pv_hour_s / uv_hour_s
df = pd.concat((pv_hour_s,uv_hour_s,pv_uv_s),axis=1)
df.columns = ['pv_hour','uv_hour','pv/uv']
df.head()

在这里插入图片描述
对双十二当天每小时访问量、访客量和人均访问量进行数据可视化,得到以下结果:
在这里插入图片描述
根据上图可得结论:双十二当天0点和18点之后淘宝用户活跃度较高,6点跌至最低点。建议商家可以在18点后设置优惠券或采取其他促销手段,吸引更多人消费,提高购买率。

不同用户行为的活跃度变化

pv_df = data.pivot_table(index='date',columns='behavior_type',aggfunc='size',fill_value=0)
pv_df.head()

在这里插入图片描述将四种行为的总量绘制在一个坐标系中查看

plt.figure(figsize=(12,8))
plt.xticks(rotation=30)
plt.plot(pv_df.index,pv_df[1],label='点击')
plt.plot(pv_df.index,pv_df[2],label="收藏")
plt.plot(pv_df.index,pv_df[3],label='加购')
plt.plot(pv_df.index,pv_df[4],label='支付')
plt.legend()

在这里插入图片描述
通过观察上图可得结论,点击、收藏、加购物车、支付这四种行为均在双十二当天达到顶峰。只观察支付和收藏,发现双十二当天支付量大于收藏量。初步推测其可能的原因为支付量大于收藏量说明很多用户购买了目标之外的商品,可能是受到促销的影响冲动消费,又或者是为了凑单等。

留存率

漏斗转化情况

#查看不同行为的访问量,封装到df中
s = data['behavior_type'].value_counts()
s.index = ['点击','收藏','加购物车','支付']
df = pd.DataFrame([s.index,s]).T
df.columns = ['用户行为','访问量']
df

在这里插入图片描述

#计算点击到收藏、收藏到加购,加购到支付的转化率
temp1 = df['访问量'][1:].values
temp2 = df['访问量'][0:-1].values
p = temp1 / temp2 * 100
p = list(p)
p.insert(0,100)
df['单一环节转化率(%)'] = p
df
#计算整体转化率
df['整体转化率(%)'] = df['访问量'] / df.iloc[0,1] * 100
df
#计算每一环节流失率(%)
df['每一环节流失率(%)'] = 100 - df['单一环节转化率(%)']
df

在这里插入图片描述
利用pyecharts库绘制漏斗图:

#整体转化率的漏斗转化图
from pyecharts.charts import Funnel
from pyecharts import options as opts
funnel = Funnel().add(
                series_name = '整体转化率(%)',
                data_pair = [ list(z) for z in zip(df['用户行为'],df['整体转化率(%)']) ],
                is_selected = True,
                label_opts = opts.LabelOpts(position = 'inside')
                )
funnel.set_series_opts(tooltip_opts = opts.TooltipOpts(formatter = '{a}<br/>{b}:{c}%'))
funnel.set_global_opts(title_opts = opts.TitleOpts(title = '整体转化率(%)') )
funnel.render_notebook()

在这里插入图片描述
观察上图可得出结论:用户的流失主要发生在点击-收藏环节。对每个环节的用户流失进行分析,初步推断其可能的原因有以下几点。
从点击到收藏的用户流失。①用户被投放的广告吸引,进入后发现与预期严重不合,造成流失,对此的建议是优化广告。②客户通过检索或推荐到列表页面但没找到合适的产品,造成流失,对此的建议是更新搜索引擎和相关算法,尽可能精准推送相关内容。③如果商品的评价过低,造成流失,对此的建议是商家要做进一步调查,分析用户对商品评价低的原因,进一步改进,提升用户的购物体验,最终可以口碑营销。
从收藏到加购的用户流失。此类用户有较强的购买需求。可以对用户进行精准推送促销信息,刺激用户完成购买。
从加购到支付的用户流失。此环节出现的用户流失往往是由于购买环节复杂导致。所以商家需要优化购物流程,尽可能支持多种支付方式,如银行卡、微信支付、支付宝支付、花呗等。考虑目前到淘宝的购物流程已经很难再简化,需要商家进一步调查,了解用户放弃支付的原因,方便做出调整。

复购情况分析

#用户购买次数直方图
buy_df = data.loc[data['behavior_type'] == 4]
user_buy_s = buy_df.groupby(by='user_id')['behavior_type'].count()
plt.hist(user_buy_s,bins=50)

在这里插入图片描述

#计算复购率=购买次数大于1的用户数量/有购买行为的用户总数
reBuy_rate = user_buy_s[user_buy_s > 1].count() / user_buy_s.count() * 100
reBuy_rate

计算得到复购率为 91.44722034661264,可得结论:2014年11月18日至2014年12月18日这一个月用户复购率高达91.45%

五、用户价值分析(RMF模型)

#将已购用户的数据单独取出
buy_df = data.loc[data['behavior_type'] == 4]
buy_df.head()

在这里插入图片描述

#计算R:R表示客户最近一次交易时间的间隔
#/np.timedelta64(1,'D')去出days
now_date = buy_df['date'].max()
R = buy_df.groupby(by='user_id')['date'].apply(lambda x:now_date - x.max()) / np.timedelta64(1,'D')
#计算F:每个用户消费频率
F = buy_df.groupby(by='user_id')['date'].count()

由于交易金额缺失,所以只考虑最后交易日期和交易频率两个维度。

rfm = pd.DataFrame(data=[R,F],index=['R','F']).T
rfm.head()

在这里插入图片描述

#将各维度分成两个程度
recent_avg = rfm['R'].mean()
freq_avg = rfm['F'].mean()
#R应该是越小越好,则R小于均值返回1,否则返回0
def rec_value(x):
    if x < recent_avg:
        return '1'
    else:
        return '0'
#F应该是越大越好,则F大于均值返回1,否则返回0   
def freq_value(x):
    if x > freq_avg:
        return '1'
    else:
        return '0'
rfm['R_value'] = rfm['R'].apply(rec_value)
rfm['F_value'] = rfm['F'].apply(freq_value)
#将R和F拼接到一起
rfm['rfm']=rfm['R_value'].str.cat(rfm['F_value'])
#根据R和F的拼接判定用户等级
def rfm_value(x):
    if x == '10':#购买间隔短,但是购买频率低
        return '重要发展客户'
    elif x == '01':#购买间隔长,但是购买频率高
        return '重要保持客户'
    elif x == '00':
        return '重要挽留客户'
    else:
        return '重要价值客户'
rfm['user_type'] = rfm['rfm'].apply(rfm_value)
rfm.head()
#计算各类用户占比
user_type_count_s = rfm['user_type'].value_counts()
user_type_count_s / user_type_count_s.sum() * 100

在这里插入图片描述
对此可得出结论,重要挽留客户占比最大,该类用户消费时间间隔较远,并且消费频次低。需要主动联系客户,调查清楚哪里出现了问题,可以通过短信,邮件,APP推送等唤醒客户,尽可能减少流失。重要发展客户消费频次低,可以适当给点折扣或捆绑销售来增加用户的购买频率,尽可能提高留存率。重要价值客户为重点用户,但用户比较少。可以针对性地给这类客户提供 VIP服务;重要保持客户消费时间间隔较远,但是消费频次高。该类用户可能一次性购买很多东西。对于这类客户,需要主动联系,关注他们的购物习性做精准化营销,及时满足这类用户的需求。


总结

以上就是该片文章的所有内容,本文利用pandas、numpy、matplotlib以及pyecharts实行AARRR模型和RMF模型,并对对淘宝双十二期间的用户行为进行分析得出一般性结论,有一定的商业意义。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值