网购用户行为模式分析

目录

1. 项目背景

网购已经成为人们生活不可或缺的一部分,本次项目基于淘宝app平台数据,通过相关指标对用户行为进行分析,从而探索用户相关行为模式。

提出问题

1.日PV有多少
2.日UV有多少
3.付费率情况如何
4.复购率是多少
5.漏斗流失情况如何
6.用户价值情况
在这里插入图片描述

漏斗流失分析

漏斗分析是一套流程式数据分析,它能够科学反映用户行为状态以及从起点到终点 各阶段用户转化率情况的重要分析模型
在这里插入图片描述

RFM模型

用户分类(RFM模型),对比分析不同用户群体在时间、地区等维度下交易量, 交易金额指标,并根据分析结果提出优化建议

  • R: 最近一次消费时间(最近一次消费到参考时间的长度)
  • F: 消费的频次(单位时间内消费了多少次)
  • M:消费的金额(单位时间内总消费金额)
RFM用户分类相应策略
重要价值用户RFM得分都高于平均值,属于优质客户,需要保持
重点保持用户交易金额和交易次数都很大,但最近交易很少,需要唤回
重点发展用户交易金额大贡献度高,且最近有交易,需要重点识别
重点挽留用户交易次数多且最近有交易,但交易金额较小,需要挖掘客户需求
一般价值用户交易金额大,但最近交易很少,且交易次数少,需要挽留
一般保持用户交易次数多,但贡献不大,一般保持
一般发展用户最近有交易,属于新客户,有推广价值
一般挽留用户RFM得分都低于平均值,最近再没有交易,属于流失

2. 理解数据

2.1 导入相关库

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import plotly as py
import plotly.graph_objs as go
py.offline.init_notebook_mode()
pyplot=py.offline.iplot
import seaborn as sns
sns.set(style='darkgrid',context='notebook',font_scale=1.5) 
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False 
import warnings
warnings.filterwarnings('ignore')

2.2 导入数据

data_user=pd.read_csv('tianchi_mobile_recommend_train_user.csv',dtype=str)
data_user.head()

user_id	item_id	behavior_type	user_geohash	item_category	time
0	98047837	232431562	1	NaN	4245	2014-12-06 02
1	97726136	383583590	1	NaN	5894	2014-12-09 20
2	98607707	64749712	1	NaN	2883	2014-12-18 11
3	98662432	320593836	1	96nn52n	6562	2014-12-06 10
4	98145908	290208520	1	NaN	13926	2014-12-16 21

查看数据,列字段分别是:

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

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 12256906 entries, 0 to 12256905
Data columns (total 6 columns):
 #   Column         Dtype 
---  ------         ----- 
 0   user_id        object
 1   item_id        object
 2   behavior_type  object
 3   user_geohash   object
 4   item_category  object
 5   time           object
dtypes: object(6)
memory usage: 561.1+ MB

3. 数据预处理

3.1 缺失值处理

#统计缺失值
data_user.apply(lambda x:sum(x.isnull()),axis=0)

user_id                0
item_id                0
behavior_type          0
user_geohash     8334824
item_category          0
time                   0
dtype: int64
data_user.apply(lambda x:sum(x.isnull())/len(x),axis=0)

user_id          0.00000
item_id          0.00000
behavior_type    0.00000
user_geohash     0.68001
item_category    0.00000
time             0.00000
dtype: float64
  • 存在缺失值的是User_geohash,有8334824条,缺失率0.68,不能删除缺失值,因为地理信息在数据集收集过程中做过加密转换,因此对数据集不做处理。

3.2 一致化处理

用户行为发生的时间由日期和小时构成,需要将该列进行拆分

#拆分数据集
data_user['date']=data_user['time'].str[0:10].str.strip()
data_user['hour']=data_user['time'].str[11:].str.strip()
data_user.head()

user_id	item_id	behavior_type	user_geohash	item_category	time	date	hour
0	98047837	232431562	1	NaN	4245	2014-12-06 02	2014-12-06	02
1	97726136	383583590	1	NaN	5894	2014-12-09 20	2014-12-09	20
2	98607707	64749712	1	NaN	2883	2014-12-18 11	2014-12-18	11
3	98662432	320593836	1	96nn52n	6562	2014-12-06 10	2014-12-06	10
4	98145908	290208520	1	NaN	13926	2014-12-16 21	2014-12-16	21

# 查看data_user数据集数据类型:
data_user.dtypes

user_id          object
item_id          object
behavior_type    object
user_geohash     object
item_category    object
time             object
date             object
hour             object
dtype: object

#数据类型转换:time,date应该为日期格式,hour应该为整数型
data_user['time']=pd.to_datetime(data_user['time'])
data_user['date']=pd.to_datetime(data_user['date'])
data_user['hour']=data_user['hour'].astype('int64')

#检查数据类型转换结果
data_user.dtypes

user_id                  object
item_id                  object
behavior_type            object
user_geohash             object
item_category            object
time             datetime64[ns]
date             datetime64[ns]
hour                      int64
dtype: object

3.3 异常值处理

#对数据按照time字段进行排序处理
data_user.sort_values(by='time',ascending=True,inplace=True)
#重建索引
data_user.reset_index(drop=True,inplace=True)
data_user.head()

user_id	item_id	behavior_type	user_geohash	item_category	time	date	hour
0	73462715	378485233	1	NaN	9130	2014-11-18	2014-11-18	0
1	36090137	236748115	1	NaN	10523	2014-11-18	2014-11-18	0
2	40459733	155218177	1	NaN	8561	2014-11-18	2014-11-18	0
3	814199	149808524	1	NaN	9053	2014-11-18	2014-11-18	0
4	113309982	5730861	1	NaN	3783	2014-11-18	2014-11-18	0

#查看统计量
data_user.describe(include=['object'])

user_id	item_id	behavior_type	user_geohash	item_category
count	12256906	12256906	12256906	3922082	12256906
unique	10000	2876947	4	575458	8916
top	36233277	112921337	1	94ek6ke	1863
freq	31030	1445	11550581	1052	393247
  • 通过观察数据集的统计等,发现数据集并无异常值存在。

4. 构建模型(用户行为分析)

4.1 pv和uv分析

PV(访问量):即Page View, 具体是指网站的页面浏览量或者点击量,页面被刷新一次就计算一次。
UV(独立访客):即Unique Visitor,访问网站的一台电脑客户端为一个访客。

(1)每天访问量分析

# pv_daily记录每天用户操作次数
pv_daily=data_user.groupby('date').count()['user_id'].rename()
pv_daily.head()

date
2014-11-18    366701
2014-11-19    358823
2014-11-20    353429
2014-11-21    333104
2014-11-22    361355
dtype: int64

# uv_daily记录每天不同的上线用户数量
uv_daily=data_user.groupby('date')['user_id'].apply(lambda x:x.drop_duplicates().count())
uv_daily.head()

date
2014-11-18    6343
2014-11-19    6420
2014-11-20    6333
2014-11-21    6276
2014-11-22    6187
Name: user_id, dtype: int64

#将两个数据进行合并
pv_uv_daily=pd.concat([pv_daily,uv_daily],axis=1)
pv_uv_daily.rename(columns={0:'pv','user_id':'uv'},inplace=True)
pv_uv_daily.head()


pv	uv
date		
2014-11-18	366701	6343
2014-11-19	358823	6420
2014-11-20	353429	6333
2014-11-21	333104	6276
2014-11-22	361355	6187

#pv与uv相关性研究
corr=pv_uv_daily.corr(method='pearson')
print('访问量与访问用户数的相关系数为:{:.2f}'.format(corr.iloc[0,1]))
访问量与访问用户数的相关系数为:0.92

#每天访问量情况可视化
plt.figure(figsize=(16,9))
plt.subplot(211)
plt.plot(pv_daily,color='red')
plt.title('网页访问量每日变化趋势')
plt.xticks(fontsize=10)
plt.subplot(212)
plt.plot(uv_daily,color='green')
plt.title('用户访问量每日变化趋势')
plt.xticks(fontsize=10)
plt.suptitle('PV和UV变化趋势',size=30)
plt.show()

在这里插入图片描述

  • 通过图形观察,发现在双十二期间,pv和uv访问量达到峰值,并且可以发现,uv和pv两个访问量数值差距比较大

(2)小时访问量分析

# pv_hourly记录每小时用户操作次数
pv_hourly=data_user.groupby('hour').count()['user_id'].rename()
pv_hourly.head()

hour
0    517404
1    267682
2    147090
3     98516
4     80487
dtype: int64

# uv_hourly记录每小时的上线用户数量
uv_hourly=data_user.groupby('hour')['user_id'].apply(lambda x:x.drop_duplicates().count())
uv_hourly.head()

hour
0    5786
1    3780
2    2532
3    1937
4    1765
Name: user_id, dtype: int64

#将两个数据进行合并
pv_uv_hourly=pd.concat([pv_hourly,uv_hourly],axis=1)
pv_uv_hourly.rename(columns={0:'pv','user_id':'uv'},inplace=True)
pv_uv_hourly.head()

pv	uv
hour		
0	517404	5786
1	267682	3780
2	147090	2532
3	98516	1937
4	80487	1765

#二者相关性
corr=pv_uv_hourly.corr(method='spearman')
print('访问量与访问用户数的相关系数为:{:.2f}'.format(corr.iloc[0,1]))
访问量与访问用户数的相关系数为:0.90

#每小时访问量情况可视化
plt.figure(figsize=(16,9))
pv_uv_hourly['pv'].plot(color='steelblue',label='每个小时的访问量')
plt.legend(loc='upper left')
plt.ylabel('每小时访问量',labelpad=20)
pv_uv_hourly['uv'].plot(color='red',secondary_y=True,label='每个小时的不同用户访问量')
plt.legend(loc='upper center')
plt.ylabel('每小时访问用户量',labelpad=20)
plt.xticks(range(0,24),pv_uv_hourly.index)
plt.grid(True)
plt.show()

在这里插入图片描述

  • pv和uv在凌晨0-5点期间波动情况相同,都呈下降趋势,访问量都比较小,同时在晚上18:00左右,pv波动情况比较剧烈,相比来看uv不太明显,因此晚上18:00以后是淘宝用户访问app的活跃时间段。

(3)不同行为类型用户pv分析

# 计算不同的用户行为,在每个小时的访问量
pv_detail=pd.pivot_table(columns='behavior_type',index='hour',data=data_user,\
                         values='user_id',aggfunc=np.size)
pv_detail.head()

behavior_type	1	2	3	4
hour				
0	487341	11062	14156	4845
1	252991	6276	6712	1703
2	139139	3311	3834	806
3	93250	2282	2480	504
4	75832	2010	2248	397

#数据可视化
plt.figure(figsize=(12,8))
sns.lineplot(data=pv_detail)
plt.show()

plt.figure(figsize=(12,8))
sns.lineplot(data=pv_detail.iloc[:,1:])
plt.show()

在这里插入图片描述
在这里插入图片描述

  • 通过图发现,点击这一用户行为相比较于其他三类用户行为,pv访问量较高,同时四种用户行为的波动情况基本一致,因此晚上这一时间段不管哪一种用户行为,pv访问量都是最高的。
    可以看出,加入购物车这一用户行为的pv总量高于收藏的总量,因此在后续漏斗流失分析中,用户类型3应该在2之前分析。

4.2 用户消费行为分析

(1)用户购买次数情况分析

# 取出支付的用户
data_user_buy=data_user[data_user.behavior_type=='4'].groupby('user_id').size()
data_user_buy.describe()

count    8886.000000
mean       13.527459
std        19.698786
min         1.000000
25%         4.000000
50%         8.000000
75%        17.000000
max       809.000000
dtype: float64

plt.hist(x=data_user_buy,bins=100)
plt.show()

在这里插入图片描述

  • 图表显示:淘宝用户消费次数普遍在10次以内,因此需要重点关注购买次数在10次以上的消费者用户群体。

(2)分析日ARPPU

  • ARPPU(average revenue per paying user)是指从每位付费用户身上获得的收入,它反映的是每个付费用户的平均付费额度
  • ARPPU=总收入/活跃用户付费数量
  • 本数据集中没有消费金额,因此在计算过程中用消费次数代替消费金额
# 人均消费次数=消费总次数/消费人数
data_user_buy1=data_user[data_user.behavior_type=='4'].groupby(['date','user_id'])['behavior_type'].\
count().reset_index().rename(columns={'behavior_type':'total'})
data_user_buy1.head()

date
2014-11-18    3730
2014-11-19    3686
2014-11-20    3462
2014-11-21    3021
2014-11-22    3570
Name: total, dtype: int64

#统计每天的消费总次数
data_user_buy1.groupby('date').sum()['total'].head()
#统计每天的消费人数
data_user_buy1.groupby('date').count()['user_id'].head()
#计算每天的人均消费次数
data_user_buy2=data_user_buy1.groupby('date').sum()['total']/data_user_buy1.groupby('date').count()['total']
data_user_buy2.head()

date
2014-11-18    2.423652
2014-11-19    2.439444
2014-11-20    2.320375
2014-11-21    2.271429
2014-11-22    2.530120
Name: total, dtype: float64

data_user_buy2.describe()
data_user_buy2.plot()
plt.show()

在这里插入图片描述

  • 平均每天消费次数在2-3次之间波动,双十二期间消费次数达到最高值。

(3)日ARPU情况

  • ARPU(Average Revenue Per User) :平均每用户收入,可通过 总收入/AU 计算得出。它可以衡量产品的盈利能力和发展活力。
  • 活跃用户数平均消费次数=消费总次数/活跃用户人数(每天有操作行为的为活跃)
data_user['operation']=1
data_user_buy3=data_user.groupby(['date','user_id','behavior_type'])['operation'].count().reset_index()
data_user_buy3=data_user_buy3.rename(columns={'operation':'total'})
data_user_buy3.head()

	date	user_id	behavior_type	total
0	2014-11-18	100001878	1	127
1	2014-11-18	100001878	3	8
2	2014-11-18	100001878	4	1
3	2014-11-18	100014060	1	23
4	2014-11-18	100014060	3	2

data=data_user_buy3.groupby('date').apply(lambda x:x[x['behavior_type']=='4'].total.sum()/
                                          len(x.user_id.unique()))
data.head()

date
2014-11-18    0.588050
2014-11-19    0.574143
2014-11-20    0.546660
2014-11-21    0.481358
2014-11-22    0.577016
dtype: float64

data.plot()
plt.show()

在这里插入图片描述

  • 淘宝活跃用户(有过操作行为的用户)平均每天消费次数比较低,在0.58次左右,双十二期间达到最高值,有2次左右。

(4)付费率

  • 付费率=消费人数/活跃用户人数
data=data_user_buy3.groupby('date').apply(lambda x:x[x['behavior_type']=='4'].total.count()/
                                          len(x.user_id.unique()))
data.head()

date
2014-11-18    0.242630
2014-11-19    0.235358
2014-11-20    0.235591
2014-11-21    0.211918
2014-11-22    0.228059
dtype: float64

data.describe()

count    31.000000
mean      0.241566
std       0.050087
min       0.210183
25%       0.225660
50%       0.235358
75%       0.240304
max       0.504793
dtype: float64

data.plot()
plt.show()

在这里插入图片描述

  • 每天活跃用户人群中,大概24%的用户具有消费行为,在双十二期间消费用户人数最多。

(5)同一时间段用户消费次数分布

data_user_buy4=data_user[data_user['behavior_type']=='4'].groupby(['user_id','date','hour'])['operation'].sum().rename('buy_count')
data_user_buy4

user_id    date        hour
100001878  2014-11-18  20      1
           2014-11-24  20      3
           2014-11-25  13      2
           2014-11-26  16      2
                       21      1
                              ..
99989881   2014-12-05  1       1
           2014-12-09  21      1
           2014-12-12  0       2
           2014-12-14  20      1
           2014-12-15  23      1
Name: buy_count, Length: 65223, dtype: int64

data_user_buy4.describe()

count    65223.000000
mean         1.842985
std          2.295531
min          1.000000
25%          1.000000
50%          1.000000
75%          2.000000
max         97.000000
Name: buy_count, dtype: float64

sns.distplot(data_user_buy4)
plt.show()

print('大多数用户的消费次数为:{}次'.format(data_user_buy4.mode()[0]))
大多数用户的消费次数为:1次

  • 在同一时间段中,大多数用户消费次数为1次

4.3 复购情况分析

  • 复购情况,即两天以上有购买行为,一天多次购买算一次
  • 复购率=有复购行为的用户数/有购买行为的用户总数
#计算每个用户在多少个不同日期购买
data_rebuy=data_user[data_user.behavior_type=='4'].groupby('user_id')['date'].agg(['nunique'])
data_rebuy.head()


nunique
user_id	
100001878	15
100011562	3
100012968	11
100014060	12
100024529	9

data_rebuy[data_rebuy['nunique']>=2].count()/data_rebuy.count()
print('复购率为:',round(data_rebuy[data_rebuy['nunique']>=2].count()/data_rebuy.count(),4))
复购率为: nunique    0.8717
dtype: float64

#所有复购时间间隔消费次数分布
# 计算不同的用户,不同的日期下的购买次数
data_day_buy=data_user[data_user.behavior_type=='4'].groupby('user_id').date.apply(lambda x:x.sort_values().diff(1).dropna())
data_day_buy5=data_day_buy.map(lambda x:x.days)
data_day_buy5

user_id            
100001878  2439076     6
           2439090     0
           2440428     0
           2660355     1
           2672617     0
                      ..
99989881   8203371     4
           9248497     3
           9249028     0
           10601909    2
           11085567    1
Name: date, Length: 111319, dtype: int64

data_day_buy5.describe()

count    111319.000000
mean          1.351692
std           2.934267
min           0.000000
25%           0.000000
50%           0.000000
75%           1.000000
max          30.000000
Name: date, dtype: float64

plt.figure(figsize=(16,9))
data_day_buy5.value_counts().plot(kind='bar')
plt.show()

sns.distplot(data_day_buy5.reset_index().groupby('user_id').date.mean())

在这里插入图片描述

  • 多数用户复购率为0.8717,消费次数随着消费时间间隔的增加而不断下降,在1-10天之内复购次数比较多,10天之后复购次数淘宝用户很少在进行复购,因此需要重视10天之内的淘宝用户复购行为,增加用户复购。
    在这里插入图片描述
  • 不同用户平均复购时间接近正态分布,但是总体来看,呈现逐渐下降趋势。多数淘宝用户平均复购时间集中在1-6天时间间隔内。

4.4 漏斗流失分析

data_user_count=data_user.groupby('behavior_type').size()
data_user_count
# 1是总点击量,2是总收藏量,3是总加入购物车量,4是总下单量

behavior_type
1    11550581
2      242556
3      343564
4      120205
dtype: int64

data_user.describe(include='all')
	user_id	item_id	behavior_type	user_geohash	item_category	time	date	hour	operation
count	12256906	12256906	12256906	3922082	12256906	12256906	12256906	1.225691e+07	12256906.0
unique	10000	2876947	4	575458	8916	744	31	NaN	NaN
top	36233277	112921337	1	94ek6ke	1863	2014-12-11 22:00:00	2014-12-12 00:00:00	NaN	NaN
freq	31030	1445	11550581	1052	393247	54797	691712	NaN	NaN
first	NaN	NaN	NaN	NaN	NaN	2014-11-18 00:00:00	2014-11-18 00:00:00	NaN	NaN
last	NaN	NaN	NaN	NaN	NaN	2014-12-18 23:00:00	2014-12-18 00:00:00	NaN	NaN
mean	NaN	NaN	NaN	NaN	NaN	NaN	NaN	1.481799e+01	1.0
std	NaN	NaN	NaN	NaN	NaN	NaN	NaN	6.474778e+00	0.0
min	NaN	NaN	NaN	NaN	NaN	NaN	NaN	0.000000e+00	1.0
25%	NaN	NaN	NaN	NaN	NaN	NaN	NaN	1.000000e+01	1.0
50%	NaN	NaN	NaN	NaN	NaN	NaN	NaN	1.600000e+01	1.0
75%	NaN	NaN	NaN	NaN	NaN	NaN	NaN	2.000000e+01	1.0
max	NaN	NaN	NaN	NaN	NaN	NaN	NaN	2.300000e+01	1.0

#总浏览量
pv_all=data_user['behavior_type'].count()
print('总浏览量-点击量的流失率:{:.2%}'.format(((pv_all-data_user_count[0])/pv_all)))
总浏览量-点击量的流失率:5.76%
print('总点击量—总加入购物车的流失率:{:.2%}'.format(((data_user_count[0] - data_user_count[2])/data_user_count[0])))
总点击量—总加入购物车的流失率:97.03%
print('总加入购物车的量—总收藏量的流失率:{:.2%}'.format(((data_user_count[2] - data_user_count[1])/data_user_count[2])))
总加入购物车的量—总收藏量的流失率:29.40%
print('总收藏量—总购买量的流失率:{:.2%}'.format(((data_user_count[1] - data_user_count[3])/data_user_count[1])))
总收藏量—总购买量的流失率:50.44%

trace = go.Funnel(
    y = ["点击", "加入购物车并收藏", "购买"],
    x = [data_user_count[0],data_user_count[2]+data_user_count[1],data_user_count[3]],
    textinfo = "value+percent initial",
    marker=dict(color=["deepskyblue", "lightsalmon", "tan"]),
    connector = {"line": {"color": "royalblue", "dash": "solid", "width": 3}})
    
data =[trace]
fig = go.Figure(data)
fig.show()

在这里插入图片描述

  • 由于收藏和加入购车都是有购买意向的一种用户行为,切不分先后顺序,因此我们将其合并看作一个阶段。从上面的漏斗图和可以看出,从浏览到具有购买意向(收藏和加入购物车),只有5%的转化率,但是到了真正到购买的转化率只有1%,说明从浏览到进行收藏和加入购物车的阶段,是指标提升的重要环节。

4.5 用户价值度RFM模型分析

RFM的含义:

  • R(Recency):客户最近一次交易时间的间隔。R值越大,表示客户交易发生的日期越久,反之则表示客户交易发生的日期越近。
  • F(Frequency):客户在最近一段时间内交易的次数。F值越大,表示客户交易越频繁,反之则表示客户交易不够活跃。
  • M(Monetary):客户在最近一段时间内交易的金额。M值越大,表示客户价值越高,反之则表示客户价值越低。
  • 因为本数据集没有提供消费金额,因此只能R和F进行用户价值分析
from datetime import datetime
datenow=datetime(2014,12,18)

#每位用户最近购买时间
recent_buy_time=data_user[data_user['behavior_type']=='4'].groupby('user_id')['date'].apply(lambda x:datenow-x.sort_values().iloc[-1])
recent_buy_time=recent_buy_time.reset_index().rename(columns={'date':'recent'})
recent_buy_time.recent=recent_buy_time.recent.map(lambda x:x.days)
recent_buy_time.recent

0        0
1        2
2        0
3        0
4        2
        ..
8881     5
8882    11
8883     3
8884     4
8885     3
Name: recent, Length: 8886, dtype: int64

#每个用户的消费频次:
buy_freq=data_user[data_user.behavior_type=='4'].groupby('user_id').date.count().reset_index().rename(columns={'date':'freq'})

rfm=pd.merge(recent_buy_time,buy_freq,left_on='user_id',right_on='user_id',how='outer')

rfm['recent_value']=pd.qcut(rfm.recent,2,labels=['2','1'])
rfm['freq_value']=pd.qcut(rfm.freq,2,labels=['1','2'])
rfm['rfm']=rfm['recent_value'].str.cat(rfm['freq_value'])
rfm

	user_id	recent	freq	recent_value	freq_value	rfm
0	100001878	0	36	2	2	22
1	100011562	2	3	2	1	21
2	100012968	0	15	2	2	22
3	100014060	0	24	2	2	22
4	100024529	2	26	2	2	22
...	...	...	...	...	...	...
8881	99960313	5	8	1	1	11
8882	9996155	11	6	1	1	11
8883	99963140	3	19	2	2	22
8884	99968428	4	38	2	2	22
8885	99989881	3	17	2	2	22
8886 rows × 6 columns

def trans_value(x):
    if x=='22':
        return '重要价值客户'
    elif x=='21':
        return '重要发展客户'
    elif x=='12':
        return '重要挽留客户'
    else:
        return '流失客户'
        
rfm['用户等级']=rfm['rfm'].apply(trans_value)
rfm['用户等级'].value_counts()

重要价值客户    3179
流失客户      2767
重要发展客户    1721
重要挽留客户    1219
Name: 用户等级, dtype: int64

trace=[go.Pie(labels=rfm['用户等级'].value_counts().index,values=rfm['用户等级'].value_counts().values,\
            hole=0.2,textfont=dict(size=12))]
fig=go.Figure(data=trace)
pyplot(fig)

在这里插入图片描述

5. 结果解读

  • 在上面每一次分析中,已经有了结论,这里不再重复描述
  • 通过RF用户价值分析,对于22用户,为重点用户需要关注;对于21这类忠诚度高而购买能力不足的,可以适当给点折扣或捆绑销售来增加用户的购买频率。对于12这类忠诚度不高而购买能力强的,需要关注他们的购物习性做精准化营销。

版权声明:本文为weixin_49231355原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。