快捷搜索:  汽车  科技

电商数据分析模块二(电商用户行为之RFM细分)

电商数据分析模块二(电商用户行为之RFM细分)事件_时间import pandas as pd import numpy as np import os import matplotlib.pyplot as plt import squarify2、加载数据:所以我们将把这三个属性分别定义为:Recency Frequency 和 Monetary。以下为数据分析过程,以及必要的Python代码:1、导入必要的程序包:

本数据分析以网络购物平台上每一个月的用户购物行为数据为分析基础,介绍最基本的RFM 分析:

RFM是一种分析顾客价值的方法。它通常用于数据库营销和直接营销,在零售和专业服务行业受到特别关注。

RFM代表三个维度:

新近 (Recency)– 客户最近购买了多少? 频率 (Frequency)– 他们多久购买一次? 货币(Monetary) – 他们花了多少钱?

来源:维基百科

所以我们将把这三个属性分别定义为:Recency Frequency 和 Monetary。

以下为数据分析过程,以及必要的Python代码:

1、导入必要的程序包:

import pandas as pd import numpy as np import os import matplotlib.pyplot as plt import squarify

2、加载数据:

事件_时间

事件_类型

价格

用户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 dt study_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 dt study_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 customer RFM['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()

电商数据分析模块二(电商用户行为之RFM细分)(1)

具体解释:

现在我们已经确定了我们的客户类别,我们可以决定如何接近或处理每个客户。

  • 冠军客户:奖励。可以成为新产品的早期使用者。会提升品牌资产,最有可能发送推荐信。
  • 忠诚客户:向上销售高价值产品。征求意见。
  • 潜在忠诚者:提供会员/忠诚计划。让他们参与进来。提供个性化建议。
  • 承诺:提供优惠券。把他们带回到站台上,让他们保持联系。提供个性化建议。
  • 即将入睡:通过更新或更新产品赢回它们,不要在竞争中失去它们。必要时和他们谈谈。花时间尽可能个性化。
  • 不能失去他们:在网站上提供有用的资源。发送个性化电子邮件。
  • 休眠:使电子邮件的主题,非常个性化。通过特定产品的特定折扣来恢复他们的兴趣。
  • 失落:通过“伸出援手”运动来恢复兴趣。否则忽略。

猜您喜欢: