python astype()_Python|用户价值分析,构建RFM模型

一、RFM

1、 RFM模型是众多客户关系管理(CRM)分析方法中的一种,能够方便快速有效的量化用户价值和创利能力

2、RFM模型有三个要素,分别是:Recency(最近一次交易距今时间)、Frequency(交易频率)、Monetary(交易金额)。

R值(最近一次交易距今时间)

用户最近一次交易距今的时间。间隔时间越短,则值越大,这类客户也是最有可能对活动产生反应的群体。

F值(交易频率)

用户在限定的时间内所购买的次数。最常购买的顾客,也是满意度、忠诚度最高的顾客。

M值(交易金额)

用户的交易金额,可以分为累计交易金额和平均每次交易金额,根据不同的目的取不同的数据源进行建模分析。

3、根据R、F、M的三个值的指标,进行分类,客户分为以下标准的8类

v2-33c6a6a27bb752a4f2a4573fbb555f64_b.jpg
RFM划分的8类客户标准

知识点详解:RFM模型数据源准备只需四个字段:客户名称、交易日期、交易次数/频率、交易金额。

二、Python建立RFM模型

知识点详解:Python建立RFM模型流程? 1、加载数据 2、数据清洗
1)列名重命名
2)删除重复值
3)缺失值处理
4)一致化处理
5)异常值处理
6)选择子集/关键字段提取 3、构建模型
1)关键字段构造
2)维度打分
3)分值计算
4)客户分层 4、RFM模型结果分析
1)查看各类用户占比情况
2)不同类型用户总消费金额贡献占比情况

1、加载数据

①加载处理数据所需要的库

#1加载数据处理所需要的的库

②读取数据文件

知识点详解:Python|os.chdir()
os.chdir() 将当前工作目录切换到指定的路径。
详细请看:
Python|os.chdir()​zhuanlan.zhihu.com
知识点详解:如何利用python查看Excel文件?
df=pd.read_excel('excel文件名.xlsx')
df
#将当前的工作目录切换到指定目录(C:Users14861Desktop项目经验RFM模型RFM数据源)

v2-f77187487239cdc691899f5fe52e8fdd_b.jpg

2、数据清洗

1)列名重命名

数据字段名本身已经便于理解,因此,不需要重命名。

2)删除重复值

本数据没有重复值,因此不需要进行删除重复值操作。

3)缺失值处理

缺失值定位

#接着再观察数据的类型和缺失情况:

v2-fb91dfcea0ea601e3595522b10022e3f_b.jpg

订单一共28833行,没有任何缺失值。

因此不需要进行缺失值处理。

4)一致化处理

根据以上操作了解到数据源数据类型:付款日期:时间格式;实付金额、邮费和购买数量:数值型;其他均为字符串类型。

因此不需要进行一致化处理

5)异常值处理

①查看订单状态

#查看订单状态有哪些?

v2-8dedca205e6799c2344cf2291da8d527_b.png

订单只有这两种状态,其中退款订单对于我们模型价值不大,需要在后续清洗中剔除。

②删除订单状态中:付款以后用户退款成功,交易自动关闭的数据。

#删除退款

v2-d94e6f8d785fe57bf252b6a67d717766_b.jpg
print

v2-a347ff2b27ad9002b8960112552f1cce_b.png

6)选择子集/关键字段提取

构建RFM模型只需四个字段:客户名称、交易日期、交易次数/频率、交易金额。

在数据中对应的只需要买家昵称、付款日期、购买数量、实付金额等字段;

df

v2-62619280316013cbeb0a4b03b9ff87b9_b.jpg

3、构建模型

1)关键字段构造

①R值

即每个用户最后一次购买时间距今多少天。

如果用户只下单过一次,用现在的日期减去付款日期即可;若是用户多次下单,需先筛选出这个用户最后一次付款的时间,再用今天减去它。

#筛选用户最后一次付款时间

v2-7dceaf37f79597c64616fceb8cf80944_b.jpg
#计算最后一次付款时间距今(2019-7-1:订单数据是2019-7-1生成的,即把这是时间当做是今天)多少天了?

v2-1212ef6c25552baaccb97392479ec419_b.jpg

②F值

每个用户累计购买频次。

把单个用户一天内多次下单行为看作整体一次。

因此,引入一个精确到天的日期标签,依照“买家昵称”和“日期标签”进行分组,把每个用户一天内的多次下单行为合并,再统计购买次数:

#引入日期标签辅助列

v2-d71cf4e3f8a4f2d21a304d5362535d49_b.jpg

③M值

用户的交易金额,可以分为累计交易金额和平均每次交易金额,根据不同的目的取不同的数据源进行建模分析。

这里选取用户平均支付金额。

用户平均支付金额=用户累计支付金额/购买频次

#计算累计支付金额

v2-a2a853da44ba9a5d231b2ecd56523ee6_b.jpg

④合并三个指标

rfm=pd.merge(r,com_m,left_on='买家昵称',right_on='买家昵称',how='inner')
rfm=rfm[['买家昵称','R','F','M']]
rfm.head()

v2-4d36257c3a779cec40969dc1b4f52b17_b.jpg

2)维度打分

R值根据行业经验,设置为30天一个跨度,区间左闭右开:

v2-8a53cc5978573e6ef4090b74ef554473_b.jpg

F值和购买频次挂钩,每多一次购买,分值就多加一分:

v2-d2c4ce12c544ff261c2abf547743492f_b.jpg

M值做个简单的区间统计,然后分组,这里我们按照50元的一个区间来进行划分:

v2-3720128c902827af10d535331ebf4178_b.jpg

3)分值计算(pandas)

①计算R的分值

rfm

v2-74937948c72ab3b27b58eef8207eeedf_b.jpg

②计算F的分值

rfm

v2-5914377d8ff4b7379e23db73d5b2bab0_b.jpg

③计算M的分值

rfm['M-SCORE']=pd.cut(rfm['M'],bins=[0,50,100,150,200,1000000],labels=[1,2,3,4,5],right=False).astype(float)
rfm.head()

v2-bdd6f45c3e18f21bec5b9f0210dbe006_b.jpg

④判断R、F、M的每个分值是否大于平均值?

rfm['R是否大于均值']=(rfm['R-SCORE']>rfm['R-SCORE'].mean())*1
rfm['F是否大于均值']=(rfm['F-SCORE']>rfm['F-SCORE'].mean())*1
rfm['M是否大于均值']=(rfm['M-SCORE']>rfm['M-SCORE'].mean())*1
rfm.head()
#Python中判断后返回的结果是True和False,对应着数值1和0,只要把这个布尔结果乘上1,
# True就变成了1,False变成了0。

v2-c49b7aaf4d3c6eb07988f50b51071815_b.jpg

4)客户分层

①人群数值

#先引入一个人群数值的辅助列,把之前判断的RFM是否大于均值的三个值给串联起来:
rfm['人群数值']=(rfm['R是否大于均值']*100)+(rfm['F是否大于均值']*10)+(rfm['M是否大于均值']*1)
rfm.head()

v2-a431767effa3c2d1bd784b0baa6886d1_b.jpg

人群数值的理解:0代表流失客户;1代表高消费唤回客户;101代表频次深耕客户。

②人群标签

#为了得到最终人群标签,再定义一个判断函数,通过判断人群数值的值,来返回对应的分类标签:

v2-4c80e96ebd1056ad13560c447af82208_b.jpg

4、RFM模型结果分析

1)查看各类用户占比情况

#查看各类用户占比情况:

v2-787a3c90ff0b5e0d747457353a34b1d4_b.jpg

2)不同类型用户总消费金额贡献占比情况

#不同类型用户总消费金额贡献占比情况
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RFM模型是一种常用的客户价值分析模型,通过对客户的最近一次购买时间(Recency)、购买频率(Frequency)和购买金额(Monetary)进行评估,将客户分为不同的价值层次,从而制定不同的营销策略。 在Python中,我们可以使用Pandas和Numpy等库进行RFM模型分析。以下是一个简单的RFM模型分析步骤: 1. 数据预处理:将原始数据导入Pandas DataFrame中,并对数据进行清洗和转换。 2. 计算RFM指标:通过对每个客户的购买时间、频率和金额进行计算,得到每个客户的RFM指标。 3. 分组划分:将客户按照RFM指标进行分组,一般采用分位数法,将客户分为高、中、低三个层次。 4. 客户价值评估:根据客户的RFM组合,对客户进行价值评估,制定相应的营销策略。 下面是一个简单的RFM模型分析代码示例: ``` import pandas as pd import numpy as np # 1. 数据预处理 df = pd.read_csv('customer_data.csv') df['date'] = pd.to_datetime(df['date']) # 2. 计算RFM指标 today = pd.to_datetime('today') df_rfm = df.groupby('customer_id').agg({ 'date': lambda x: (today - x.max()).days, 'customer_id': 'count', 'amount': 'sum' }) df_rfm.rename(columns={'date': 'recency', 'customer_id': 'frequency', 'amount': 'monetary'}, inplace=True) # 3. 分组划分 quantiles = df_rfm.quantile(q=[0.25, 0.5, 0.75]) def r_score(x): if x <= quantiles['recency'][0.25]: return 4 elif x <= quantiles['recency'][0.5]: return 3 elif x <= quantiles['recency'][0.75]: return 2 else: return 1 def fm_score(x, c): if x <= quantiles[c][0.25]: return 1 elif x <= quantiles[c][0.5]: return 2 elif x <= quantiles[c][0.75]: return 3 else: return 4 df_rfm['r_score'] = df_rfm['recency'].apply(lambda x: r_score(x)) df_rfm['f_score'] = df_rfm['frequency'].apply(lambda x: fm_score(x, 'frequency')) df_rfm['m_score'] = df_rfm['monetary'].apply(lambda x: fm_score(x, 'monetary')) df_rfm['rfm_score'] = df_rfm['r_score'] * 100 + df_rfm['f_score'] * 10 + df_rfm['m_score'] # 4. 客户价值评估 def label_customer(x): if x >= 111 and x <= 444: return '重要保持客户' elif x >= 445 and x <= 754: return '重要发展客户' elif x >= 755 and x <= 944: return '一般保持客户' else: return '一般挽留客户' df_rfm['customer_label'] = df_rfm['rfm_score'].apply(lambda x: label_customer(x)) ``` 以上代码中,我们先将原始数据读入Pandas DataFrame中,然后计算出每个客户的RFM指标,并按照分位数法进行分组划分,最后根据客户的RFM组合确定其价值层次。 通过RFM模型分析,我们可以更好地理解客户的行为习惯和价值特征,从而制定更加精准有效的营销策略。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值