FineBi:RFM模型分析

RFM分析

实验目的

RFM 分析模型是衡量客户价值和客户创造利益能力的重要工具和手段。在众多的客户关系管理(CRM)的分析模式中,RFM 模型是被广泛提到的一种简单实用的客户分析方法。该模型通过一个客户的近期购买行为、购买的总体频率以及消费金额三项指标来描述该客户的价值状况。

通过 RFM 分析法,对客户进行观察和分类,得以制定针对不同的特征的客户进行响应的营销策略。

 

实验原理

 

RFM 分析是美国数据库营销研究所提出的一种简单实用客户分析方法,发现客户数据中有三个神奇的要素:

最近一次消费(Recency):客户距离最近的一次采购时间的间隔

最近一次消费意指上一次购买的时候——顾客上一次是几时来店里、上一次根据哪本邮购目录购买东西、什么时候买的车,或在你的超市买早餐最近的一次是什么时候。理论上,上一次消费时间越近的顾客应该是比较好的顾客,对提供即时的商品或是服务也最有可能会有反应。营销人员若想业绩有所成长,只能靠偷取竞争对手的市场占有率,而如果要密切地注意消费者的购买行为,那么最近的一次消费就是营销人员第一个要利用的工具。历史显示,如果我们能让消费者购买,他们就会持续购买。这也就是为什么,0 至 3 个月的顾客收到营销人员的沟通信息多于3 至 6 个月的顾客。

消费频率(Frequency):指客户在限定的期间内所购买的次

我们可以说最常购买的顾客,也是满意度最高的顾客。如果相信品牌及商店忠诚度的话,最常购买的消费者,忠诚度也就最高。增加顾客购买的次数意味着从竞争对手处偷取市场占有率,由别人的手中赚取营业额。根据这个指标,我们又把客户分成五等分,这个五等分分析相当于是一个“忠诚度的阶梯”(loyalty ladder),如购买一次的客户为新客户,购买两次的客户为潜力客户,购买三次的客户为老客户,购买四次的客户为成熟客户,购买五次及以上则为忠实客户。其诀窍在于让消费者一直顺着阶梯往上爬,把销售想象成是要将两次购买的顾客往上推成三次购买的顾客,把一次购买者变成两次的。

消费金额(Monetary):客户的消费能力,通常以客户单次的平均消费金额作为衡量指标

### RFM模型数据分析实现代码示例 以下是基于 Python 的 RFM 模型实现代码,该代码涵盖了数据准备、字段计算、评分以及分类的主要过程: #### 数据导入与预处理 首先加载必要的库并读取数据。 ```python import pandas as pd from sklearn.preprocessing import MinMaxScaler # 假设我们有一个交易记录表 data.csv,包含三列:CustomerID, OrderDate, Amount data = pd.read_csv('data.csv') # 转换日期格式 data['OrderDate'] = pd.to_datetime(data['OrderDate']) ``` #### 计算 R (Recency), F (Frequency), M (Monetary) 通过聚合函数来计算每位客户的最近一次购买时间差(R)、购买频率(F)和消费金额总和(M)。 ```python snapshot_date = max(data.OrderDate) + pd.Timedelta(days=1) rfm_table = data.groupby('CustomerID').agg({ 'OrderDate': lambda x: (snapshot_date - x.max()).days, 'CustomerID': 'count', 'Amount': 'sum' }).rename(columns={ 'OrderDate': 'Recency', 'CustomerID': 'Frequency', 'Amount': 'Monetary' }) ``` #### 归一化处理 为了使不同量纲的数据具有可比性,采用归一化方法对 R/F/M 进行标准化。 ```python scaler = MinMaxScaler() rfm_normalized = scaler.fit_transform(rfm_table[['Recency', 'Frequency', 'Monetary']]) rfm_df = pd.DataFrame(rfm_normalized, columns=['Norm_Recency', 'Norm_Frequency', 'Norm_Monetary'], index=rfm_table.index) ``` #### 打分机制 定义打分规则并将分数分配给每一位客户。 ```python quantiles = rfm_table.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 rfm_table['R'] = rfm_table['Recency'].apply(lambda x: r_score(x)) rfm_table['F'] = rfm_table['Frequency'].apply(lambda x: fm_score(x, 'Frequency')) rfm_table['M'] = rfm_table['Monetary'].apply(lambda x: fm_score(x, 'Monetary')) rfm_table['RFM_Score'] = rfm_table.R.map(str) + rfm_table.F.map(str) + rfm_table.M.map(str) ``` #### 客户分类 根据最终得分将客户划分为不同的类别。 ```python seg_map = { r'[1-2][1-2]': 'Hibernating', r'[1-2][3-4]': 'At Risk', r'3[1-2]': 'Can\'t Lose Them', r'33': 'Need Attention', r'[3-4][3-4]': 'Loyal Customers', r'41': 'Promising', r'4[2-3]': 'Potential Loyalist', r'44': 'Champions' } rfm_table['Segment'] = rfm_table['R'].map(str) + rfm_table['F'].map(str) rfm_table['Segment'] = rfm_table['Segment'].replace(seg_map, regex=True) ``` 以上代码实现了完整的 RFM 分析流程,并提供了详细的客户分类依据[^1]。 --- ### 可视化展示 对于进一步的可视化需求,可以利用 FineBI 或其他工具创建仪表盘。例如,在 FineBI 中可以通过拖拽操作快速生成交互式的图表,直观展现各客户群体的行为特征及其价值分布[^2]。 如果需要针对特定场景调整分析逻辑,则可以根据实际案例灵活修改参数设置。比如某打车 APP 用户行为分析中提到的例子,可根据业务目标重新设计评分权重体系[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值