rfm模型python_Python pandas RFM模型应用实例详解

本文通过Python的pandas库详细介绍了RFM模型的应用,包括模型原理、假设验证、客户分类和RFM打分。通过RFM模型,对客户进行价值评估,划分客户群体,以实现精细化营销策略。
摘要由CSDN通过智能技术生成

本文实例讲述了Python pandas RFM模型应用。分享给大家供大家参考,具体如下:

什么是RFM模型

根据美国数据库营销研究所Arthur Hughes的研究,客户数据库中有3个神奇的要素,这3个要素构成了数据分析最好的指标:

最近一次消费 (Recency): 客户最近一次交易时间的间隔。R值越大,表示客户交易距今越久,反之则越近;

消费频率 (Frequency): 客户在最近一段时间内交易的次数。F值越大,表示客户交易越频繁,反之则不够活跃;

消费金额 (Monetary): 客户在最近一段时间内交易的金额。M值越大,表示客户价值越高,反之则越低。

RFM实践应用

1、前提假设验证

RFM模型的应用是有前提假设的,即R、F、M值越大价值越大,客户未来的为企业带来的价值越大。这个前提假

设其实已经经过大量的研究和实证,假设是成立的。不过为了更加严谨,确保RFM模型对于特殊案例是有效的,

本文还进行了前提假设验证:

ps:Frequency、Monetary均为近6个月内的数据,即1-6月数据;

利用相关性检验,验证假设:

最近购买产品的用户更容易产生下一次消费行为

消费频次高的用户,用户满意度高,忠诚度高,更容易产生下一次消费行为

消费金额高的用户更容易带来高消费行为

2、RFM分级

简单的做法,RFM三个指标以均值来划分,高于均值的为高价值、低于均值的为低价值,如此可以将客户划分为8大类:

本文采取的方法是将三个指标进行标准化,然后按照分为数划分为5个等级,数值越大代表价值越高;当然最终划分的规则还是要结合业务来定。划分为5个等级后,客户可以细分为125种。

#读取数据

rfm

summary(rfm)

#数据分布

par(mfrow=c(1,3))

boxplot(rfm$rankR1)

boxplot(rfm$rankF1)

boxplot(rfm$rankM1)

#rfm分级

breaks1

breaks1

breaks2

breaks2

breaks3

rfm$rankR1

rfm$rankR1

rfm$rankF1

rfm$rankM1

3、客户分类

本文采用K-means聚类进行分类,聚类结果结合业务划分为4大类:

Cluster1:价值用户R、F、M三项指标均较高;

Cluster2,3:用户贡献值最低,且用户近度(小于2)和频度较低,为无价值客户;

Cluster4:发展用户,用户频度和值度较低,但用户近度较高,可做up营销;

Cluster5:挽留客户,用户近度较低,但频度和值度较高,需采用挽留手段

k值选择:

聚类结果:

#聚类

df

p1

p2

km_result

dd

##查看每一类的数目

table(dd$cluster)

picture

####聚类结果解释####

rfm_final

Custom[cluster == 1] = '高价值客户'

Custom[cluster == 2 ] = '无价值客户'

Custom[ cluster == 3] = '无价值客户'

Custom[cluster == 4] = '重点发展客户'

Custom[cluster == 5] = '重点挽留客户'

})

4、RFM打分

步骤3,我们将客户划分为四大类,其实如果一类客户中还有大量的客户,此时为了精细化营销,可以根据RFM进行加权打分,给出一个综合价值的分。这里,运用AHP层次分析法确定RFM各指标权重:

客户价值RFM_SCORE= 0.25rankR + 0.20rankF+0.55*rankM

AHP层次分析法(专家打分法)

总结

上述客户分类其实比较粗旷,真正在面对千万级客户量时,如此划分为四大类是难以满足运营需求的。运营中,还需要综合CRM中其他指标、维度。

ps:后续作者利用RFM客户价值得分进行潜在客户挖掘,尝试利用决策树等模型挖掘平台潜在客户特征。

简单实例

import pandas as pd

import numpy as np

import time

#todo 读取数据

data = pd.read_csv('RFM_TRAD_FLOW.csv',encoding='gbk')

# print(ret)

# todo RFM------>R(最近一次消费)

#todo 时间与字符串相互转换

data['time'] = data['time'].map(lambda x:time.mktime(time.strptime(x,'%d%b%y:%H:%M:%S')))

# print(data)

# todo 分组

groupby_obj = data.groupby(['cumid','type'])

# for name,data in groupby_obj:

# print(name)

# print(data)

# todo 取值

R = groupby_obj[['time']].max()

# print(

# todo 转为透视表

r_trans = pd.pivot_table(R,index='cumid',columns='type',values='time')

# print(data_trans)

# todo 替换缺失值 有缺失值,替换成最远的值

r_trans[['Special_offer','returned_goods']] = r_trans[['Special_offer','returned_goods']].apply(lambda x:x.replace(np.nan,min(x)),axis = 0)

# print(data_trans)

r_trans['r_max'] = r_trans.apply(lambda x:sum(x),axis=1)

# print(r_trans)

# todo RFM------>F(消费频率)

# 取值

F =groupby_obj[['transID']].count()

# print(F)

#转为透视表

f_trans = pd.pivot_table(F,index='cumid',columns='type',values='transID')

# print(f_trans)

#替换缺失值

f_trans[['Special_offer','returned_goods']]= f_trans[['Special_offer','returned_goods']].fillna(0)

# print(f_trans)

#

f_trans['returned_goods'] = f_trans['returned_goods'].map(lambda x:-x)

# print(f_trans)

f_trans['f_total'] = f_trans.apply(lambda x:sum(x),axis=1)

# print(f_trans)

# todo RFM------>M(消费金额)

# 取值

M =groupby_obj[['amount']].sum()

# print(M)

#转为透视表

m_trans = pd.pivot_table(M,index='cumid',columns='type',values='amount')

# print(f_trans)

#替换缺失值

m_trans[['Special_offer','returned_goods']]= m_trans[['Special_offer','returned_goods']].fillna(0)

# print(f_trans)

#

m_trans['m_total'] = m_trans.apply(lambda x:sum(x),axis=1)

# print(m_trans)

# 合并

RFM=pd.concat([r_trans["r_max"],f_trans['f_total'],m_trans['m_total']],axis=1)

print(RFM)

r_score = pd.cut(RFM.r_max,3,labels=[0,1,2])

f_score = pd.cut(RFM.r_max,3,labels=[0,1,2])

m_score = pd.cut(RFM.r_max,3,labels=[0,1,2])

希望本文所述对大家Python程序设计有所帮助。

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、付费专栏及课程。

余额充值