13.03 用户RFM模型实战应用
一、问题
痛点: 运营每天面对几十万用户,不知道哪些该花精力维护。发优惠券一视同仁——大客觉得被打扰,羊毛党薅完就走。营销费用不少花,复购率就是不动。 典型场景:- 大促前要做用户触达,该优先联系谁?
- 新品上线想找种子用户,从哪里找?
- 老客复购率持续下滑,找不到核心目标人群
- 营销费用ROI<1:3,总监要求精准投放
二、学习:RFM模型核心概念
RFM三要素定义
| 维度 | 含义 | 电商场景 | 计算公式 |
|------|------|----------|----------|
| R (Recency) | 最近一次购买距今天数 | 越短越好,用户活跃 | 当前日期 - 最近订单日期 |
| F (Frequency) | 一定周期内购买次数 | 越高越好,用户忠诚 | 统计周期内订单总数 |
| M (Monetary) | 一定周期内消费金额 | 越高越好,购买力强 | 统计周期内消费总额 |
2026年分层标准
统计周期选择(按品类):- 高频消费品(生鲜、日化、母婴消耗品):近90天
- 中频消费品(服饰、美妆、零食):近180天
- 低频消费品(家电、3C、家具):近365天
- 直播电商:近30天(复购窗口极短,依赖直播间场景)
| 分数 | R(最近一次购买) | F(购买次数) | M(消费金额) |
|------|-----------------|-------------|-------------|
| 5分 | 1-7天内 | ≥6次 | >2000元 |
| 4分 | 8-30天 | 4-5次 | 500-2000元 |
| 3分 | 31-90天 | 2-3次 | 100-500元 |
| 2分 | 91-180天 | 1次 | 50-100元 |
| 1分 | >180天 | 0次 | <50元 |
8种典型用户类型
| 编码 | R | F | M | 类型 | 占比(参考) | 策略 |
|------|---|---|---|------|-------------|------|
| 555 | 5 | 5 | 5 | 🌟重要价值 | 2-5% | VIP专属维护,1v1服务 |
| 554 | 5 | 5 | 4 | 💎重要发展 | 3-5% | 引导升级消费 |
| 545 | 5 | 4 | 5 | 🎯重要保持 | 3-8% | 提高复购频次 |
| 455 | 4 | 5 | 5 | 🔄重要挽留 | 1-3% | 召回+关系修复 |
| 511 | 5 | 1 | 1 | 🆕新用户 | 15-25% | 促进二次购买 |
| 111 | 1 | 1 | 1 | 💤流失用户 | 30-50% | 低成本召回或放弃 |
| 其他 | - | - | - | 一般用户 | 余量 | 自动化维护 |
三、分析:案例数据拆解
某食品品牌2026年Q1数据
`
总用户数:150,000人(近180天有交易)
分析结果:
重要价值用户(555/554/545):
- 人数:6,000人(4%)
- 贡献GMV:630万/月(42%)
- 人均月消费:1,050元
- 复购率:78%
- 营销投入:50元/人/月 → ROI 1:21
重要挽留用户(455):
- 人数:3,000人(2%)
- 贡献GMV:180万/月(12%)
- 近来过但频次已下降
- 召回成本:30元/人 → 召回率35% → 召回后月均消费450元
新用户(511):
- 人数:37,500人(25%)
- 刚买过一次,还没复购
- 策略:下单后7天推送"第二件半价"
- 二次转化率从18%提升到34%
流失用户(111/112):
- 人数:60,000人(40%)
- 已超过180天无购买
- 不主动投入,仅做系统触达
- 双11等大促发一次短信,ROI 1:0.5(聊胜于无)
`
四、理解:RFM的底层逻辑
RFM本质是用3个维度给用户的"价值"做量化评分。
底层逻辑拆解:
> 三者关系:R是快照(现在在哪)、F是历史(来过多少次)、M是潜力(能花多少)。只看任何单一维度都会误判。
常见误判:- 只看R:最近来的不一定是大客(可能只是领了免费券)
- 只看F:经常买的可能都是低客单价(薅羊毛专业户)
- 只看M:买过一次高价品但不复购(一次性冲动消费)
五、内化:我自己怎么理解RFM
一句话: RFM是给每个用户画三根柱子——R柱有多新、F柱有多频、M柱有多壕。三根都高的用户是最肥的韭菜。 实战口诀:- 555用户:不要发券,要送"专属感"(VIP邀请、新品内测)
- 511用户:不要等着他自己回来,要推"第二单福利"
- 155用户:不要放弃,要"大促激活+专属折扣"
- 111用户:不要硬拉,发条短信就行,回不回来随缘
六、类比:RFM像投资组合管理
RFM跟投资组合管理的逻辑一模一样:| RFM层级 | 投资组合类比 | 运营策略 |
|---------|-------------|---------|
| 555(重要价值) | 蓝筹股(茅台) | 长期持有,不折腾 |
| 455(重要挽留) | 优质股但近期走弱 | 补仓(召回动作) |
| 511(新用户) | 新股打新 | 观察期,控制仓位 |
| 111(流失用户) | 垃圾股 | 果断卖出或放弃 |
| 一般用户 | 指数基金 | 自动化定投(优惠券自动发放) |
好的基金经理不会在垃圾股上耗费研究精力——好的运营不应该在流失用户身上花太多预算。
七、迁移:从电商RFM到其他领域
应用到内容创作者/自媒体
- R:最近一次互动时间(点赞/评论/转发)
- F:月互动次数
- M:打赏金额/会员订阅金额
- 策略:高RFM→评论区互动、私信感谢;高R低F→推爆款内容
应用到SaaS/B2B客户管理
- R:最近一次登录产品
- F:月活跃天数
- M:付费等级(免费/专业版/企业版)
- 策略:高RFM→1v1客户成功;高R低M→促升级
应用到线下实体店
- R:最近一次到店时间
- F:月到店次数
- M:客单价+年消费额
- 策略:高频低价→推会员储值;低频高价→做重要节日触达
八、实践:动手实现RFM
方案A:Excel实现(数据量<5万行)
`
Step 1:准备数据表
列:用户ID | 订单日期 | 订单金额 | 订单状态
筛除:退款订单、测试订单
Step 2:计算R值(假设基准日为2026-06-01)
公式:=基准日期 - MAXIFS(订单日期, 用户ID范围, 用户ID)
解释:取每个用户最近一次下单距今天数
Step 3:计算F值
公式:=COUNTIFS(用户ID范围, 用户ID, 订单日期范围, ">=基准日期-180天")
解释:统计近180天每个用户下了多少单
Step 4:计算M值
公式:=SUMIFS(订单金额范围, 用户ID范围, 用户ID, 订单日期范围, ">=基准日期-180天")
解释:统计近180天每个用户花了多少钱
Step 5:分箱打分
用 PERCENTILE 函数分5段:
R评分:=MATCH(R值, PERCENTILE(R列, {0,0.2,0.4,0.6,0.8,1}), 1)
F评分:=MATCH(F值, PERCENTILE(F列, {0,0.2,0.4,0.6,0.8,1}), 1)
M评分:=MATCH(M值, PERCENTILE(M列, {0,0.2,0.4,0.6,0.8,1}), 1)
Step 6:合并标签
公式:=R评分 & F评分 & M评分 → 如"555"、"311"
Step 7:分类
用IF嵌套或VLOOKUP对照表输出"重要价值"等中文标签
`
方案B:Python自动化(数据量>10万行)
`python
import pandas as pd
import datetime as dt
读取订单数据
df = pd.read_excel('orders.xlsx')
设定基准日期
snapshot_date = dt.datetime(2026, 6, 1)
数据清洗:只取已完成订单
df = df[df['订单状态'] == '已完成']
计算RFM值
rfm = df.groupby('用户ID').agg({
'订单日期': lambda x: (snapshot_date - x.max()).days, # R值
'订单ID': 'count', # F值
'订单金额': 'sum' # M值
}).rename(columns={
'订单日期': 'Recency',
'订单ID': 'Frequency',
'订单金额': 'Monetary'
})
5分制分箱(用分位数)
rfm['R_Score'] = pd.qcut(rfm['Recency'], 5, labels=[5,4,3,2,1])
rfm['F_Score'] = pd.qcut(rfm['Frequency'].rank(method='first'), 5, labels=[1,2,3,4,5])
rfm['M_Score'] = pd.qcut(rfm['Monetary'].rank(method='first'), 5, labels=[1,2,3,4,5])
合并标签
rfm['Segment_Code'] = rfm['R_Score'].astype(str) + rfm['F_Score'].astype(str) + rfm['M_Score'].astype(str)
用户分类逻辑
def classify(row):
r, f, m = int(row['R_Score']), int(row['F_Score']), int(row['M_Score'])
if r>=4 and f>=4 and m>=4: return '重要价值'
if r>=4 and f>=4 and m>=3: return '重要发展'
if r>=4 and f>=3 and m>=4: return '重要保持'
if r>=3 and f>=4 and m>=4: return '重要挽留'
if r>=4 and f>=2 and m>=2: return '一般价值'
if r>=3 and f>=3: return '一般发展'
if r<=2 and f<=2: return '流失用户'
return '普通用户'
rfm['用户类型'] = rfm.apply(classify, axis=1)
输出结果
rfm.to_excel('rfm_result.xlsx')
print(rfm['用户类型'].value_counts())
`
工具推荐
| 方案 | 数据量 | 难度 | 费用 | 推荐场景 |
|------|--------|------|------|---------|
| Excel | ≤5万行 | ★☆☆ | 0 | 初创团队快速分析 |
| Python | 任意 | ★★★ | 0 | 有技术团队 |
| FineBI | ≤100万行 | ★★☆ | 免费版 | 中型电商日常维护 |
| 阿里云PAI | 海量 | ★★☆ | 按量付费 | 大型电商+实时RFM |
| 神策/SDK | 用户行为+交易 | ★★☆ | 商业版 | 需要行为数据联动 |
九、调整:常见错误及修正
错题本
| 错误 | 后果 | 正确做法 |
|------|------|---------|
| 使用全量历史数据 | 老用户R被刷低,新客R过高 | 只取近365天数据,逐年滚动 |
| 退款单计入F | F虚高,误判"退款党"为高价值 | 只统计"已完成"订单 |
| 不分品类周期 | 低频行业用30天窗口导致大量用户被标"流失" | 按行业平均复购周期×1.5设定 |
| 忽略节假日效应 | 618/双11后R值异常 | 取淡季数据+旺季数据分开建模 |
| 用金额绝对值而非分位数 | M值被大客拉偏,普通用户全是低分 | 始终用分位数(Percentile)分箱 |
| 分层太细 | 27类用户(3×3×3)根本无法执行 | 8-10类足够了 |
| 只做一次不更新 | 用户状态是动态的 | 高频品类每周重算,中频每月 |
优化技巧
十、成事:实战效果
案例:某母婴品牌RFM落地
`
背景:年GMV 1.2亿,营销费120万/年,复购率22%
实施前:
- 群体发券:所有用户发满199-30,ROI 1:1.7
- 老客流失率:月均8%
实施RFM分层后(6个月效果):
- 重点投入555/554用户(5%),ROI提升到1:8.3
- 511用户(25%)给"第二件半价",复购从18%→35%
- 111用户(35%)仅大促发短信,费用降60%
- 整体营销费从120万降至75万,ROI从1:1.7升至1:4.2
- 月流失率从8%降至3.2%
总监评价:"省了45万,多赚了180万。"
`
RFM的长期价值
- 首次实现后,每月维护成本<2人天
- 每次大促触达前跑一次RFM,触达ROI提升2-3倍
- 可用于商品推荐、客服分级、物流差异化等多场景
- RFM+LTV结合,可以预测未来3-6个月的收入
---
关联笔记:- 参见 13.11-私域用户分层运营SOP —— RFM产出用户分层后,需要配套SOP执行
- 参见 13.05-电商AB测试框架设计 —— 验证不同分层策略的效果用AB测试
- 参见 13.02-电商数据看板搭建实战 —— 把RFM数据放到看板实时监控