20 KiB
PRD:SPI 消费力指数(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 目标
新增 SPI(Spending Power Index,消费力指数),评估客户在门店场景内的“消费力代理值”,重点基于:
- 消费水平(Level)
- 消费速度(Speed)
- 消费稳定性(Stability,可选修正项)
说明:稳定性窗口最长只使用 90 天,不使用 180 天(按本次需求明确要求)。
1.3 非目标
- 不评估金融/征信意义上的“信用能力”
- 不直接替代 NCI/WBI(紧迫度)
- 不直接替代 RS/OS/MS/ML(关系归属与执行人选择)
2. 设计原则与方法依据
- 行为数据驱动:使用消费/充值明细作为消费力代理信号(门店经营场景可解释、可落地)。
- 稳健统计:金额类数据长尾明显,展示分采用分位截断(Winsorize)降低极端值影响。Winsorization 本质是用指定分位数限制极端值影响,适合交易金额数据。
- 时间敏感:近期行为更有参考价值,采用指数衰减与 EWMA 平滑(近期更高权重)来处理速度与展示分稳定性。指数衰减与半衰期是标准时间权重形式,EWMA 则是常见的时间序列平滑方法。
- 与现有体系兼容:沿用现有
BaseIndexTask的映射逻辑(P5/P95 → 压缩 → MinMax 0–10 → 可选 EWMA)。 - 运营闭环导向:SPI 不是单独使用,需与 NCI/WBI/RS/OS/MS/ML 组合使用。
补充说明:RFM(Recency/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_idmember_idpay_timepay_amount(实付)settle_type(必要时过滤)- 明细项分类(台费、商品、服务等)
B. 充值订单明细(辅助)
-
来源:
dwd_recharge_order -
字段(至少):
site_idmember_idpay_timepay_amountsettle_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.60w_S = 0.30w_P = 0.10
若你希望先简化上线,也可 v1.0 不启用稳定性(
w_P=0),v1.1 再开启。 但本需求已明确“稳定性最长 90 天即可”,建议直接纳入 v1,权重先低配。
6. 展示分映射(Raw → Display 0–10)
SPI 与子分(Level/Speed/Stability)展示分均建议复用现有统一逻辑:
- 收集全体 Raw 分数
- 计算
P5/P95 - Winsorize 截断到
[P5, P95] - 可选压缩(
none/log1p/asinh) - MinMax 映射到
[0,10] - 可选 EWMA 平滑分位点
- 展示分保留 2 位小数
该映射适合金额类/长尾分布指标,可降低极端值造成的排序失真。
7. 输出表设计(新增)
7.1 表名建议
billiards_dws.dws_member_spending_power_index
7.2 主键
(site_id, member_id)
7.3 字段建议(v1)
基础特征(解释与排查)
spend_30spend_90recharge_90orders_30orders_90visit_days_30visit_days_90avg_ticket_90active_weeks_90daily_spend_ewma_90(若启用)
子分
score_level_rawscore_level_displayscore_speed_rawscore_speed_displayscore_stability_rawscore_stability_display
总分
raw_score(SPI_raw)display_score(SPI_display)
元数据
calc_timecreated_atupdated_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 计算流程
- 抽取消费订单明细(近90天)
- 抽取充值订单明细(近90天)
- 聚合客户级特征(30天/90天)
- 计算
Level/Speed/Stability子分 Raw - 计算
SPI_raw - 映射为展示分(0–10)
- 写入
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 10–20%)
- 中消费力
- 低消费力
场景 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. 风险与控制
-
异常大单抬高 SPI
- 控制:Winsorize + 压缩变换 + 稳定性子分(90天覆盖率)
-
充值替代真实消费导致高估
- 控制:充值在 Level 子分中权重较低(辅助信号)
-
短期活动造成速度异常升高
- 控制:速度项只部分加权;稳定性项用于修正
-
跨门店可比性问题
- 控制:SPI 默认用于门店内排序;如需跨店对比,需后续增加门店标准化层
14. 上线计划(建议)
Phase 1:影子跑数(1–2 周)
- 后台计算 SPI,不对运营展示
- 验证分布、极值、客户样本解释性
Phase 2:看板展示与规则试运行(2–4 周)
- 接入 NCI/WBI 队列的辅助分档
- 先用于“投入强度分层”,不直接自动派单
Phase 3:策略联动
- 用于活动名单筛选、增值推荐档位
- 与
ML/OS/MS联动形成自动建议
15. 研发实现清单(交付物)
-
新增任务:
SpendingPowerIndexTask -
新增结果表:
dws_member_spending_power_index -
新增配置:
cfg_index_parameters中index_type='SPI' -
新增看板字段:
SPI_displayLevel/Speed/Stability子分展示
-
新增运营策略读取逻辑(可选):
- 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])