客群index指数算法简介
– title: 客群Index指数算法简介 date: 2026-08-07 17:40:00 categories: [AI, ML] tags: [AI, ML, 聚类, PSI] image: path: /assets/img/posts/common/ml.jpg math: true —
客群 Index 指数算法简介
机器学习工程里说的「客群 Index / 客群指数」,最常指 PSI(Population Stability Index),中文常译为群体稳定性指数、人口稳定性指数或客群/样本稳定性指数:用分箱占比差量化两批样本分布漂移。广义上也包括 CSI、TGI、RFM 综合分等「把客群压成可监控数字」的方法。本文说明其作用、场景、原理、样本外/时间外应用范例与常用相关算法,并以具体数值例子演示计算与解读。
目录
- 1. 是什么
- 2. 作用与要解决的问题
- 3. 典型应用场景
- 4. PSI 实际应用范例
- 5. PSI 原理与计算步骤
- 6. 效果如何解读
- 7. 具体数据例子
- 8. 常用相关算法与指标
- 9. 实践注意
- 10. 小结
- 11. 参考与延伸
1. 是什么
PSI(Population Stability Index),直译为群体(人口)稳定性指数:
| 英文 | 含义 |
|---|---|
| Population | 这里的「人口 / 群体」指建模或上线所面对的样本总体(客群),不是人口学意义上的人口普查 |
| Stability | 两批样本在分数段 / 特征分段上的结构是否稳定、可比 |
| Index | 把分布差异压成一个可监控的标量指数 |
PSI 衡量两批样本(如「建模月」与「当月」、训练集与测试集)在同一分段上的分布差了多少。客群结构变了、模型分数整体漂移了,PSI 会升高。
\[\text{PSI} = \sum_i \bigl(p_i^{\text{实际}} - p_i^{\text{基准}}\bigr) \ln\frac{p_i^{\text{实际}}}{p_i^{\text{基准}}}\]其中 $p_i$ 是第 $i$ 个分箱(分数段、年龄段等)的人数占比;「基准」常取建模样本或某稳定历史窗口,「实际」取对比样本(测试集、时间外样本、当期进件等)。
命名提醒:口语里的「客群指数」有时也指营销侧的 RFM 打分、画像侧的 TGI。工程监控语境下,默认优先理解为 PSI;下文以 PSI 为主,§8 再对照相关指标。
2. 作用与要解决的问题
| 问题 | PSI 的作用 |
|---|---|
| 模型上线后「感觉不准了」 | 量化客群/分数分布相对建模时是否发生漂移 |
| 不知道该不该重训 | 用统一阈值做监控与告警 |
| 分数段人数结构变了 | 定位是整体平移,还是某些段暴涨暴跌 |
| 跨渠道、跨时期样本难对齐 | 对比两批人结构是否一致 |
| 训练是否「过拟合到某批人」 | 用训练集 vs 测试集 PSI,侧面观察模型对样本结构的敏感程度(与方差/泛化相关) |
要点:PSI 不直接预测好坏,它是监控与诊断指标,通常挂在评分卡、风控模型、营销响应模型的开发验证与运维链路上。
3. 典型应用场景
| 场景 | 怎么用 |
|---|---|
| 信贷 / 风控评分卡 | 每月对比申请分、行为分相对建模样本的 PSI |
| 反欺诈 / 营销响应模型 | 投放渠道或准入策略变化后,检查客群是否仍像训练样本 |
| 特征级监控(CSI) | 对单个特征做与 PSI 同构的计算,定位「谁漂了」 |
| 保险、互金、电商会员 | 定期看高价值 / 高风险人群占比是否结构突变 |
| 建模阶段验证 | 样本外(OOS)、时间外(OOT)稳定性检验(见 §4) |
4. PSI 实际应用范例
除上线后的月度监控外,建模阶段常用两类「稳定性测试」:
4.1 样本外测试(Out-of-Sample,OOS)
| 项 | 说明 |
|---|---|
| 做法 | 用训练集分数分布作基准,用测试集(或验证集)分数分布作实际,计算 PSI |
| 目的 | 看模型在「没参与拟合的另一批同期样本」上,分数结构是否仍稳定 |
| 怎么理解 | PSI 很小 → 训练/测试客群结构接近,模型分的分段形态一致,泛化在「结构层面」较稳;PSI 偏大 → 可能切分不均、过拟合到训练集客群,或抽样有偏。可与 AUC/KS 等效果指标对照,侧面观察模型方差 / 稳定性(效果波动大 + PSI 高,更需警惕) |
| 注意 | PSI 反映的是分布结构,不是直接等于统计学习里的方差估计;宜与交叉验证、效果指标一起读 |
4.2 时间外测试(Out-of-Time,OOT)
| 项 | 说明 |
|---|---|
| 做法 | 用建模基准日附近的样本(或建模样本)作基准,用更晚时间窗的进件/交易样本作实际,计算 PSI |
| 目的 | 检验「时间往前推」后,风险特征与客群结构是否仍像建模时 |
| 经验现象 | 测试基准日与建模基准日相隔越远,测试样本的风险特征、渠道结构与建模样本差异往往越大,PSI 通常越高 |
| 决策含义 | 若 OOT 的 PSI 持续偏高(如长期 ≥ 0.25),说明模型「建得太久、人变了」——需要评估是否用新样本重新建模,而不能只靠微调阈值硬撑 |
| 对比 | 样本外(OOS) | 时间外(OOT) |
|---|---|---|
| 切分轴 | 同一时期,人不同(随机/分层切分) | 时间不同,往往人也不同 |
| 主要回答 | 模型对「另一批同期人」稳不稳 | 模型对「未来进件」还适不适用 |
| PSI 偏高时 | 查抽样、过拟合、特征泄漏等 | 查客群漂移、策略变化、是否该重训 |
5. PSI 原理与计算步骤
5.1 直观理解
把连续分(或离散特征)切成若干箱,比较「基准期」与「对比期」各箱占比。某一箱占比差得越大,对 PSI 的贡献通常越大;全部箱子贡献求和即总 PSI。
5.2 三步流程
1
2
3
4
5
6
7
定基准样本(Expected)
↓
对模型分 / 特征分箱(等频或等距,常用 10 箱)
↓
算对比样本各箱占比(Actual)
↓
按公式对每箱求 (A−E)×ln(A/E),再求和 → PSI
| 步骤 | 说明 |
|---|---|
| 1. 定基准 | 如建模样本、训练集,或上线首月稳定窗口 |
| 2. 分箱 | 等频(每箱人数近似相等)或等距;箱数过少粗糙,过多噪声大 |
| 3. 对比实际 | 空箱、零占比需做平滑(如加极小值),避免 $\ln(0)$ |
6. 效果如何解读
业界常用经验阈值(可按业务微调):
| PSI | 含义 | 建议动作 |
|---|---|---|
| < 0.1 | 稳定 | 继续例行观察 |
| 0.1~0.25 | 有明显变化 | 排查原因;考虑调切点或小修模型 |
| ≥ 0.25 | 显著漂移 | 重点查数据/客群/策略;常需重训或下线复核 |
PSI 变大只说明「分布不像了」,不等于立刻证明模型失效;还需结合 AUC、KS、逾期率、转化率等效果指标一起看。
7. 具体数据例子
假设某信用分(0–1000)分成 5 段,对比基准月与本月人数占比:
| 分数段 | 基准占比 $E$ | 本月占比 $A$ | $A-E$ | $\ln(A/E)$ | 贡献 $(A-E)\ln(A/E)$ |
|---|---|---|---|---|---|
| 0–200 | 10% | 8% | −0.02 | −0.223 | 0.0045 |
| 200–400 | 20% | 15% | −0.05 | −0.288 | 0.0144 |
| 400–600 | 30% | 25% | −0.05 | −0.182 | 0.0091 |
| 600–800 | 25% | 30% | +0.05 | +0.182 | 0.0091 |
| 800–1000 | 15% | 22% | +0.07 | +0.382 | 0.0267 |
| 合计 PSI | ≈ 0.064 |
解读:PSI ≈ 0.064 < 0.1,分布略往高分段挪,整体仍算稳定。
对比:若结构剧变(示意)——本月低分段猛增、高分段骤降,各箱贡献累加后 PSI 很容易冲到 0.25+。此时应排查:渠道是否更换、准入是否放宽、分数校准是否异常、是否有异常团伙涌入等。
7.1 伪代码示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import numpy as np
def psi(actual_pct, expected_pct, eps=1e-6):
"""actual_pct / expected_pct: 各箱占比,和约为 1"""
a = np.clip(np.asarray(actual_pct, dtype=float), eps, None)
e = np.clip(np.asarray(expected_pct, dtype=float), eps, None)
a = a / a.sum()
e = e / e.sum()
return float(np.sum((a - e) * np.log(a / e)))
# 对应上表
E = [0.10, 0.20, 0.30, 0.25, 0.15]
A = [0.08, 0.15, 0.25, 0.30, 0.22]
print(round(psi(A, E), 4)) # ≈ 0.0638
8. 常用相关算法与指标
| 名称 | 英文 | 作用 |
|---|---|---|
| PSI | Population Stability Index | 客群 / 分数整体分布相对基期是否稳定(最常用) |
| CSI | Characteristic Stability Index | 单个特征分布是否稳定(算式与 PSI 同构) |
| TGI | Target Group Index | 某客群对某标签的偏好:$\bigl(\text{客群内占比}/\text{总体占比}\bigr)\times 100$ |
| RFM 指数 / 评分 | Recency–Frequency–Monetary | 近度、频次、金额打分后分层运营(营销侧「客群指数」) |
| Lift / 响应指数 | Lift Index | 目标客群相对随机触达的提升倍数 |
| 聚类客群 | K-Means、HDBSCAN、Leiden 等 | 先发现客群,再用 PSI 监控各群占比是否漂移 |
选型口诀:
| 目标 | 更合适 |
|---|---|
| 监控模型 / 客群有没有漂 | PSI / CSI |
| 给客户打价值分、做运营分层 | RFM / 评分卡 / 聚类 |
| 看某群是否更偏爱某品类 | TGI |
| 评估定向营销相对随机的提升 | Lift |
8.1 TGI 小例子
全体用户中「买过保健品」占 10%;「高净值客群」中该占比为 25%。则
\[\text{TGI} = \frac{25\%}{10\%}\times 100 = 250\]通常 TGI ≥ 120 视为偏好明显,≤ 80 视为偏好偏弱(阈值因行业而异)。
8.2 RFM 与 PSI 的关系
RFM 解决「人怎么分层」;PSI 解决「分层后的结构 / 模型分有没有漂」。生产上常见组合:先 RFM 或评分卡得到客群标签与分数,再对分数或客群占比跑月度 PSI。
9. 实践注意
| 注意点 | 说明 |
|---|---|
| 分箱方式 | 等频 / 等距会影响数值;监控应用中应固定基准分箱边界,勿每期重切箱 |
| 空箱与平滑 | 占比为 0 时需平滑,否则对数无定义 |
| 只看 PSI 不够 | 须结合业务效果指标(KS、AUC、逾期、转化等) |
| 客群变了 ≠ 模型一定坏 | 可能是策略主动扩量;要区分「预期内变化」与「异常漂移」 |
| 样本量 | 当期样本过少时 PSI 波动大,宜设最小样本量门槛 |
| OOS vs OOT | 建模验收建议两者都做:OOS 看同期泛化结构,OOT 看时间外可用性 |
10. 小结
| 要点 | 结论 |
|---|---|
| 默认含义 | 工程上「客群 Index 指数」多指 PSI(群体/人口稳定性指数) |
| 解决什么 | 量化两期客群 / 分数分布漂移,支撑监控与重训决策 |
| 核心做法 | 固定分箱 → 比占比 → $(A-E)\ln(A/E)$ 求和 |
| 效果读数 | <0.1 稳;0.1~0.25 关注;≥0.25 重点排查 |
| 应用范例 | 样本外:训测对比看稳定度;时间外:越远 PSI 常越高,提示是否该重训 |
| 相关工具 | CSI、TGI、RFM、Lift、聚类分群 + PSI 联用 |
11. 参考与延伸
| 资源 | 说明 |
|---|---|
| 阿里云 PAI:样本稳定指数(PSI) | 文档说明与组件用法 |
| 评分卡与模型监控实践 | 风控建模中 PSI / CSI 为标准监控项;OOS / OOT 为常见验收手段 |
| RFM | 营销侧客户价值分层的经典框架 |