RFM分析是一种市场营销分析的基本方法,用于评估客户的价值程度,它通过对用户过去一段时间内的消费行为数据进行分析,将用户划分为不同的群体,从而有针对性地制定相应的营销策略。Python作为一种强大的数据分析工具,可以帮助我们实现RFM分析,接下来我们将详细讲解使用Python进行RFM分析的步骤。
- 数据准备
在进行RFM分析之前,首先需要获取和准备有关客户的消费数据。假设我们的数据集中包含用户ID、消费金额、消费时间等字段,以csv文件的形式存储,可以使用Python的pandas库进行数据的读取和清洗。
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv', parse_dates=['order_date'])
# 清洗数据
df = df.dropna() # 删除缺失值
df = df[df['order_amount'] > 0] # 筛选消费金额大于0的数据
- RFM计算
接下来,我们用Python计算每个客户的RFM值。RFM指的是:
- Recency(最近一次消费距离现在的时间):消费时间距离现在的时间越近,说明该客户最近有消费,值越大。
- Frequency(消费频率):客户在一段时间内的总消费次数,值越大说明该客户的购买力越强。
- Monetary Value(购买金额):客户在一段时间内的总购买金额,值越大说明该客户的购买力越强。
我们用Python进行RFM计算的代码如下:
import datetime as dt
# 计算RFM值
now = dt.datetime.now()
df_rfm = df.groupby('customer_id').agg({
'order_date': lambda x: (now - x.max()).days,
'order_id': 'count',
'order_amount': 'sum'
}).reset_index()
df_rfm = df_rfm.rename(columns={
'order_date': 'recency',
'order_id': 'frequency',
'order_amount': 'monetary_value'
})
# 数据分箱
quantiles = df_rfm.quantile(q=[0.25, 0.5, 0.75])
def r_score(x, c):
if x <= c.iloc[0]:
return 4
elif x <= c.iloc[1]:
return 3
elif x <= c.iloc[2]:
return 2
return 1
def fm_score(x, c):
if x <= c.iloc[0]:
return 1
elif x <= c.iloc[1]:
return 2
elif x <= c.iloc[2]:
return 3
return 4
df_rfm['r_score'] = df_rfm['recency'].apply(r_score, args=(quantiles['recency'],))
df_rfm['f_score'] = df_rfm['frequency'].apply(fm_score, args=(quantiles['frequency'],))
df_rfm['m_score'] = df_rfm['monetary_value'].apply(fm_score, args=(quantiles['monetary_value'],))
在这段代码中,我们首先利用pandas的groupby方法对客户数据进行聚合,计算每个客户的R、F、M值。接着,我们使用了数据分箱的方法,将每个数值型变量划分为4个等级。我们将Recency变量越小的客户划分为4级,越远离现在的客户划分为1级;Frequency、Monetary Value变量越大的客户划分为4级,越小的客户划分为1级。
- RFM分组
将每个客户的RFM值计算出来之后,我们需要将客户分成不同的群组。一种常用的分组方法是通过R、F、M值的组合来划分,这样就可以得出相应的客户群体,并可以根据需要进行相应的营销活动。对于每个变量的取值,我们将其分为High(高)、Medium(中)、Low(低)三个等级,共有4 * 4 * 4 = 64种组合,这些组合可以在实践中进行调整以得到更佳的结果。
我们使用Python的pandas库进行RFM分组的代码如下:
grouped = df_rfm.groupby(['r_score', 'f_score', 'm_score'])
grouped.agg({
'recency': 'mean',
'frequency': 'mean',
'monetary_value': 'mean',
'customer_id': 'count'
}).sort_values(by='customer_id',ascending=False)
在这段代码中,我们利用groupby方法对每个组合进行聚合操作,计算每个组合中客户的平均Recency、Frequency、Monetary Value和客户数量等。最后将结果按照客户数量从大到小排序。
- 结果展示
RFM分析通常会得出多个客户群体,这些群体的特点不同,有着不同的营销诉求。因此,我们需要将RFM分组的结果进行可视化展示,便于后续的分析和决策。
我们可以使用Python的matplotlib库对RFM分组的结果进行可视化展示,代码如下:
import matplotlib.pyplot as plt
low_rfm = df_rfm[(df_rfm['r_score'] == 1) & (df_rfm['f_score'] == 1) & (df_rfm['m_score'] == 1)]
mid_rfm = df_rfm[(df_rfm['r_score'] == 2) & (df_rfm['f_score'] == 2) & (df_rfm['m_score'] == 2)]
high_rfm = df_rfm[(df_rfm['r_score'] == 3) & (df_rfm['f_score'] == 3) & (df_rfm['m_score'] == 3)]
plt.bar(['Low RFM', 'Mid RFM', 'High RFM'], [len(low_rfm), len(mid_rfm), len(high_rfm)])
plt.title('RFM Group Distribution')
plt.xlabel('RFM Group')
plt.ylabel('Customer Count')
plt.show()
在这段代码中,我们首先根据RFM值将所有客户划分为Low RFM、Mid RFM和High RFM三个群体。然后使用条形图对每个群体的客户数量进行可视化展示。
以上就是使用Python进行RFM分析的详细步骤,通过对客户行为数据的分析,RFM分析可以帮助企业更加深入地了解客户的需求和行为,制定有针对性的营销策略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Python进行RFM分析 - Python技术站