Files
Neo-ZQYY/docs/prd/SPI 消费力指数.md

707 lines
20 KiB
Markdown
Raw 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.
# PRDSPI 消费力指数Spending Power Index建设方案MD
* **文档版本**v1.0
* **状态**:定稿(可进入研发设计/排期)
* **适用范围**:门店客户运营(新客转化、老客召回、增值推荐、资源分配)
* **相关指数体系**`NCI``WBI``RS``OS``MS``ML`SPI 为新增客户级指数)
---
## 1. 背景与目标
### 1.1 背景
当前体系中:
* `NCI` 用于新客欢迎与转化优先级
* `WBI` 用于老客召回优先级
* `RS/OS/MS/ML` 用于关系强度、归属、动量、付费关联(助教-客户关系对粒度)
但尚缺少一个**客户级的“消费能力/消费层级”指数**,导致以下问题:
* 高价值客户与普通客户在运营动作上难以区分投入强度
* 增值服务推荐缺少“消费能力层级”依据
* 资源分配容易只看“紧急程度”忽略“投入产出比ROI
### 1.2 目标
新增 **SPISpending Power Index消费力指数**,评估客户在门店场景内的“消费力代理值”,重点基于:
* **消费水平Level**
* **消费速度Speed**
* **消费稳定性Stability可选修正项**
> 说明:稳定性窗口**最长只使用 90 天**,不使用 180 天(按本次需求明确要求)。
### 1.3 非目标
* 不评估金融/征信意义上的“信用能力”
* 不直接替代 NCI/WBI紧迫度
* 不直接替代 RS/OS/MS/ML关系归属与执行人选择
---
## 2. 设计原则与方法依据
1. **行为数据驱动**:使用消费/充值明细作为消费力代理信号(门店经营场景可解释、可落地)。
2. **稳健统计**金额类数据长尾明显展示分采用分位截断Winsorize降低极端值影响。Winsorization 本质是用指定分位数限制极端值影响,适合交易金额数据。
3. **时间敏感**:近期行为更有参考价值,采用指数衰减与 EWMA 平滑近期更高权重来处理速度与展示分稳定性。指数衰减与半衰期是标准时间权重形式EWMA 则是常见的时间序列平滑方法。
4. **与现有体系兼容**:沿用现有 `BaseIndexTask` 的映射逻辑P5/P95 → 压缩 → MinMax 010 → 可选 EWMA
5. **运营闭环导向**SPI 不是单独使用,需与 NCI/WBI/RS/OS/MS/ML 组合使用。
> 补充说明RFMRecency/Frequency/Monetary是成熟的客户价值/客户分层框架SPI 在其基础上强化“消费速度”与门店场景的可执行性。
---
## 3. 指数定义
## 3.1 指数名称
* 中文:**消费力指数**
* 英文:**Spending Power Index**
* 缩写:**SPI**
## 3.2 粒度
* **客户级member**
* 主键建议:`(site_id, member_id)`
## 3.3 业务含义
SPI 用于衡量客户在门店体系内的综合消费力层级,回答:
* 这个客户整体消费能力在门店内属于什么层级?
* 近期消费推进速度是否明显变快?
* 是稳定高消费,还是偶发冲高?
---
## 4. 数据来源与口径
## 4.1 数据来源(建议)
### A. 消费订单明细(核心)
* 来源:结算/订单主表及明细表(按现有 DWD 口径)
* 字段(至少):
* `site_id`
* `member_id`
* `pay_time`
* `pay_amount`(实付)
* `settle_type`(必要时过滤)
* 明细项分类(台费、商品、服务等)
### B. 充值订单明细(辅助)
* 来源:`dwd_recharge_order`
* 字段(至少):
* `site_id`
* `member_id`
* `pay_time`
* `pay_amount`
* `settle_type = 5`
### C. 可选增强
* 储值卡余额(用于解释)
---
## 4.2 时间窗口(定稿)
> **稳定性最长只用 90 天。**
* **短窗口**30 天(近期消费速度)
* **中窗口**90 天(消费层级、速度基线、稳定性)
---
## 4.3 统计口径(建议)
* 消费金额:使用 `pay_amount`(实付)
* 按天去重的消费日:用于计算消费日密度
* 若同一天多笔消费:计入总额,消费日数仅计 1 天
* 充值金额:使用充值订单 `pay_amount`
* 金额单位:与现有系统保持一致(元)
---
## 5. SPI 算法设计v1
> v1 采用“主分 + 子分”的结构,保证解释性:
* `Level`(消费水平)
* `Speed`(消费速度)
* `Stability`(消费稳定性,作为修正项;最长 90 天)
* `SPI = f(Level, Speed, Stability)`
---
## 5.1 基础特征定义(客户级)
设:
* `spend_30`近30天消费总额
* `spend_90`近90天消费总额
* `recharge_90`近90天充值总额
* `orders_30 / orders_90`近30/90天消费笔数
* `visit_days_30 / visit_days_90`近30/90天有消费的营业日数按营业日去重营业日以 08:00 为分割点)
* `avg_ticket_90 = spend_90 / max(orders_90, 1)`90天客单
* `weekly_spend_90`近90天按周汇总消费额序列约13周
* `daily_spend_series_90`近90天按日消费额序列用于 EWMA
---
## 5.2 子分一消费水平Level
### 目的
衡量客户的消费金额层级与客单水平,兼顾充值规模(预算能力代理信号)。
### 建议公式
[
L = w_{s30}\cdot \ln(1+\frac{spend_{30}}{M30})
* w_{s90}\cdot \ln(1+\frac{spend_{90}}{M90})
* w_{ticket}\cdot \ln(1+\frac{avg_ticket_{90}}{T0})
* w_{r90}\cdot \ln(1+\frac{recharge_{90}}{R90})
]
### 说明
* 使用 `log1p` 压缩长尾,避免大额客户过度支配排序
* 30天与90天并用兼顾近期层级与稳定层级
* 充值是辅助信号,不应压过真实消费金额
---
## 5.3 子分二消费速度Speed
### 目的
衡量“近期消费推进快不快”,体现消费节奏变化。
### A. 绝对速度(近期强度)
[
V_{abs} = \ln \left(1+\frac{spend_{30}}{\max(visit_days_{30},1)\cdot V0}\right)
]
含义近30天“每个消费日平均消费强度”。
### B. 相对速度(近期 vs 基线)
[
v_{30}=\frac{spend_{30}}{30}, \quad v_{90}=\frac{spend_{90}}{90}
]
[
V_{rel} = \ln\left(\frac{v_{30}+\epsilon}{v_{90}+\epsilon}\right)
]
* `V_rel > 0`近期消费速度快于90天基线加速
* `V_rel < 0`:近期消费速度低于基线(放缓)
### C. 平滑速度EWMA可选
`daily_spend_series_90` 做 EWMA得到 `daily_spend_ewma_90`
[
V_{ewma}=\ln(1+\frac{daily_spend_ewma_{90}}{E0})
]
### Speed 子分(建议)
[
S = w_{abs}\cdot V_{abs} + w_{rel}\cdot max(0, V_{rel}) + w_{ewma}\cdot V_{ewma}
]
> v1 建议仅对“加速”加分(`max(0,V_rel)`),不对“减速”直接扣分;减速信号已在 WBI 中承担召回压力逻辑。
---
## 5.4 子分三消费稳定性Stability最长 90 天)
### 目的
识别“稳定高消费”与“偶发冲高”,防止单笔大单导致 SPI 虚高。
### 窗口要求(定稿)
**只使用近90天**
### 建议特征v1 可二选一或组合)
[
Stab_{cover} = \frac{#(\text{近90天有消费的周数})}{13}
]
### Stability 子分v1 推荐)
[
P = Stab_{cover}
]
v1 先采用覆盖率,简单、稳健、工程成本低)
---
## 5.5 SPI 总分Raw
### 建议结构v1
[
SPI_{raw} = w_L \cdot L + w_S \cdot S + w_P \cdot P
]
### 建议默认权重v1
* `w_L = 0.60`
* `w_S = 0.30`
* `w_P = 0.10`
> 若你希望先简化上线,也可 v1.0 不启用稳定性(`w_P=0`v1.1 再开启。
> 但本需求已明确“稳定性最长 90 天即可”,建议直接纳入 v1权重先低配。
---
## 6. 展示分映射Raw → Display 010
SPI 与子分Level/Speed/Stability展示分均建议复用现有统一逻辑
1. 收集全体 Raw 分数
2. 计算 `P5/P95`
3. Winsorize 截断到 `[P5, P95]`
4. 可选压缩(`none/log1p/asinh`
5. MinMax 映射到 `[0,10]`
6. 可选 EWMA 平滑分位点
7. 展示分保留 2 位小数
> 该映射适合金额类/长尾分布指标,可降低极端值造成的排序失真。
---
## 7. 输出表设计(新增)
## 7.1 表名建议
`billiards_dws.dws_member_spending_power_index`
## 7.2 主键
* `(site_id, member_id)`
## 7.3 字段建议v1
### 基础特征(解释与排查)
* `spend_30`
* `spend_90`
* `recharge_90`
* `orders_30`
* `orders_90`
* `visit_days_30`
* `visit_days_90`
* `avg_ticket_90`
* `active_weeks_90`
* `daily_spend_ewma_90`(若启用)
### 子分
* `score_level_raw`
* `score_level_display`
* `score_speed_raw`
* `score_speed_display`
* `score_stability_raw`
* `score_stability_display`
### 总分
* `raw_score`SPI_raw
* `display_score`SPI_display
### 元数据
* `calc_time`
* `created_at`
* `updated_at`
---
## 8. 配置体系cfg_index_parameters新增项
## 8.1 index_type
新增:
* `SPI`
## 8.2 参数清单(建议默认值)
### 窗口与平滑
| 参数 | 默认值 | 说明 |
| ------------------------- | --: | ------------- |
| `spend_window_short_days` | 30 | 短窗口(速度) |
| `spend_window_long_days` | 90 | 长窗口(层级/稳定性上限) |
| `ewma_alpha_daily_spend` | 0.3 | 日消费 EWMA 平滑系数 |
### 金额压缩基数
| 参数 | 默认值 | 说明 |
| ------------------------- | ---: | ---------- |
| `amount_base_spend_30` | 按门店分布校准 | 30天消费压缩基数 |
| `amount_base_spend_90` | 按门店分布校准 | 90天消费压缩基数 |
| `amount_base_ticket_90` | 按门店分布校准 | 90天客单压缩基数 |
| `amount_base_recharge_90` | 按门店分布校准 | 90天充值压缩基数 |
| `amount_base_speed_abs` | 按门店分布校准 | 绝对速度压缩基数 |
| `amount_base_ewma_90` | 按门店分布校准 | EWMA速度压缩基数 |
### 权重(总分)
| 参数 | 默认值 | 说明 |
| ------------------ | ---: | ------------ |
| `weight_level` | 0.60 | Level 权重 |
| `weight_speed` | 0.30 | Speed 权重 |
| `weight_stability` | 0.10 | Stability 权重 |
### 权重Level 子分)
| 参数 | 默认值 | 说明 |
| --------------------- | ---: | -------------- |
| `w_level_spend_30` | 0.30 | Level 中 30天消费项 |
| `w_level_spend_90` | 0.35 | Level 中 90天消费项 |
| `w_level_ticket_90` | 0.20 | Level 中 90天客单项 |
| `w_level_recharge_90` | 0.15 | Level 中 90天充值项 |
### 权重Speed 子分)
| 参数 | 默认值 | 说明 |
| -------------- | ---: | --------- |
| `w_speed_abs` | 0.50 | 绝对速度项 |
| `w_speed_rel` | 0.30 | 相对速度项(加速) |
| `w_speed_ewma` | 0.20 | EWMA速度项 |
### 稳定性参数90天上限
| 参数 | 默认值 | 说明 |
| ----------------------- | --: | ------------- |
| `stability_window_days` | 90 | 稳定性窗口固定上限90 |
| `use_stability` | 1 | 是否启用稳定性子分 |
| `stability_mode` | 1 | 1=周覆盖率v1推荐 |
### 映射与平滑(复用 BaseIndexTask
| 参数 | 默认值 | 说明 |
| ------------------ | --: | ------------------------ |
| `percentile_lower` | 5 | 下分位 |
| `percentile_upper` | 95 | 上分位 |
| `compression_mode` | 1 | 0=none, 1=log1p, 2=asinh |
| `use_smoothing` | 1 | 是否启用分位平滑 |
| `ewma_alpha` | 0.2 | 分位 EWMA 平滑系数 |
---
## 9. 任务与计算策略(建议)
## 9.1 任务形态
* 新增客户级任务:`SpendingPowerIndexTask`
* 粒度:`(site_id, member_id)`
* 建议频率:**每日**(与 NCI/WBI 接近,便于客户级看板统一刷新)
## 9.2 计算流程
1. 抽取消费订单明细近90天
2. 抽取充值订单明细近90天
3. 聚合客户级特征30天/90天
4. 计算 `Level/Speed/Stability` 子分 Raw
5. 计算 `SPI_raw`
6. 映射为展示分010
7. 写入 `dws_member_spending_power_index`delete-before-insert 或 upsert
---
## 10. SPI 参与的所有相关运营场景(完整清单)
> 原则:**SPI 不单独决定“要不要触达”,而是与 NCI/WBI紧急度+ RS/OS/MS/ML执行关系组合使用。**
---
## 10.1 新客运营NCI 场景)
### 场景 A1新客欢迎优先级欢迎建联
* **主用指数**`NCI_welcome`
* **SPI 作用**:决定欢迎动作投入强度(轻触达/强服务)
* **策略**
* `NCI_welcome 高 + SPI 高`:优先人工建联、安排更高质量接待与后续方案
* `NCI_welcome 高 + SPI 中低`:标准欢迎流程,重点推动二访而非高价增值
### 场景 A2新客二访转化
* **主用指数**`NCI_convert`
* **SPI 作用**:判断适合推“基础二访”还是“升级体验包/储值方案”
* **配合指数**
* `OS`:谁负责触达
* `ML`:若涉及充值/储值,由谁推更容易成交
### 场景 A3新客近期活跃避免过度打扰
* **主用指数**`NCI`(内置活跃抑制)
* **SPI 作用**:不用于提高打扰频率,而用于现场服务策略分层
* **运营建议**
* 高 SPI 新客:现场体验升级、服务深度设计
* 低 SPI 新客:降低销售压力,先建立习惯
---
## 10.2 老客召回WBI 场景)
### 场景 B1老客召回名单排序
* **主用指数**`WBI`
* **SPI 作用**:决定召回资源优先级(投入强度/人工优先)
* **策略**
* `WBI 高 + SPI 高`:优先人工召回、重点维护
* `WBI 高 + SPI 中低`:先低成本触达(消息/轻优惠)
### 场景 B2充值未回访专项召回
* **主用指数**`WBI`(充值未回访压力)
* **SPI 作用**:判断值得投入多大召回成本
* **配合指数**
* `ML`:选执行人(谁推更容易成)
* `OS`:定责(避免撞单)
### 场景 B3高消费力沉默客户价值保全
* **触发逻辑**`SPI 高``WBI` 进入召回区间
* **运营重点**:不是纯促销,而是“关系修复/体验恢复/高价值保留”
---
## 10.3 活跃客户跟进与升温承接MS 场景)
### 场景 C1近期消费/来店升温客户承接
* **主用指数**`MS`(关系动量)
* **SPI 作用**:判断承接动作的强度与档位
* **配合指数**
* `OS`:由谁跟进
* `RS`:关系强弱决定话术深浅
* `ML`:如涉及储值推荐,决定由谁推
### 场景 C2关系强但消费层级下滑潜在降档预警
* **组合信号**`RS 高` + `SPI_speed 下降`(或 SPI 总分下滑)
* **运营动作**:先做需求确认/体验诊断,再决定促销或产品调整
---
## 10.4 增值服务与储值推荐ML + SPI 场景)
### 场景 D1筛选“值得重点推增值”的客户
* **主用指数**`SPI`
* **配合指数**`MS`(时机)、`RS`(关系)、`WBI/NCI`(是否当前应触达)
* **策略**
* `SPI 高 + MS 高`:优先推增值(最佳时机)
* `SPI 高 + WBI 高`:先召回再推,不要直接硬销
* `SPI 低 + RS 高`:可做低门槛增值尝试,不推高价方案
### 场景 D2确定“由谁来推更可能成功”
* **主用指数**`ML`
* **SPI 作用**:决定是否值得高成本人力投入
* **配合指数**
* `OS`:责任边界
* `RS`:关系基础
* `MS`:时机窗口
---
## 10.5 客户分层与运营资源配置(门店/店长视角)
### 场景 E1客户池分层高/中/低消费力)
* **主用指数**`SPI_display`
* **作用**:作为全店客户分层基础维度(可与活跃度、风险度交叉)
* **建议分层**
* 高消费力Top 1020%
* 中消费力
* 低消费力
### 场景 E2人力资源分配助教时间预算
* **组合指数**
* 客户优先级:`NCI/WBI`
* 客户消费力:`SPI`
* 执行人选择:`OS/ML`
* **规则示例**
* 高 NCI/WBI + 高 SPI优先人工跟进
* 高 NCI/WBI + 低 SPI半自动/标准化触达
* 低 NCI/WBI + 高 SPI低频但重点维系
### 场景 E3活动名单筛选
* **SPI 作用**:筛选活动档位与名单
* **示例**
* 高 SPI 客户:高阶体验/高客单活动
* 中低 SPI 客户:入门体验/拉频次活动
---
## 10.6 管理与复盘(分析场景)
### 场景 F1增值策略复盘
* **组合指标**`SPI`(客户层级) + `ML`(执行人付费关联)
* **看什么**
* 高 SPI 客户是否被正确触达
* 高 SPI 客户的增值转化是否集中在正确助教ML 高者)
### 场景 F2客户结构变化监控
* **主用指数**`SPI`
* **看什么**
* 高 SPI 客户数量变化
* 各层级客户占比变化
* 高 SPI 客户的活跃/沉默迁移(结合 WBI
### 场景 F3门店经营质量诊断非直接派单
* **组合信号**
* `SPI 高` 客户群体的 `WBI` 是否整体抬升(高价值流失预警)
* `SPI 高` 客户群体的 `MS` 是否持续走低(热度下降)
---
## 11. 运营使用规则(落地建议)
## 11.1 统一原则
* **NCI/WBI 决定“要不要优先触达”**
* **SPI 决定“投入多大资源、用什么档位策略”**
* **OS/RS/MS/ML 决定“谁来做、什么时候做、谁更容易做成”**
## 11.2 一个实用的组合模板
### 新客转化
* 选人群:`NCI_convert 高`
* 分档:`SPI 高/中/低`
* 落人:`OS`(若已有关系)否则新客官
* 增值时机:`MS 高` 再推,执行人选 `ML 高`
### 老客召回
* 选人群:`WBI 高`
* 分档:`SPI 高` 优先人工,`SPI 低` 低成本触达
* 落人:`OS=MAIN`,若无归属则公海召回组
* 若涉及储值:执行人优先 `ML 高`
---
## 12. 验收标准(数据与业务)
## 12.1 数据正确性
* `SPI_raw` 在新增消费/充值后总体应单调不减(同等其他条件下)
* `score_speed_raw` 在近30天消费速度高于近90天基线时应提升
* `score_stability_raw` 仅使用近90天数据不引用 180 天)
* 展示分稳定:在总体分布无大变化时,`display_score` 不应异常跳变(启用 EWMA
## 12.2 业务可用性
* 运营可基于 SPI 完成客户分层(高/中/低)
* 运营可在 NCI/WBI 队列中使用 SPI 做资源投入分层
* 增值推荐场景可用 SPI + ML + OS 形成可执行规则
---
## 13. 风险与控制
1. **异常大单抬高 SPI**
* 控制Winsorize + 压缩变换 + 稳定性子分90天覆盖率
2. **充值替代真实消费导致高估**
* 控制:充值在 Level 子分中权重较低(辅助信号)
3. **短期活动造成速度异常升高**
* 控制:速度项只部分加权;稳定性项用于修正
4. **跨门店可比性问题**
* 控制SPI 默认用于门店内排序;如需跨店对比,需后续增加门店标准化层
---
## 14. 上线计划(建议)
### Phase 1影子跑数12 周)
* 后台计算 SPI不对运营展示
* 验证分布、极值、客户样本解释性
### Phase 2看板展示与规则试运行24 周)
* 接入 NCI/WBI 队列的辅助分档
* 先用于“投入强度分层”,不直接自动派单
### Phase 3策略联动
* 用于活动名单筛选、增值推荐档位
*`ML/OS/MS` 联动形成自动建议
---
## 15. 研发实现清单(交付物)
1. 新增任务:`SpendingPowerIndexTask`
2. 新增结果表:`dws_member_spending_power_index`
3. 新增配置:`cfg_index_parameters``index_type='SPI'`
4. 新增看板字段:
* `SPI_display`
* `Level/Speed/Stability` 子分展示
5. 新增运营策略读取逻辑(可选):
* NCI/WBI 队列中读取 SPI 做资源分档
---
## 16. 附录:公式与约定(实现参考)
### 16.1 指数衰减(如后续引入时间衰减特征)
[
decay(d; h)=exp(-ln(2)\cdot d / h)
]
(半衰期形式,`d=h` 时权重降为 0.5([维基百科][2])
### 16.2 展示分映射(沿用现有 BaseIndexTask
* P5/P95 Winsorize
* `compression_mode`: `none / log1p / asinh`
* MinMax → `[0,10]`
* 可选 EWMA 分位平滑(`ewma_alpha`([维基百科][1])