rfm营销数据分析「行为数据分析」
今天给大家普及一下rfm营销数据分析「行为数据分析」相关知识,最近很多在问rfm营销数据分析「行为数据分析」,希望能帮助到您。
本数据分析以网络购物平台上每一个月的用户购物行为数据为分析基础,介绍最基本的RFM 分析:
RFM是一种分析顾客价值的方法。它通常用于数据库营销和直接营销,在零售和专业服务行业受到特别关注。
RFM代表三个维度:
新近 (Recency)– 客户最近购买了多少?频率 (Frequency)– 他们多久购买一次?货币(Monetary) – 他们花了多少钱?来源:维基百科
所以我们将把这三个属性分别定义为:Recency, Frequency, 和 Monetary。
以下为数据分析过程,以及必要的Python代码:
1、导入必要的程序包:
import pandas as pdimport numpy as npimport osimport matplotlib.pyplot as pltimport squarify2、加载数据:
事件_时间
事件_类型
价格
用户id
用户交互
2020/10/1 0:00
观看
35.79
541312140
72d76fde-8bb3-4e00-8c23-a032dfed738c
2020/10/1 0:00
观看
33.20
554748717
9333dfbd-b87a-4708-9857-6336556b0fcc
2020/10/1 0:00
观看
543.10
519107250
566511c2-e2e3-422b-b695-cf8e6e792ca8
2020/10/1 0:00
观看
251.74
550050854
7c90fc70-0e80-4590-96f3-13c02c18c713
3、值保留产生“购买”行为的用户数据:
其中事件_类型列中有三个独特值:'观看'、 '购买'、 '加购物车'。
data_十月=data_十月.loc[data_十月.事件_类型 == '购买']事件_时间
事件_类型
价格
用户id
用户交互
162
2020/10/1 0:02
购买
130.76
543272936
8187d148-3c41-46d4-b0c0-9c08cd9dc564
308
2020/10/1 0:04
购买
642.69
551377651
3c80f0d6-e9ec-4181-8c5c-837a30be2d68
379
2020/10/1 0:06
购买
29.51
514591159
0e5dfc4b-2a55-43e6-8c05-97e1f07fbb56
442
2020/10/1 0:07
购买
54.42
555332717
1dea3ee2-2ded-42e8-8e7a-4e2ad6ae942f
574
2020/10/1 0:09
购买
189.91
524601178
2af9b570-0942-4dcd-8f25-4d84fba82553
4、转变时间格式:
data['事件_时间']=pd.to_datetime(data['事件_时间'])格式转换之后的数据集()局部:
事件_时间
事件_类型
价格
用户id
用户交互
0
2020-10-01 00:02:00
购买
130.76
543272936
8187d148-3c41-46d4-b0c0-9c08cd9dc564
1
2020-10-01 00:04:00
购买
642.69
551377651
3c80f0d6-e9ec-4181-8c5c-837a30be2d68
2
2020-10-01 00:06:00
购买
29.51
514591159
0e5dfc4b-2a55-43e6-8c05-97e1f07fbb56
3
2020-10-01 00:07:00
购买
54.42
555332717
1dea3ee2-2ded-42e8-8e7a-4e2ad6ae942f
4
2020-10-01 00:09:00
购买
189.91
524601178
2af9b570-0942-4dcd-8f25-4d84fba82553
...
...
...
...
...
...
35659
2020-11-01 16:00:00
购买
170.40
564288950
67bb0a79-a34d-49d1-98d8-54d99468fce1
35660
2020-11-01 16:00:00
购买
1235.30
560088108
bb36b08d-f80a-412f-89c3-11761040d400
35661
2020-11-01 16:00:00
购买
179.90
521490616
dc9e4b23-0334-41e5-9360-612c6eaa0c98
35662
2020-11-01 16:00:00
购买
969.18
543842615
f965c7b4-bc1e-42f3-b06c-a81d1919fad6
35663
2020-11-01 16:00:00
购买
928.37
514366365
82a6c788-9e21-4bf9-9a8d-7f5a19c2c281
5、RFM分析:
data=data.groupby(by='用户交互').agg(订单_日期=('事件_时间',lambda x: x.max()),用户_id=('用户id',lambda x: x.unique()),数量=('用户交互','count'), 货币_支出=('价格','sum')).reset_index(drop=True)data订单_日期
用户_id
数量
货币_支出
0
2020-10-01 06:10:00
541539898
1
9.76
1
2020-11-01 01:59:00
555970708
2
81.86
2
2020-11-01 06:37:00
512584068
1
22.80
3
2020-10-01 13:37:00
520206104
1
259.98
4
2020-10-01 14:13:00
516675926
1
1619.09
...
...
...
...
...
30518
2020-11-01 04:05:00
529831093
1
157.53
30519
2020-11-01 08:23:00
515436065
1
317.64
30520
2020-11-01 08:35:00
563827236
2
256.84
30521
2020-10-01 04:01:00
548736783
1
203.35
30522
2020-11-01 06:11:00
562993718
2
307.60
data['订单_日期'].max()Timestamp('2020-11-01 16:00:00')
数据中最后的日期是2020-11-30,所以将使用日期2019-12-1作为参考.
import datetime as dtstudy_date = dt.datetime(2020,12,1)data=pd.DataFrame(data)data['上一次_购买']=study_date - data['订单_日期']data['上一次_购买'].astype('timedelta64[D]')data['上一次_购买']=data['上一次_购买'] / np.timedelta64(1, 'D')data.head()订单_日期
用户_id
数量
货币_支出
上一次_购买
0
2020-10-01 06:10:00
541539898
1
9.76
60.743056
1
2020-11-01 01:59:00
555970708
2
81.86
29.917361
2
2020-11-01 06:37:00
512584068
1
22.80
29.724306
3
2020-10-01 13:37:00
520206104
1
259.98
60.432639
4
2020-10-01 14:13:00
516675926
1
1619.09
60.407639
import datetime as dtstudy_date = dt.datetime(2020,12,1)data=pd.DataFrame(data)data['上一次_购买']=study_date - data['订单_日期']data['上一次_购买'].astype('timedelta64[D]')data['上一次_购买']=data['上一次_购买'] / np.timedelta64(1, 'D')data.head()Recency
Frequency
Monetary
用户_id
356520186
29.840972
1
33.45
397023870
29.621528
1
244.28
440756116
60.533333
1
39.64
451971397
60.599306
1
199.17
453705583
60.663194
1
141.57
6、RFM细分
RFM细分是一个有用的工具,用于识别客户群,这些客户群应该给予额外的关注。RFM细分使营销人员能够针对特定的客户群体,与他们的独特行为更相关的沟通,从而提高响应率,提高忠诚度,增加客户终身价值。与其他方法一样,RFM分割是一种分割数据的方法。
从RFM模型创建客户细分的最简单方法是使用四分位数。我们给新近性、频率和货币性评分从1到4。四是最佳/最高值,一是最低/最差值。一个最终的RFM分数是简单地通过合并个别的RFM分数数字来计算的。
RFM细分创建RFM= data.groupby('用户_id').agg(Recency=('上一次_购买',lambda x: x.min()), Frequency=('用户_id',lambda x: x.count()), Monetary=('货币_支出',lambda x: x.sum()))RFM.head()Recency
Frequency
Monetary
0.25
29.605556
1.0
94.78
0.50
29.863194
1.0
211.61
0.75
60.577083
1.0
485.79
定义RFM细分函数:
def RFM_label(data):if data['RFM_score'] >= 10:return '失去'elif ((data['RFM_score'] >= 9) and (data['RFM_score'] < 10)):return '冬眠'elif ((data['RFM_score'] >= 8) and (data['RFM_score'] < 9)):return '不能失去'elif ((data['RFM_score'] >= 7) and (data['RFM_score'] < 8)):return '即将睡去'elif ((data['RFM_score'] >= 6) and (data['RFM_score'] < 7)):return '有前途'elif ((data['RFM_score'] >= 5) and (data['RFM_score'] < 6)):return '潜在忠诚用户'elif ((data['RFM_score'] >= 4) and (data['RFM_score'] < 5)):return '忠诚用户'else:return '冠军'#Create RFM label for customerRFM['RFM_label'] = RFM.apply(RFM_label, axis=1)RFM.head()Recency
Frequency
Monetary
R_Quartile
F_Quartile
M_Quartile
RFM_segmentation
RFM_score
用户_id
356520186
29.840972
1
33.45
2
4
4
244
10
397023870
29.621528
1
244.28
2
4
2
242
8
440756116
60.533333
1
39.64
3
4
4
344
11
451971397
60.599306
1
199.17
4
4
3
443
11
453705583
60.663194
1
141.57
4
4
3
443
11
最终生成直观图:
with plt.xkcd():plt.rcParams.update({'font.family': "SimHei"})RFM_desc.columns = RFM_desc.columns.droplevel()RFM_desc.columns = ['RecencyMean','FrequencyMean','MonetaryMean', 'Count']#Create our plot and resize it.fig = plt.gcf()ax = fig.add_subplot()fig.set_size_inches(16, 9)squarify.plot(sizes=RFM_desc['Count'], label=['失去', '冬眠', '不能失去', '即将睡去', '有前途','潜在忠诚用户','忠诚用户', '冠军'], alpha=.6 )plt.title("RFM 细分",fontsize=18,fontweight="bold")plt.axis('off')plt.show()具体解释:现在我们已经确定了我们的客户类别,我们可以决定如何接近或处理每个客户。
冠军客户:奖励。可以成为新产品的早期使用者。会提升品牌资产,最有可能发送推荐信。忠诚客户:向上销售高价值产品。征求意见。潜在忠诚者:提供会员/忠诚计划。让他们参与进来。提供个性化建议。承诺:提供优惠券。把他们带回到站台上,让他们保持联系。提供个性化建议。即将入睡:通过更新或更新产品赢回它们,不要在竞争中失去它们。必要时和他们谈谈。花时间尽可能个性化。不能失去他们:在网站上提供有用的资源。发送个性化电子邮件。休眠:使电子邮件的主题,非常个性化。通过特定产品的特定折扣来恢复他们的兴趣。失落:通过“伸出援手”运动来恢复兴趣。否则忽略。