Files
cunkebao_v3/Server/RFM客户价值评分体系技术实施文档.md
2025-11-07 15:25:50 +08:00

249 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# RFM 客户价值评分体系技术实施文档
## 1. 文档目的
本文档旨在明确 RFMRecency-Frequency-Monetary客户价值评分体系的技术实现标准包括维度定义、评分规则、数据处理流程、参数配置及异常处理方案为系统开发、数据分析及业务应用提供统一依据。
## 2. 核心术语定义
| 术语 | 英文缩写 | 定义 | 数据来源 | 统计周期说明 |
| ------ | ------------ | ------------------------------- | --------- | ---------------------------------- |
| 最近消费时间 | RecencyR | 客户最后一次有效消费行为距统计截止日的时间间隔(单位:天) | 订单系统、交易日志 | 支持自定义配置(默认 3-12 个月,按业务场景调整) |
| 消费频率 | FrequencyF | 统计周期内客户发生有效消费行为的总次数 | 订单系统、交易日志 | 与 R 维度统计周期一致,剔除重复下单、取消订单等无效记录 |
| 消费金额 | MonetaryM | 统计周期内客户有效消费行为的总金额(单位:元,支持多币种换算) | 订单系统、支付日志 | 仅统计已支付完成的订单金额,剔除退款、优惠抵扣部分 |
| RFM 总分 | RFM Score | 基于 R、F、M 三个维度的分项得分,按预设权重计算的综合得分 | 系统计算生成 | 得分范围 1-15 分5 分制单项)或 1-100 分(标准化后) |
## 3. 评分规则技术规范
### 3.1 分项评分规则(默认 5 分制)
#### 3.1.1 RecencyR评分规则
* 核心逻辑:时间间隔越短,得分越高(反向映射)
* 分段标准:采用**五分位法**(按数据分布自动划分区间,避免均分失真)
| 得分 | 时间间隔区间(天) | 划分逻辑 |
| --- | ---------- | ----------------- |
| 5 分 | \[0, T1] | 统计周期内最近消费的 20% 客户 |
| 4 分 | (T1, T2] | 统计周期内次近消费的 20% 客户 |
| 3 分 | (T2, T3] | 统计周期内中间消费的 20% 客户 |
| 2 分 | (T3, T4] | 统计周期内较久消费的 20% 客户 |
| 1 分 | (T4, Tmax] | 统计周期内最久消费的 20% 客户 |
* 区间计算方式T1=PERCENTILE\_CONT (0.2)、T2=PERCENTILE\_CONT (0.4)、T3=PERCENTILE\_CONT (0.6)、T4=PERCENTILE\_CONT (0.8),其中 Tmax 为统计周期总天数
#### 3.1.2 FrequencyF评分规则
* 核心逻辑:消费次数越多,得分越高(正向映射)
* 分段标准:采用**五分位法**(支持最小消费次数阈值配置)
| 得分 | 消费次数区间 | 划分逻辑 |
| --- | ----------- | ------------------- |
| 5 分 | \[F4, +∞) | 统计周期内消费次数最多的 20% 客户 |
| 4 分 | \[F3, F4) | 统计周期内消费次数次多的 20% 客户 |
| 3 分 | \[F2, F3) | 统计周期内消费次数中间的 20% 客户 |
| 2 分 | \[F1, F2) | 统计周期内消费次数较少的 20% 客户 |
| 1 分 | \[Fmin, F1) | 统计周期内消费次数最少的 20% 客户 |
* 区间计算方式F1=PERCENTILE\_CONT (0.2)、F2=PERCENTILE\_CONT (0.4)、F3=PERCENTILE\_CONT (0.6)、F4=PERCENTILE\_CONT (0.8),其中 Fmin 为 1仅统计有效消费次数≥1 的客户)
#### 3.1.3 MonetaryM评分规则
* 核心逻辑:消费金额越高,得分越高(正向映射)
* 分段标准:采用**五分位法**(支持剔除大额异常值后划分)
| 得分 | 消费金额区间(元) | 划分逻辑 |
| --- | ----------- | ------------------- |
| 5 分 | \[M4, +∞) | 统计周期内消费金额最高的 20% 客户 |
| 4 分 | \[M3, M4) | 统计周期内消费金额次高的 20% 客户 |
| 3 分 | \[M2, M3) | 统计周期内消费金额中间的 20% 客户 |
| 2 分 | \[M1, M2) | 统计周期内消费金额较低的 20% 客户 |
| 1 分 | \[Mmin, M1) | 统计周期内消费金额最低的 20% 客户 |
* 区间计算方式M1=PERCENTILE\_CONT (0.2)、M2=PERCENTILE\_CONT (0.4)、M3=PERCENTILE\_CONT (0.6)、M4=PERCENTILE\_CONT (0.8),其中 Mmin 为统计周期内最小有效订单金额
### 3.2 总分计算规则
#### 3.2.1 加权求和公式
$RFM_{Score} = R_{Score} \times W_R + F_{Score} \times W_F + M_{Score} \times W_M$
* 权重配置:支持自定义(默认配置:$W_R=0.4$$W_F=0.3$$W_M=0.3$
* 权重约束:$W_R + W_F + W_M = 1.0$,且单个权重取值范围为 \[0.1, 0.8]
#### 3.2.2 得分标准化(可选)
* 若需将总分映射为 1-100 分,采用线性标准化公式:
$RFM_{StandardScore} = \frac{RFM_{Score} - RFM_{Min}}{RFM_{Max} - RFM_{Min}} \times 99 + 1$
* 其中:$RFM_{Min}=W_R \times 1 + W_F \times 1 + W_M \times 1$$RFM_{Max}=W_R \times 5 + W_F \times 5 + W_M \times 5$
## 4. 数据处理流程
### 4.1 数据输入要求
| 数据项 | 数据类型 | 格式要求 | 校验规则 |
| ------ | ------------- | ------------------- | ------------ |
| 客户唯一标识 | String/Int | 全局唯一(如用户 ID、会员 ID | 非空、去重 |
| 订单唯一标识 | String/Int | 全局唯一(如订单号) | 非空、去重 |
| 消费时间 | DateTime | yyyy-MM-dd HH:mm:ss | 需在统计周期内 |
| 消费金额 | Decimal(18,2) | 大于 0 | 剔除负数、0 值 |
| 订单状态 | String | 枚举值(已支付、已取消、已退款等) | 仅保留 “已支付” 状态 |
### 4.2 数据预处理步骤
1. **数据过滤**
* 剔除统计周期外的订单数据
* 剔除订单状态为 “已取消”“已退款”“无效” 的记录
* 剔除员工内部订单、测试订单(按订单标签或用户标签过滤)
* 剔除单笔金额超过$M_{99分位值} \times 3$的异常大额订单(可配置开关)
1. **数据聚合**
* 按客户唯一标识分组,计算 R、F、M 原始指标:
* RMAX (消费时间) 到统计截止日的时间间隔(天)
* FCOUNT (DISTINCT 订单唯一标识)
* MSUM (消费金额)
1. **缺失值处理**
* 统计周期内无消费记录的客户R = 统计周期总天数F=0M=0分项得分均为 1 分
* 单个指标缺失(如仅缺失 M按 1 分计分项得分
### 4.3 评分计算流程
```mermaid
graph TD
A[数据输入] --> B[数据过滤]
B --> C[数据聚合计算R/F/M原始值]
C --> D[缺失值处理]
D --> E[按五分位法划分各维度区间]
E --> F[计算R/F/M分项得分]
F --> G[按权重计算RFM总分]
G --> H[可选标准化为1-100分]
H --> I[输出客户RFM评分结果]
```
## 5. 参数配置说明
| 参数名称 | 配置项 | 取值范围 | 默认值 | 配置方式 |
| ------- | ---------------------- | ------------- | ------ | --------------- |
| 统计周期 | cycle\_days | 30-365 | 180 | 系统配置页手动输入 |
| R 维度权重 | weight\_R | 0.1-0.8 | 0.4 | 系统配置页滑动条调整 |
| F 维度权重 | weight\_F | 0.1-0.8 | 0.3 | 系统配置页滑动条调整 |
| M 维度权重 | weight\_M | 0.1-0.8 | 0.3 | 系统配置页滑动条调整 |
| 异常金额阈值 | abnormal\_money\_ratio | 1.5-5.0 | 3.0 | 系统配置页手动输入(倍数关系) |
| 评分分制 | score\_scale | 5 分制 / 100 分制 | 5 分制 | 系统配置页单选 |
| 缺失值处理策略 | missing\_strategy | 按 1 分计 / 剔除客户 | 按 1 分计 | 系统配置页单选 |
## 6. 异常处理方案
### 6.1 数据异常
| 异常类型 | 表现形式 | 处理逻辑 | 影响范围 |
| ------ | ------------------------------ | ---------------------- | --------------- |
| 重复订单 | 同一客户同一时间相同订单号 | 去重保留 1 条有效记录 | 不影响 F、M 计算 |
| 大额异常订单 | 单笔金额 > $M_{99分位值} \times 异常阈值$ | 自动标记,可选择剔除或保留 | 仅影响 M 维度区间划分 |
| 消费时间异常 | 消费时间晚于统计截止日 | 视为无效数据,剔除 | 不影响最终结果 |
| 客户标识重复 | 同一客户多个唯一标识 | 按客户合并规则(如手机号、身份证号关联)聚合 | 需提前完成客户统一 ID 映射 |
### 6.2 计算异常
| 异常类型 | 触发条件 | 处理逻辑 | 输出结果 |
| -------- | --------------------- | --------------------------------------- | --------------- |
| 维度区间为空 | 某维度所有客户数据相同(如 F 均为 1 | 强制均分 5 个区间 | 分项得分按 1-5 分依次分配 |
| 权重总和不为 1 | 配置权重时计算错误 | 系统自动归一化处理($W'_X = W_X / (W_R+W_F+W_M)$ | 不影响总分有效性 |
| 统计周期过短 | 小于 30 天导致数据量不足 | 系统给出警告,允许强制执行 | 区间划分可能失真,建议延长周期 |
## 7. 输出结果格式
### 7.1 单客户评分结果
| 字段名 | 数据类型 | 示例 |
| --------- | ------------- | ----------------------- |
| 客户 ID | String | CUST2023001 |
| R 原始值(天) | Int | 15 |
| R 得分 | Int | 5 |
| F 原始值(次) | Int | 8 |
| F 得分 | Int | 4 |
| M 原始值(元) | Decimal(18,2) | 2560.00 |
| M 得分 | Int | 5 |
| RFM 总分 | Decimal(5,2) | 4.70 |
| 标准化得分(可选) | Int | 94 |
| 统计周期 | String | 2023-01-01 至 2023-06-30 |
| 计算时间 | DateTime | 2023-07-01 00:30:25 |
### 7.2 批量输出文件格式
* 支持 CSV、Parquet、JSON 格式导出
* 编码格式UTF-8
* 压缩方式:默认 GZIP可配置关闭
## 8. 业务适配建议
| 业务场景 | 统计周期建议 | 权重调整建议 | 特殊配置 |
| --------------- | ------- | --------------------------- | ----------------- |
| 快消零售 | 3-6 个月 | $W_R=0.5, W_F=0.3, W_M=0.2$ | 提高 R 维度权重,关注复购及时性 |
| 高客单价行业(如奢侈品、家居) | 12 个月 | $W_R=0.3, W_F=0.2, W_M=0.5$ | 提高 M 维度权重,关注消费能力 |
| 新品推广期 | 1-3 个月 | $W_R=0.6, W_F=0.2, W_M=0.2$ | 重点关注近期新客户 |
| 会员体系运营 | 6-12 个月 | $W_R=0.4, W_F=0.4, W_M=0.2$ | 提高 F 维度权重,鼓励高频消费 |
> (注:文档部分内容可能由 AI 生成)