层次模型:用数据分层处理不同群体
产品经理的数学课 · 第26讲
层次模型:用数据分层处理不同群体
不同用户群体的行为可能不同。层次模型让你同时分析所有群体的数据,同时允许群体之间的差异——这就是「部分池化」的智慧。
前言
你的产品有 3 个渠道:自然搜索、付费广告、社交媒体。
每个渠道的转化率不同:
- 自然搜索:8%
- 付费广告:12%
- 社交媒体:6%
问题:如何准确估计每个渠道的转化率?
如果数据量相同:直接用每个渠道的数据计算。
如果数据量差异大(自然搜索 10,000 次,社交媒体 100 次):
- 自然搜索:8%(置信区间 7.5%-8.5%,很窄)
- 社交媒体:6%(置信区间 2%-14%,很宽)
层次模型:用所有渠道的数据「借力」,让数据少的渠道估计更准确。
核心概念
完全不池化 vs 完全池化
完全不池化(No Pooling):每个渠道独立估计
- 优点:每个渠道有自己的参数
- 缺点:数据少的渠道估计不准确
完全池化(Complete Pooling):所有渠道用同一个参数
- 优点:数据多,估计稳定
- 缺点:忽略渠道之间的差异
部分池化(Partial Pooling)
层次模型:介于不池化和完全池化之间
- 每个渠道有自己的参数
- 但这些参数来自同一个分布(超先验)
- 数据少的渠道会「收缩」向总体均值
数学表示: $$ \theta_j \sim N(\mu, \tau^2) \text{(超先验)} $$ $$ y_j \sim \text{Binomial}(n_j, \theta_j) \text{(似然)} $$
其中:
- θⱼ 是第 j 个渠道的转化率
- μ 是总体均值
- τ² 是渠道间方差
贝叶斯分层模型
三层结构:
- 数据层:yⱼ ~ Binomial(nⱼ, θⱼ)
- 参数层:θⱼ ~ N(μ, τ²)
- 超参数层:μ ~ N(0, 10²), τ ~ Half-Normal(0, 5)
MCMC 采样:同时估计 θⱼ、μ、τ。
收缩效应(Shrinkage)
数据少的渠道:向总体均值收缩
- 社交媒体(100 次):6% → 收缩到约 8%
- 置信区间变窄
数据多的渠道:几乎不收缩
- 自然搜索(10,000 次):8% → 保持 8%
- 置信区间不变
预测新数据
层次模型可以预测新渠道的转化率:
- 从超先验中采样 μ 和 τ
- 生成新渠道的 θ*
- 计算预测分布
行动:即使没有数据,也能预测新渠道的表现。
产品经理的应用
应用场景一:多渠道转化率估计
你的产品有 5 个渠道,数据量差异大:
| 渠道 | 访问量 | 转化量 | 转化率 |
|---|---|---|---|
| 自然搜索 | 10,000 | 800 | 8.0% |
| 付费广告 | 5,000 | 600 | 12.0% |
| 社交媒体 | 100 | 6 | 6.0% |
| 邮件营销 | 500 | 50 | 10.0% |
| 直接访问 | 2,000 | 180 | 9.0% |
层次模型结果:
| 渠道 | 原始转化率 | 层次模型估计 | 收缩量 |
|---|---|---|---|
| 自然搜索 | 8.0% | 8.1% | +0.1% |
| 付费广告 | 12.0% | 11.8% | -0.2% |
| 社交媒体 | 6.0% | 8.5% | +2.5% |
| 邮件营销 | 10.0% | 9.8% | -0.2% |
| 直接访问 | 9.0% | 9.1% | +0.1% |
行动:社交媒体的真实转化率可能不是 6%,而是约 8.5%。
应用场景二:用户分群的转化率
你的产品有 3 个用户群体:新用户、活跃用户、沉默用户。
层次模型:估计每个群体的转化率,同时考虑群体间的相似性。
输出:
- 新用户转化率:5%(置信区间 4%-6%)
- 活跃用户转化率:15%(置信区间 14%-16%)
- 沉默用户转化率:3%(置信区间 2%-5%)
行动:针对不同群体设计不同的转化策略。
应用场景三:跨地区销售预测
你的产品在 10 个城市销售,数据量差异大。
层次模型:
- 估计每个城市的销售弹性
- 用大城市的数据「借力」小城市
- 预测新城市的销售
输出:
- 北京(数据多):价格弹性 -1.2(置信区间 -1.3 到 -1.1)
- 拉萨(数据少):价格弹性 -1.0(收缩到 -1.2 附近)
行动:即使拉萨数据少,也能基于总体趋势给出合理估计。
常见误区
误区一:层次模型总是比简单模型好
「用层次模型总比不用好」
数据量大且群体差异大时:层次模型可能过度收缩,掩盖真实差异。
数据量小时:层次模型很有帮助(借力)。
需要检查收缩效应:τ² 太小意味着群体差异小,可能不需要分层。
误区二:层次结构总是三层
「层次模型必须是三层的」
层次可以更多层:
- 用户 → 渠道 → 地区 → 国家
- 每层都有自己的参数和超参数
但层数越多,模型越复杂,需要更多数据和计算。
误区三:忽略先验的影响
「层次模型自动处理了先验」
超先验的选择会影响结果:
- τ 的先验太宽:群体差异可能被高估
- τ 的先验太窄:群体差异可能被低估
需要敏感性分析。
误区四:层次模型解释困难
「层次模型太复杂,无法解释」
层次模型的输出仍然是每个群体的参数:
- 每个渠道的转化率
- 每个用户群体的流失率
解释起来和简单模型一样直观。
PM/BA 应用
| 场景 | 层次模型工具 | 决策价值 |
|---|---|---|
| 多渠道分析 | 部分池化 | 准确估计转化率 |
| 用户分群 | 分层贝叶斯 | 识别群体差异 |
| 跨地区预测 | 借力估计 | 预测新市场 |
| 产品版本对比 | 多版本模型 | 评估版本差异 |
| 时间序列 | 动态层次模型 | 捕捉趋势变化 |
课后测验
题目 1
什么是层次模型的「部分池化」?
A. 所有群体用同一个参数
B. 每个群体独立估计参数
C. 数据少的群体向总体均值收缩
D. 忽略群体间的差异
查看答案与解析
答案:C(数据少的群体向总体均值收缩)
部分池化 = 层次模型的核心:
- 不池化:每个群体独立(数据少时不准确)
- 完全池化:所有群体用同一个(忽略差异)
- 部分池化:数据少的群体「借力」数据多的群体(平衡)
收缩量取决于:
- 数据量(数据越少,收缩越多)
- 群体间方差(方差越小,收缩越多)
题目 2
你的层次模型显示渠道间方差 τ² 很小(接近 0)。这意味着什么?
A. 层次模型无效
B. 渠道之间差异很小,可能不需要分层
C. 数据量太少
D. 先验选择错误
查看答案与解析
答案:B(渠道之间差异很小,可能不需要分层)
τ² 表示群体间的方差:
- τ² 大:群体差异大,需要分层
- τ² 小:群体差异小,可能不需要分层
行动:
- 如果 τ² 接近 0,可以考虑简化模型(完全池化)
- 但即使 τ² 小,层次模型仍然有效(只是收缩量小)
题目 3
你的社交媒体渠道只有 100 次访问,6 次转化(6%)。层次模型估计为 8.5%。以下哪种解释最准确?
A. 层次模型是错的
B. 层次模型用其他渠道的数据「借力」,让估计更准确
C. 社交媒体的真实转化率就是 8.5%
D. 需要更多数据才能信任层次模型
查看答案与解析
答案:B(层次模型用其他渠道的数据「借力」,让估计更准确)
为什么从 6% 调整到 8.5%?
- 社交媒体只有 100 次访问,估计不准确(置信区间 2%-14%)
- 其他渠道的平均转化率约 9%
- 层次模型让社交媒体的估计向总体均值「收缩」
结果:更准确的估计(8.5% 比 6% 更接近真实值)。
行动:不要只看原始数据,要用层次模型「借力」。
本课要点
- 不池化:每个群体独立估计(数据少时不准确)
- 完全池化:所有群体用同一个(忽略差异)
- 部分池化:数据少的群体向总体均值收缩(平衡)
- 收缩效应:数据越少,收缩越多
- 层次模型:同时估计群体参数和总体参数
延伸阅读
- Gelman & Hill, 《Data Analysis Using Regression and Multilevel/Hierarchical Models》 — 层次模型教材
- Kruschke, 《Doing Bayesian Data Analysis》 — 贝叶斯数据分析入门
- McElreath, 《Statistical Rethinking》 — 贝叶斯统计的现代方法
下一步
下一课:时间序列分析:从历史数据预测未来 — 用时间序列模型预测用户行为和业务指标。
工具提示:用 PyMC 实现简单的层次模型——从 Beta-Binomial 层次模型开始,理解部分池化的工作原理。