​​​一、模型基础概念​

  1. ​核心作用​​:

    • 评估用户价值,区分会员层级

    • 衡量营销效果的关键指标

    • 基于交易行为(Recency, Frequency, Monetary)

  2. ​三大维度​​:

    维度

    含义

    业务意义

    评分规则

    ​R (Recency)​

    最近一次购买时间

    用户活跃度

    值越小→分越高(时间近)

    ​F (Frequency)​

    购买频率

    用户忠诚度

    值越大→分越高

    ​M (Monetary)​

    购买总金额

    用户贡献值

    值越大→分越高

  3. ​用户分群策略(8类)​​:

    R

    F

    M

    用户类别

    业务策略

    重要价值用户

    重点维护,提供VIP服务

    重要发展用户

    提升复购率(如推送优惠券)

    重要保持用户

    防止流失(如专属召回活动)

    重要挽留用户

    高价值流失用户,优先挽回

    一般价值用户

    引导提高客单价

    一般发展用户

    刺激消费频次和金额

    一般保持用户

    低成本维护,避免流失

    一般挽留用户

    酌情放弃或低成本触达


​二、模型实现流程​
​数据准备阶段​
import pandas as pd
import numpy as np

# 1. 数据导入
df_raw = pd.read_excel('./sales.xlsx', index_col='USERID')

# 2. 数据清洗
sales_data = df_raw.dropna()  # 删除缺失值
sales_data = sales_data[sales_data['AMOUNTINFO'] > 1]  # 过滤无效订单
​RFM核心计算​
# 3. 计算基础指标
deadline_date = pd.to_datetime("2024-12-29")  # 基准日期

recency_value = sales_data['ORDERDATE'].groupby(sales_data.index).max()
frequency_value = sales_data['ORDERDATE'].groupby(sales_data.index).count()
monetary_value = sales_data['AMOUNTINFO'].groupby(sales_data.index).sum()

# 4. 计算R间隔(天数)
r_interval = (deadline_date - recency_value).dt.days

# 5. 五分位法评分(关键步骤)
r_score = pd.cut(r_interval, bins=5, labels=[5,4,3,2,1])  # R值越小分越高
f_score = pd.cut(frequency_value, bins=5, labels=[1,2,3,4,5])  # F/M值越大分越高
m_score = pd.cut(monetary_value, bins=5, labels=[1,2,3,4,5])

​注:pd.cut()参数详解​

  • x:待分段的连续数据

  • bins:分段边界值列表或分段数量

  • labels:各分段对应的标签

  • right:是否包含右边界(默认True)

​数据合并与策略应用​
# 6. 合并RFM矩阵
rfm_list = [r_score, f_score, m_score]
rfm_cols = ['r_score','f_score','m_score']
rfm_pd = pd.DataFrame(np.array(rfm_list).T,  # 转置保证行列对齐
                     dtype=np.int32,
                     columns=rfm_cols,
                     index=frequency_value.index)

# 策略1:加权得分(业务可调权重)
rfm_pd['rfm_wscore'] = rfm_pd['r_score']*0.2 + rfm_pd['f_score']*0.2 + rfm_pd['m_score']*0.6

# 策略2:RFM组合编码(字符串拼接)
rfm_pd_tmp = rfm_pd.astype(str)  # 简化原代码
rfm_pd['rfm_comb'] = rfm_pd_tmp['r_score'] + rfm_pd_tmp['f_score'] + rfm_pd_tmp['m_score']

# 7. 导出结果
rfm_pd.to_csv('rfm_result.csv')

​三、可视化分析​
1. ​​客户分层柱状图​
import matplotlib.pyplot as plt

# 按加权分分层
bins = [0, 2, 4, 5]  # 分层阈值
labels = ['Low', 'Medium', 'High']
rfm_pd['Segment'] = pd.cut(rfm_pd['rfm_wscore'], bins=bins, labels=labels)

# 绘制柱状图
segment_counts = rfm_pd['Segment'].value_counts()
segment_counts.plot(kind='bar', color=['red','orange','green'])
plt.title('Customer Value Segmentation')
plt.xlabel('Segment Tier')
plt.ylabel('Customer Count')
plt.xticks(rotation=0)
plt.show()
2. ​​客户占比饼图​
# 绘制饼图
segment_counts.plot(kind='pie',
                   autopct='%1.1f%%',
                   colors=['red','orange','green'],
                   startangle=90,
                   counterclock=False)
plt.title('Customer Proportion by RFM Tier')
plt.ylabel('')
plt.show()

​四、关键注意事项​
  1. ​时间基准敏感性​​:

    • 不同截止日期会导致R值变化,需定期更新分析

    • 建议选择业务周期结束点(如财年末)

  2. ​数据预处理要点​​:

    • 删除金额≤1的订单(避免系统测试干扰)

    • 缺失值处理:删除或填充(如用中位数)

  3. ​分段优化建议​​:

    • 五分位法可能不均衡,可改用业务自定义阈值

    • 例:R值按30/90/180天分段

  4. ​策略选择​​:

    • ​加权得分​​:适合综合评估用户价值

    • ​RFM组合​​:适合精细化运营分组(如555用户单独触达)


​五、常见问题解决​
  1. ​报错TypeError​:

    • 检查pd.cut()labels长度需等于bins分段数

  2. ​结果异常​​:

    • 验证groupby是否正确:确保按用户ID聚合

    • 检查时间格式:pd.to_datetime()强制转换日期

  3. ​可视化不显示中文​​:

    plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码
    plt.rcParams['axes.unicode_minus'] = False   # 解决负号显示
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐