用公开交易数据完成一次 RFM 客户分析
复算历史零售客户RFM,调整筛选条件并核对完整客户名单;支持整表粘贴个人汇总,保留指标口径与调查问题。
本文目录
RFM 把客户的交易历史整理为三个角度:最近一次购买距今多久、购买过多少次、累计购买多少金额。做完以后,你能区分“最近来过一次的大单客户”和“多次购买但已经很久没来的客户”,再决定需要继续了解什么。
下面用 2010–2011 年英国零售历史数据计算 RFM:先跟着六个刻意选取的客户手算,再查看 4,338 个合格客户的结果。六人不是代表性样本。按同一筛选规则和指标定义复算,找出需要继续了解的客户问题;仅凭这三个指标还不足以决定营销活动。
如果你已经有客户级 R/F/M,困难往往变成了:筛选门槛一改,谁进入名单、谁被排除,下一步该了解什么?文中的条件对照可以先用全部历史结果试算,也可整表粘贴自己的汇总结果,不需要逐个录入客户。
先了解这份数据可以回答什么
UCI 的 Online Retail 数据集记录了一家英国非实体店零售企业在 2010 年 12 月 1 日至 2011 年 12 月 9 日的交易,商品以礼品为主,客户中也有批发采购者。每行是订单明细,包含订单号、商品、数量、时间、单价和客户编号。数据来源
这是历史教学数据,不代表当前电商市场。它没有本练习所需的完整获客成本、利润、客户意愿或未购买者记录。因此,我们能描述观察期内的购买行为,不能直接推算客户终身价值或认定某人已经流失。
清洗选择会改变答案
原始文件共有 541,909 行。本次按下表顺序筛选,每一行的排除数量都基于上一步剩余数据,因此不会重复计数。
| 步骤 | 排除行数 | 理由 |
|---|---|---|
| 排除缺少客户编号的行 | 135,080 | 无法稳定归入客户 |
| 排除订单号以 C 开头的取消记录 | 8,905 | 本练习只观察正向购买 |
| 排除剩余数量不大于零的行 | 0 | 该条件在前面步骤后没有新增记录 |
| 排除剩余单价不大于零的行 | 40 | 不进入本次金额计算 |
| 最终保留 | 397,884 | 覆盖 4,338 个客户、18,532 个不同订单号 |
本次保留原表中完全相同的行。原表有 5,268 行被识别为完全重复,但没有唯一明细行编号,不能仅凭字段相同确认都是重复录入。这是一个需要显式记录的分析选择;换成去重口径时,应重新计算并比较结果。
金额使用保留行的“数量 × 单价”求和,称为正向采购金额。因为取消记录没有用于冲减原交易,这个金额不是净销售额,更不是利润。也没有另行识别和剔除运费、手工调整等商品代码,所以不要将它表述为纯商品收入。
固定分析时点再计算三个指标
将参考日期固定为 2011 年 12 月 10 日,即数据最后一天的次日。日期按原数据的日历日期处理。复现时不能改成今天,否则 R 会全部变大。
- R,Recency:参考日期减去该客户最近一次有效购买的日历日期,单位为天,越小表示购买越近。
- F,Frequency:有效订单号的去重计数。一张订单有很多商品明细,仍然只算一次购买。
- M,Monetary:所有保留明细的数量乘单价后求和,币种为英镑。计算保留原精度,展示时再四舍五入。
例如客户 12347 有 182 行有效明细,但只对应 7 个不同订单号。最后购买日期为 12 月 7 日,所以 R 为 3 天,F 为 7,M 为 4,310.00 英镑。
从六个客户读出不同的问题
以下六个固定编号为便于手算而选取,并非随机样本。结果按前述口径从原始记录计算。
| 客户编号 | R 天 | F 次 | M 英镑 |
|---|---|---|---|
| 12347 | 3 | 7 | 4,310.00 |
| 12348 | 76 | 4 | 1,797.24 |
| 12349 | 19 | 1 | 1,757.55 |
| 12350 | 311 | 1 | 334.40 |
| 12352 | 37 | 8 | 2,506.04 |
| 12353 | 205 | 1 | 89.00 |
12349 的金额接近 12348,但只有一张订单。仅按金额归为同一组,会丢失购买频率差异。12352 有 8 次购买,却比 12347 更久没有出现,值得进一步了解其正常采购周期。
12350 已经 311 天没有记录,也不能直接判定流失。可能是一次性采购,也可能是季节需求,或交易发生在这个数据集之外。框架帮助我们提出问题,不会自动补齐客户背景。
先用透明条件提出调查对象
为了练习,可以暂时定义两组:R 不超过 30 天且 F 至少 5 次;R 超过 90 天且 F 至少 5 次。本次分别得到 787 个和 71 个客户。两组互不重叠,但没有覆盖所有客户。
30 天、90 天和 5 次都是本次人为设定的演示阈值,未经业务验证。它们只帮助观察近期重复购买者与间隔较长的重复购买者。真正用于经营时,还需要结合采购周期、季节、客户类型和后续观察调整。
把默认条件设为对照,再修改天数或购买次数,查看进入和退出的客户编号。两套条件使用同一批客户,名单变化来自筛选规则,不表示客户行为已经改变。未被选中的人也没有因此被认定“不重要”。
改一组条件,看看调查名单怎样变化
先使用本文全部4,338位客户的历史结果。默认R≤30天且F≥5次,选中787位;R>90天且F≥5次,选中71位。阈值是演示选择,未经过经营验证。
2010-12-01至2011-12-09英国历史零售数据;参考日2011-12-10,币种GBP。R按日历天,F为有效订单去重数,M为正向采购金额;取消不冲减、完全重复行保留。
正在读取站内历史数据;无脚本时可使用正文下载材料。
对照条件: R ≤ 30 天; F ≥ 5 次
对照与当前条件使用同一批数据;切换个人数据后两者会一起重算。这里只改变R/F条件,M保留作明细参考。
名单不是已验证的客户标签。长时间没有记录不直接等于流失,采购金额也不等于利润;先核查采购周期、季节和客户背景。
查看完整记录
历史教学数据筛选记录
观察期、参考日、币种与口径:
2010-12-01至2011-12-09英国历史零售数据;参考日2011-12-10,币种GBP。R按日历天,F为有效订单去重数,M为正向采购金额;取消不冲减、完全重复行保留。
对照条件:
R ≤ 30 天; F ≥ 5 次
当前条件:
R ≤ 30 天; F ≥ 5 次
筛选条件原值:
{"op":"lte","days":"30","frequency":"5","beforeOp":"lte","beforeDays":"30","beforeFrequency":"5"}
当前无法计算;不沿用上次结果。
调查问题与仍需核实的事项:
名单只提出调查对象,不证明流失、利润或营销效果。
完整输入:
站内材料:rfm-all-customers.csv(4,338位客户);原材料及许可见正文下载。
两套条件都按当前同一批客户计算;名单变化来自筛选条件,不表示两个时期的行为变化。带着名单继续提问:间隔是否超出了该客户平时的采购周期?一次大额采购与多次小额采购需要怎样分别了解?是否混合了批发客户和个人客户?先核对这些背景,再考虑是否需要访谈、跟进或另做分析。R/F 条件帮助缩小调查范围,M 留在明细中作参考;这里没有为你设定统一客户价值评分。
对完整客户结果按 M 降序排序,取人数向上取整后的前 20%,即 868 个客户,他们贡献了约 74.62% 的正向采购金额。这个实际计算也提醒我们:帕雷托分析要观察集中程度,不能预先要求数据一定符合 80/20。
这里比较的是同一批 4,338 个客户、同一参考日期和金额口径下的集中程度。六个手算客户不能估计全体分布,787 人和 71 人也只是两个人为条件筛出的调查组。若改成扣除取消记录或删除重复行,应按新规则重算全部结果;不能把两套口径的金额直接相减并称为客户行为变化。
下载材料并复现
先下载 六个客户的原始明细,按相同规则整理,再对照 六个客户的 RFM 结果。该原始子集有 402 行,包含仍需要筛选的记录,不能直接把行数当作购买次数。
完整派生数据见 全部客户 RFM,分析口径和数值见 计算摘要。需要从原表重跑时,使用 复现说明 中的脚本与公开下载地址。
在站内阅读 RFM 分析,将你准备使用的观察期、客户定义、R/F/M 口径和下一步调查写进练习提纲。需要复算数据时,可以使用上面的材料包与脚本。
已有计算结果时,可在上面的个人模式粘贴客户级四列结果,记录观察期、参考日、币种、客户定义及退款和重复行口径,连同筛选条件、完整名单和调查笔记一起带走。该模式接收已汇总的结果;需要从订单明细清洗和聚合时,仍应先使用材料中的计算流程。若问题是金额集中在哪些客户,再用 帕雷托分析整理同口径的汇总。RFM 指南中的模拟人民币案例与这里的历史英镑数据独立,日期和退款规则不能混用。
数据署名:Chen, D. (2015). Online Retail. UCI Machine Learning Repository. DOI 10.24432/C5BW33,CC BY 4.0。本文派生文件由原表筛选和聚合生成,计算于 2026 年 10 月 3 日。
练习材料
- 数据来源与复现说明MD · 3 KB
- 分析口径与计算摘要JSON · 3 KB
- 全部客户的 RFM 结果CSV · 194 KB
- 六个客户的 RFM 结果CSV · 1 KB
- 六个客户的原始明细CSV · 36 KB
- 可复算的 Python 脚本PY · 5 KB