指标拆解
问题
指标异动时如何拆解定位原因?面试中常问的指标拆解方法有哪些?
答案
三种拆解方法
| 方法 | 思路 | 适用场景 |
|---|---|---|
| 公式拆解 | 将指标拆为乘积/加减 | 复合指标(GMV = 用户 × 转化 × 客单价) |
| 维度拆解 | 按维度(渠道/地区/人群)下钻 | 定位哪个子群变了 |
| 漏斗拆解 | 按用户路径各步骤 | 转化率问题 |
公式拆解
将复合指标分解为可独立分析的因子:
GMV = 访客数 × 转化率 × 客单价
收入 = 付费用户数 × ARPU
= DAU × 付费率 × 人均付费金额
留存率 = 第N日回访用户 / 第0日新增用户
示例:GMV 本周下降 10%
维度拆解
按关键维度逐层下钻,定位异常子群:
| 维度 | 示例 |
|---|---|
| 时间 | 哪天/哪小时开始异常 |
| 渠道 | 自然流量 vs 付费流量 |
| 平台 | iOS vs Android vs Web |
| 地区 | 哪个城市/省份 |
| 用户群 | 新用户 vs 老用户 |
| 产品线 | 哪个品类/功能 |
-- 维度拆解 SQL 示例:按渠道 × 平台定位 GMV 下降
SELECT
channel,
platform,
SUM(CASE WHEN dt = '2024-01-08' THEN gmv END) AS this_week,
SUM(CASE WHEN dt = '2024-01-01' THEN gmv END) AS last_week,
ROUND(
(SUM(CASE WHEN dt = '2024-01-08' THEN gmv END) -
SUM(CASE WHEN dt = '2024-01-01' THEN gmv END)) /
NULLIF(SUM(CASE WHEN dt = '2024-01-01' THEN gmv END), 0) * 100,
1) AS change_pct
FROM daily_metrics
WHERE dt IN ('2024-01-01', '2024-01-08')
GROUP BY channel, platform
ORDER BY change_pct ASC; -- 降幅最大的排前面
漏斗拆解
按用户操作路径拆解,定位流失环节:
如果加购 → 结算的转化率从 53% 降到 40%,重点排查:
- 结算页是否有 Bug
- 是否有促销活动结束
- 配送费/起送条件是否变化
贡献度分析
定位哪个维度值对总体变化贡献最大:
import pandas as pd
# 计算各渠道对 GMV 变化的贡献度
df = pd.DataFrame({
'channel': ['搜索', '推荐', '直播', '广告'],
'last_week': [200, 150, 80, 70],
'this_week': [180, 155, 60, 55]
})
total_change = df['this_week'].sum() - df['last_week'].sum()
df['change'] = df['this_week'] - df['last_week']
df['contribution'] = df['change'] / total_change * 100
print(df[['channel', 'change', 'contribution']])
# 直播贡献 40%,广告贡献 30%,搜索 20%,推荐 -10%
拆解流程
常见面试问题
Q1: DAU 下降了 10%,如何定位原因?
答案(拆解步骤):
- 确认数据:排除埋点异常、计算口径变化
- 公式拆解:DAU = 新增激活 + 老用户回访
- 新增下降?→ 查获客渠道、应用商店排名
- 回访下降?→ 查留存率变化
- 维度拆解:
- 平台:iOS 还是 Android?
- 渠道:自然流量还是付费?
- 地区:全国还是局部?
- 版本:新版本是否有 Bug?
- 时间定位:具体哪天开始下降?当天有什么变更?
- 关联事件:是否发版、运营活动结束、竞品动作?
Q2: 转化率没变但 GMV 下降,可能是什么原因?
答案:GMV = 访客 × 转化率 × 客单价
- 转化率没变 → 排查访客数和客单价
- 访客下降:渠道投放减少、SEO 排名下降、节假日影响
- 客单价下降:促销活动(满减/折扣)、低价品类占比上升、凑单门槛降低
Q3: 如何判断指标波动是正常还是异常?
答案:
- 历史对比:与过去 4 周同期(同一星期几)对比
- 统计方法:超出
均值 ± 2σ视为异常 - 环比/同比:周环比波动 > 10% 需关注
- 季节性:排除节假日、促销周期的正常波动
- 实际业务判断:是否有已知的变更或事件