Skip to content

📘 Day 15 · 建模与量化决策

📖 本章学习目标:掌握回归分析、ANOVA、因素分析、聚类分析、决策树和蒙特卡洛模拟——学完能用这些模型从数据中提取洞察并做出量化决策。


Day 15: 建模与量化决策 — 从数据到决策的完整链条

核心问题: 手上有数据,怎么建立模型?模型建好了,怎么用它做出比直觉更好的商业决策?

前置条件: Day 14 的 p 值、置信区间、概率分布是今天所有内容的基础。如果你还不太确定 p 值到底是什么——先回去看 Day 14 第四节。

今天的目标: 学完之后,你面对任何一个"数据 + 决策"的商业问题,知道该用什么模型、怎么跑、怎么解读结果、怎么向非技术人员解释。

Day 14 vs Day 15 的区别: Day 14 教你"从样本推断总体"(这个差异是真实的还是噪音?);Day 15 教你"用数据建立预测和做选择"(给定多个可能方案,选哪个?)。前者是判断,后者是决策。


第一节:回归分析深入 — 商业中最被滥用的工具,也是最强大的工具

回归分析是投行和咨询面试中最常被问到的量化工具。你不仅要会说"我做过回归",还要能解释 R² 到底什么意思、p 值为什么可能骗你、以及为什么加了更多变量 R² 一定不会降。

1.1 简单线性回归 — 手动计算斜率和截距

回归的本质:找到一条直线 Ŷ = β₀ + β₁X,使得所有数据点到这条直线的垂直距离平方和最小。这就是普通最小二乘法(OLS)

场景: 一家零售品牌过去 5 个季度的广告支出与销售收入:

季度广告支出 X (百万)销售收入 Y (百万)
Q1212
Q2315
Q3520
Q4417
Q5622

第一步:计算均值。

X̄ = (2 + 3 + 5 + 4 + 6) ÷ 5 = 20 ÷ 5 = 4.0

Ȳ = (12 + 15 + 20 + 17 + 22) ÷ 5 = 86 ÷ 5 = 17.2

第二步:构建完整计算表格。

季度XYX - X̄Y - Ȳ(X - X̄)(Y - Ȳ)(X - X̄)²
Q1212-2.0-5.210.44.0
Q2315-1.0-2.22.21.0
Q3520+1.0+2.82.81.0
Q44170.0-0.20.00.0
Q5622+2.0+4.89.64.0
合计20860025.010.0

验证:X - X̄ 的和必须为零(-2 -1 +1 +0 +2 = 0 ✓),Y - Ȳ 的和也应为零(-5.2 -2.2 +2.8 -0.2 +4.8 = 0 ✓)。

第三步:计算斜率 β₁。

β₁ = Σ(X - X̄)(Y - Ȳ) ÷ Σ(X - X̄)² = 25.0 ÷ 10.0 = 2.5

第四步:计算截距 β₀。

β₀ = Ȳ - β₁ × X̄ = 17.2 - 2.5 × 4.0 = 17.2 - 10.0 = 7.2

第五步:写出回归方程。

Ŷ = 7.2 + 2.5X

第六步:解读回归系数。

β₁ = 2.5 的含义:每增加 100 万广告支出,销售收入平均增加 250 万。

β₀ = 7.2 的含义:即使广告支出为零,基础销售收入约为 720 万。(但要注意:X=0 不在我们的数据范围内,β₀ 是外推值,不一定可信。)

这个 β₁ 就是边际效应(marginal effect),也是面试中你要脱口而出的词。

思考: 为什么用"平均"二字?因为回归给出的是条件期望 E(Y|X),不是确定性的 Y。X=5 时,Ŷ=7.2+2.5×5=19.7,但实际 Q3 的 Y=20——差的那 0.3 就是残差(residual),我们马上会用到。

1.2 R² — "模型解释了多少变异"

R² 是回归输出的"明星指标",也是最容易被误解的指标。它的精确定义:Y 的总变异中,有多少比例能被 X 的变异解释。

继续上面的例子。先计算每个 X 对应的预测值 Ŷ:

Q1: Ŷ = 7.2 + 2.5×2 = 12.2 Q2: Ŷ = 7.2 + 2.5×3 = 14.7 Q3: Ŷ = 7.2 + 2.5×5 = 19.7 Q4: Ŷ = 7.2 + 2.5×4 = 17.2 Q5: Ŷ = 7.2 + 2.5×6 = 22.2

第一步:计算总平方和 SS_total(Total Sum of Squares)——Y 自身的总变异。

SS_total = Σ(Y - Ȳ)² = (12-17.2)² + (15-17.2)² + (20-17.2)² + (17-17.2)² + (22-17.2)²

= (-5.2)² + (-2.2)² + (2.8)² + (-0.2)² + (4.8)²

= 27.04 + 4.84 + 7.84 + 0.04 + 23.04 = 62.80

第二步:计算残差平方和 SS_residual ——模型没有解释掉的变异。

SS_residual = Σ(Y - Ŷ)² = (12-12.2)² + (15-14.7)² + (20-19.7)² + (17-17.2)² + (22-22.2)²

= (-0.2)² + (0.3)² + (0.3)² + (-0.2)² + (-0.2)²

= 0.04 + 0.09 + 0.09 + 0.04 + 0.04 = 0.30

第三步:计算回归平方和 SS_regression ——模型解释掉的变异。

SS_regression = SS_total - SS_residual = 62.80 - 0.30 = 62.50

第四步:计算 R²。

R² = SS_regression ÷ SS_total = 62.50 ÷ 62.80 = 0.9952

解读:广告支出解释了销售收入 99.5% 的变异。

重要提醒: 这个 R² 异常高(接近 1.0),因为这是一个仅 5 个数据点的教学示例。在实际商业数据中,R² 通常在 0.3-0.7 之间。R² 高不代表模型好——如果你加了 50 个自变量,R² 几乎肯定会变高(哪怕这些变量纯粹是噪音),但你的模型可能严重过拟合。

面试中常见的 R² 陷阱问题:

问:"我往回归里多加了 5 个变量,R² 从 0.45 变成了 0.48,模型变好了吗?"

答:不一定。R² 永远不会因为增加变量而下降。应该看调整 R²(Adjusted R²),它会对新增变量的个数进行惩罚。公式:

Adjusted R² = 1 - [(1 - R²)(n - 1) ÷ (n - k - 1)]

其中 n=样本量,k=自变量个数。如果新增变量没有带来足够的解释力提升,Adjusted R² 会下降。

1.3 回归系数的显著性检验 — "β₁ = 2.5 是真实的广告效果,还是随机噪音?"

这是我们 Day 14 学过的假设检验在回归中的直接应用。零假设 H₀: β₁ = 0(广告对销售没有影响)。备择假设 H₁: β₁ ≠ 0。

第一步:计算残差的均方 MS_residual。

MS_residual = SS_residual ÷ (n - 2) = 0.30 ÷ 3 = 0.10

为什么分母是 n-2?因为我们估计了 2 个参数(β₀ 和 β₁),损失了 2 个自由度。

第二步:计算 β₁ 的标准误 SE(β₁)。

SE(β₁) = √[MS_residual ÷ Σ(X - X̄)²] = √(0.10 ÷ 10.0) = √0.01 = 0.10

直观理解:SE(β₁) 衡量的是"如果我们重复抽取样本 100 次,每次算出的 β₁ 会波动多少"。X 的变异越大(Σ(X-X̄)² 越大),SE 越小——这意味着你的估计更精确。

第三步:计算 t 统计量。

t = β₁ ÷ SE(β₁) = 2.5 ÷ 0.10 = 25.0

自由度 df = n - 2 = 3

第四步:计算 p 值和置信区间。

查 t 分布表:t₃, ₀.₀₂₅ = 3.182(双侧,α = 0.05 时每侧 2.5%)

25.0 >> 3.182,所以 p << 0.001(极其显著)。

95% 置信区间:β₁ ± t₀.₀₂₅,₃ × SE(β₁) = 2.5 ± 3.182 × 0.10 = 2.5 ± 0.318 = [2.182, 2.818]

解读:我们有 95% 的把握认为,每增加 100 万广告支出,销售收入的实际增加在 218 万到 282 万之间。

因为整个 CI 都在 0 以上(且 p < 0.001),我们拒绝 H₀:广告支出对销售收入有统计显著的正向影响。

Day 14 的连接: 这个 t 检验的逻辑和 Day 14 第四节的双样本 t 检验完全一样——都是"信号 ÷ 噪音"(估计值 ÷ 标准误),只是这里"信号"变成了回归系数而不是均值差。

1.4 残差分析 — "模型在哪些地方犯了错"

回归给了一个单一的 β₁ 和 R²,但这不代表模型在每个数据点上都同样准确。残差分析帮你诊断四个关键问题:

残差 = Y - Ŷ = 实际值 - 预测值

季度X实际 Y预测 Ŷ残差 e
Q121212.2-0.2
Q231514.7+0.3
Q352019.7+0.3
Q441717.2-0.2
Q562222.2-0.2

你应该检查的四件事:

1. 线性性(Linearity): 画残差 vs 预测值图。如果残差呈现 U 形或倒 U 形分布,说明 X 和 Y 的关系不是线性的——你可能需要加 X² 项,或者对 Y 取对数。

2. 同方差性(Homoscedasticity): 残差的散布应该在所有预测值水平上大致相同。如果残差图呈"喇叭形"(预测值越大,残差波动越大),说明存在异方差性(heteroscedasticity)。这会使得 SE(β₁) 的估计不准确,进而导致 p 值不可靠。

3. 独立性(Independence): 对于时间序列数据(如季度销售),残差不应有自相关。如果 Q1 的残差是负的,Q2 也是负的,Q3 也是负的——说明模型系统性地在某个阶段高估了。用 Durbin-Watson 统计量检测。

4. 正态性(Normality): 残差应大致服从正态分布(尤其是小样本时)。画 Q-Q 图:如果点大致落在 45° 线上,残差正态;如果尾巴偏离,说明有异常值或偏态。

为什么这些检查重要: 如果残差有明显的模式,那么你的标准误、p 值、置信区间都可能不准确。面试官问"你建完模型之后做什么",正确答案不是"报告结果",而是"检查残差"。

1.5 多元线性回归 — 当不止一个因素在影响结果

简单回归只控制了一个变量。现实商业中,销售收入受多种因素影响。多元回归的核心价值:在控制其他变量不变的情况下,分离出每个变量的"纯净"效应。

场景扩展: 我们的零售品牌发现,销售收入可能还受"销售人员数量"的影响。在原数据中增加一列:

季度广告支出 X₁ (百万)销售人数 X₂ (人)销售收入 Y (百万)
Q12312
Q23415
Q35520
Q44417
Q56622

多元回归的手动计算需要矩阵代数(β = (X'X)⁻¹X'Y),对于 3 个参数那就涉及 3×3 矩阵求逆——手算过于复杂。我们直接看软件输出式的结果:

多元回归结果:

Ŷ = 6.0 + 1.2 × X₁ + 1.8 × X₂

R² = 0.98,Adjusted R² = 0.96

β₁ 的 p 值 = 0.03(显著),β₂ 的 p 值 = 0.01(显著)

关键解读——这是多元回归最核心的洞见:

  • 在简单回归中,β₁_ad = 2.5(每增加 100 万广告,销售增加 250 万)
  • 在多元回归中,β₁_ad = 1.2(在控制销售人员数量不变的情况下,每增加 100 万广告,销售增加 120 万)

为什么从 2.5 降到了 1.2? 因为在简单回归中,β₁ = 2.5 实际上"偷走"了销售人员的部分贡献。广告支出高的季度,通常销售人员也多(相关性 r ≈ 0.89)——简单回归把本该归功于销售人员的销售增长也算在了广告头上。这种偏误叫做遗漏变量偏误(Omitted Variable Bias)

β₂ = 1.8 的含义:在控制广告支出不变的情况下,每多 1 名销售人员,销售收入增加 180 万。

这就是为什么我们要做多元回归:不是为了把 R² 堆高,而是为了更准确地估计每个变量的因果效应。

1.6 多重共线性 — "解释变量之间纠缠不清"

多元回归的一个核心假设:自变量之间不能高度相关。如果两个解释变量几乎在说同一件事,模型就无法区分它们各自的影响。

衡量工具:VIF(Variance Inflation Factor,方差膨胀因子)

VIFⱼ = 1 ÷ (1 - R²ⱼ)

其中 R²ⱼ 是:把 Xⱼ 作为因变量,对其他所有 X 做回归得到的 R²。

计算示例:

在我们的数据中,广告支出 X₁ 和销售人员 X₂ 的相关系数 r = 0.89。

这意味着 R²₁₂ ≈ 0.89² = 0.79(将 X₁ 对 X₂ 回归的 R²)

VIF_广告 = 1 ÷ (1 - 0.79) = 1 ÷ 0.21 = 4.76

同理,VIF_销售人数 ≈ 4.76

判断标准:

VIF 范围严重程度行动
1完全不相关理想状态(很少见)
1-5中等相关通常可接受
5-10高相关需要关注,SE 被膨胀 2-3 倍
>10严重共线性必须处理

我们的 VIF ≈ 4.76,处于"可接受但偏高"的临界值。

多重共线性的后果(非常重要):

  1. β 的估计值仍然是无偏的(期望值等于真实值)
  2. 但标准误被放大(这就是"方差膨胀"的含义)
  3. 导致 t 值变小,p 值变大——你可能错误地认为某个变量"不显著",事实上它只是标准误被吹大了
  4. β 的估计对数据的微小变化极其敏感——加一个数据点,系数可能大幅跳动

补救措施:

  • 删除一个高度相关的变量(最简单,但丢信息)
  • 将相关变量合并为复合指标(如将"广告"和"销售人数"合并为"市场投入强度")
  • 使用岭回归(Ridge Regression)或 LASSO(在模型中加惩罚项,自动压缩系数)
  • 增加样本量(更多数据 → 更多独立变异 → 更容易区分各变量的贡献)

1.7 逻辑回归 — 当 Y 不是数字而是"是/否"

至此我们一直在处理连续的 Y(销售收入可以是 12.5,可以是 20.3)。但商业中大量问题只有两个答案:客户流失了吗?(是/否),贷款违约了吗?(是/否),并购成功了吗?(是/否)。

为什么不能直接用线性回归?

假设 Y=1 表示违约,Y=0 表示不违约。用线性回归 Ŷ = β₀ + β₁X,当 X 很大或很小时,Ŷ 可能小于 0 或大于 1——概率不能在这个范围之外。

解决方案:逻辑函数(Logistic Function)

P(Y = 1) = 1 ÷ (1 + e^-(β₀ + β₁X))

这个函数的值域为 (0, 1),完美对应概率的范围。形状是 S 形曲线。

关键概念:胜率(Odds)和胜率比(Odds Ratio)

胜率 = P ÷ (1 - P)。如果违约概率是 0.2,胜率 = 0.2 ÷ 0.8 = 0.25("违约的胜率是 1:4")。

在逻辑回归中,e^β₁ = 胜率比 = "X 每增加 1 单位,胜率乘以多少"。

完整工作示例:用信用评分预测贷款违约

场景:银行有 200 个历史贷款申请人的数据。用信用评分(范围 300-850)预测是否违约(Yes=1, No=0)。

逻辑回归输出:

log(P/(1-P)) = 5.2 - 0.008 × credit_score

即 β₀ = 5.2,β₁ = -0.008

解读 β₁:

e^β₁ = e^(-0.008) = 0.9920

信用评分每提高 1 分,违约胜率乘以 0.992——也就是说,违约胜率下降约 0.8%。

如果信用评分提高 50 分: 胜率比 = (e^(-0.008))^50 = e^(-0.008 × 50) = e^(-0.40) = 0.6703

评分提高 50 分,违约胜率降低约 33%。

具体预测示例:

一个信用评分为 650 的申请人:

log(P/(1-P)) = 5.2 - 0.008 × 650 = 5.2 - 5.2 = 0

P/(1-P) = e⁰ = 1 → P = 0.5(违约概率 50%)

一个信用评分为 700 的申请人:

log(P/(1-P)) = 5.2 - 0.008 × 700 = 5.2 - 5.6 = -0.4

P/(1-P) = e^(-0.4) = 0.6703

P = 0.6703 ÷ (1 + 0.6703) = 0.6703 ÷ 1.6703 = 0.401

违约概率从 50%(650 分)降到 40%(700 分)。

面试要点: 线性回归给的是边际效应(每单位 X 变动带来的 Y 变动量,是常数),逻辑回归给的是胜率比(每单位 X 变动带来的胜率倍数变动,是乘数)。两者不能混用。


第二节:ANOVA — 不止两组,怎么同时比较

Day 14 我们学了 t 检验来比较两组均值。但如果有三组、五组、十组呢?做两两 t 检验?问题在于:每多做一次检验,犯第一类错误的概率就累积——10 组两两比较要做 45 次 t 检验,即使 H₀ 全为真,至少有 1 次"显著"的概率接近 90%。ANOVA(方差分析)一次性检验"所有组均值是否相等",把整体错误率控制在 α。

2.1 单因素 ANOVA — 完整手动计算

场景: 测试三种广告策略的效果。每种策略在 5 个城市试点,记录销售增长百分比:

策略 A(短视频)策略 B(搜索广告)策略 C(KOL 种草)
121520
141722
111619
151823
131421
nⱼ555
x̄ⱼ13.016.021.0
sⱼ²2.52.52.5

第一步:计算总均值(Grand Mean)。

x̄ = (13.0 × 5 + 16.0 × 5 + 21.0 × 5) ÷ 15 = (65 + 80 + 105) ÷ 15 = 250 ÷ 15 = 16.667

第二步:计算组间平方和 SSB(Sum of Squares Between)。

SSB = 5 × (13.0 - 16.667)² + 5 × (16.0 - 16.667)² + 5 × (21.0 - 16.667)²

= 5 × (-3.667)² + 5 × (-0.667)² + 5 × (4.333)²

= 5 × 13.444 + 5 × 0.445 + 5 × 18.778

= 67.22 + 2.22 + 93.89 = 163.33

SSB 衡量的是各组均值与总均值之间的差异。SSB 大 → 各组之间差异大。

第三步:计算组内平方和 SSW(Sum of Squares Within)。

关键公式:对于第 j 组,Σ(X - x̄ⱼ)² = (nⱼ - 1) × sⱼ²

SSW = (5-1) × 2.5 + (5-1) × 2.5 + (5-1) × 2.5 = 10 + 10 + 10 = 30.0

SSW 衡量的是各组内部的随机波动(不受策略影响的纯噪音)。

第四步:计算自由度。

df_between = k - 1 = 3 - 1 = 2

df_within = N - k = 15 - 3 = 12

第五步:计算均方(Mean Square)。

MSB = SSB ÷ df_between = 163.33 ÷ 2 = 81.67

MSW = SSW ÷ df_within = 30.0 ÷ 12 = 2.50

MSW = 2.50 也是各组的共同方差估计(因为我们假设了方差齐性,且三组的 s² 恰好相同)。

第六步:计算 F 统计量。

F = MSB ÷ MSW = 81.67 ÷ 2.50 = 32.67

F 统计量的直观理解:组间变异是组内变异的多少倍。 如果各组均值真的完全相等,F 应该接近 1。F 越大,越不可能"各组均值相等"。

第七步:查 F 分布表并做决策。

查 F(2, 12) 在 α = 0.05 的临界值:3.89

32.67 >> 3.89 → 拒绝 H₀

结论:三种广告策略的销售增长均值不全相等。至少有一种策略的效果显著不同。

Day 14 的连接: t 检验的 t² 等于 F(1, df)。ANOVA 是 t 检验从两组到多组的推广。

2.2 事后检验(Post-Hoc Test)— "哪两组之间显著不同?"

ANOVA 告诉你"至少有一组不同",但没告诉你是哪两组。事后检验在 ANOVA 显著后进行两两比较,同时对多重比较进行校正。

Tukey HSD(Honestly Significant Difference)——最常用的事后检验:

HSD = q(α, k, df_within) × √(MSW ÷ n)

其中 q 是学生化范围分布(Studentized Range)的临界值,需查表。

q(0.05, k=3, df=12) ≈ 3.77

HSD = 3.77 × √(2.50 ÷ 5) = 3.77 × √0.50 = 3.77 × 0.7071 = 2.67

两两比较:

对比均值差绝对值HSD结果
A vs B|13 - 16| = 3.02.673.0 > 2.67 → 显著
A vs C|13 - 21| = 8.02.678.0 > 2.67 → 显著
B vs C|16 - 21| = 5.02.675.0 > 2.67 → 显著

结论:三种策略彼此之间存在显著差异。按照效果排序:C(KOL 种草)> B(搜索广告)> A(短视频)。

如果某两组差值小于 HSD,意味着它们的差异在统计上和随机噪音无法区分——即使它们的样本均值不同,也不能说"一个比另一个好"。

2.3 ANOVA 的假设与诊断

和所有统计方法一样,ANOVA 有三个关键假设:

假设 1:正态性——每组数据应来自正态分布。检验方法:Shapiro-Wilk 检验(每组单独做)。如果 p > 0.05,不能拒绝正态性假设。在我们的例子中,每组 5 个数据点太少,SW 检验的效力很低,建议看 Q-Q 图做视觉判断。

假设 2:方差齐性——各组的总体方差应相等。检验方法:Levene 检验。H₀: 各组方差相等。如果 Levene 检验的 p < 0.05,拒绝 H₀ → 方差不等。

假设 3:独立性——各组数据之间相互独立(一个城市的销售增长不影响另一个城市)。这在实验设计中保障,无法用统计检验。

如果假设被违反怎么办?

违反的假设替代方法
正态性(严重偏态)Kruskal-Wallis 检验(非参数 ANOVA)
方差齐性(方差不相等)Welch ANOVA(不假设等方差)
独立性改用重复测量 ANOVA 或混合效应模型

2.4 双因素 ANOVA — 不止一个分类变量

回到广告策略的例子。如果不同策略的效果还取决于城市规模(一线城市 vs 二线及以下),我们就有两个因素。双因素 ANOVA 可以同时检验:

  • 策略的主效应(不同策略之间有差异吗?)
  • 城市规模的主效应(不同规模城市之间有差异吗?)
  • 交互效应(策略 C 在一线城市是否效果特别好?)

设计:2 × 3 因子设计(2 种城市规模 × 3 种策略 = 6 个条件组合)。每个组合 5 个观测值,共 30 个数据点。

交互效应的直观理解:

如果没有交互:策略 C 在所有城市类型中都优于 A 和 B,且差距大致相同。两条"策略-效果"线平行。

如果有交互:策略 C 在一线城市效果极好(增长 25%),但在二线及以下效果一般(增长 15%),而策略 A 在两种城市中效果相近。两条线交叉。

F 检验分解:

双因素 ANOVA 将总变异分解为四部分:

  • SS_策略(策略主效应)
  • SS_城市(城市规模主效应)
  • SS_交互(策略 × 城市交互效应)
  • SS_误差(组内随机变异)

每个效应都有自己的 F = MS_效应 ÷ MS_误差,都有自己的 p 值。

业务含义: 如果交互效应显著,意味着"哪种策略最好"的答案取决于城市类型——你不能一刀切地推荐策略 C。在面试中展示你理解交互效应,说明你能想到"策略效果是有场景依赖的"。


第三节:主成分分析与因素分析 — 压缩 50 个变量到 3 个因子

投行和 PE 面试中,如果你能讨论 PCA 和因素模型,说明你的量化深度远超平均候选者。定性地说:你有 50 个高度相关的变量,怎么把它们的信息压缩到 3 个不相关的"超级变量"里?

3.1 PCA 主成分分析 — 手动计算(3×3 相关矩阵)

场景: 3 只科技股(苹果、微软、谷歌)过去 5 天的日收益率:

苹果微软谷歌
1+1.0%+0.8%+0.6%
2-0.5%-0.3%-0.4%
3+2.0%+1.8%+1.5%
4-1.0%-0.8%-0.7%
5+0.5%+0.4%+0.3%

第一步:去均值。 计算每只股票的平均收益率并减去。

苹果均值 = (1.0 - 0.5 + 2.0 - 1.0 + 0.5) ÷ 5 = 2.0 ÷ 5 = 0.4%

微软均值 = (0.8 - 0.3 + 1.8 - 0.8 + 0.4) ÷ 5 = 1.9 ÷ 5 = 0.38%

谷歌均值 = (0.6 - 0.4 + 1.5 - 0.7 + 0.3) ÷ 5 = 1.3 ÷ 5 = 0.26%

去均值后的数据(为简洁,略去详细表格——每行减去对应股票的均值)。

第二步:计算 3×3 协方差矩阵,再标准化为相关矩阵。

用去均值后的数据计算两两相关系数:

苹果微软谷歌
苹果1.000.980.95
微软0.981.000.92
谷歌0.950.921.00

三只股票的回报率高度相关——这不奇怪,因为它们都属于科技板块,受共同的宏观和行业因素驱动。

第三步:提取特征值(Eigenvalues)和特征向量。

特征值的计算需要解行列式方程 |R - λI| = 0。对于 3×3 矩阵,这是一个三次方程,我们直接给出结果:

  • λ₁ = 2.86(解释 95.3% 的总方差)
  • λ₂ = 0.12(解释 4.0% 的总方差)
  • λ₃ = 0.02(解释 0.7% 的总方差)

验证:λ₁ + λ₂ + λ₃ = 2.86 + 0.12 + 0.02 = 3.00 = 变量总数 ✓

第四步:解读载荷(Loadings)——第一主成分 PC1:

PC1 的特征向量(载荷):

  • 苹果:0.58
  • 微软:0.57
  • 谷歌:0.58

三只股票在 PC1 上的载荷几乎完全相同。含义:PC1 捕捉到了一个共同的"科技板块因子"——当科技板块整体上涨时,三只股票同步上涨;当板块下跌时,三只股票同步下跌。 PC1 解释了 95.3% 的总变异,意味着这三只股票几乎完全被同一个因子驱动。

PC2 的载荷:苹果 +0.70, 微软 -0.15, 谷歌 -0.70。这捕捉了苹果和谷歌之间的相对差异(可能在反映硬件 vs 服务的商业模式差异),但只解释了 4% 的变异——不重要。

PC3 解释不足 1%,基本可以忽略。

核心洞见: 你原本有 3 个变量(3 列 × 5 行的数据矩阵),经过 PCA,你发现几乎所有的信息都可以用 1 个主成分(PC1)来概括——维度从 3 降到了 1,信息损失不到 5%。

3.2 PCA vs 因素分析 — 什么时候用哪个

面试中经常被混淆的两个概念,它们的区别决定了你该在什么场景下用哪个。

维度PCA(主成分分析)FA(因素分析)
目标维度压缩:用更少的变量保留尽可能多的方差发现潜变量:假设观测变量由少数不可直接观测的"因素"生成
数学逻辑纯几何变换:旋转坐标轴,让新轴沿方差最大方向统计模型:X = ΛF + ε(观测变量 = 载荷×因子 + 独特误差)
对方差的处理不区分"共同方差"和"独特方差"——所有方差都保留区分共同方差(多个变量共享)和独特方差(单个变量独有)
是否允许测量误差不允许——PC1 是原始变量的精确线性组合允许——每个变量有独特的误差项 εᵢ
适用场景纯数据压缩、去噪、可视化高维数据、构建指数心理学量表开发、客户满意度调查、发现隐藏的市场细分维度

实用经验法则:

  • 如果你只是想压缩数据(如把 20 只股票的回报压缩成 3 个因子用于风险管理)→ PCA。
  • 如果你相信数据背后存在不可直接测量的"构念"(如"品牌忠诚度""服务质量感知")→ FA。
  • 在大样本下,两者的结果通常很接近。样本量 < 100 时,FA 比 PCA 更可靠。

3.3 Fama-French 三因素模型 — PCA 思想在金融中的经典应用

Fama-French 模型是资产定价领域引用量最高的成果之一(2013 年诺贝尔经济学奖)。它不是说"我们跑了 PCA,提取了三个因子"——恰恰相反,因子是预先根据经济理论构建的,不是从数据中提取的。 这一点在面试中说出来,说明你真的理解两者的区别。

三因子:

  1. 市场因子(MKT): Rm - Rf(市场组合回报减去无风险利率)——这与 CAPM 相同
  2. 规模因子(SMB, Small Minus Big): 小盘股组合的平均回报 - 大盘股组合的平均回报
  3. 价值因子(HML, High Minus Low): 高账面市值比(B/M)组合的平均回报 - 低 B/M 组合的平均回报

SMB 的构建方法(以 6 个组合为例):

第一步:按市值将股票分为 Small(市值下 50%)和 Big(市值上 50%)。

第二步:按 B/M 将股票分为 High(前 30%)、Medium(中间 40%)、Low(后 30%)。

第三步:形成 2×3 = 6 个交叉组合:

Low B/M(成长股)Medium B/MHigh B/M(价值股)
Small(小盘)S/LS/MS/H
Big(大盘)B/LB/MB/H

第四步:SMB = (S/L + S/M + S/H) ÷ 3 - (B/L + B/M + B/H) ÷ 3

HML = (S/H + B/H) ÷ 2 - (S/L + B/L) ÷ 2

一个小型数值示例(单期数据):

组合该期平均回报说明
S/L+0.8%小盘 + 成长
S/M+1.2%小盘 + 中性
S/H+1.5%小盘 + 价值
B/L+0.5%大盘 + 成长
B/M+0.9%大盘 + 中性
B/H+1.1%大盘 + 价值

SMB = (0.8 + 1.2 + 1.5) ÷ 3 - (0.5 + 0.9 + 1.1) ÷ 3 = 1.167 - 0.833 = +0.334%

解读:本期小盘股平均比大盘股多涨了 0.334%。如果 SMB 长期为正,意味着小盘股有规模溢价。

HML = (1.5 + 1.1) ÷ 2 - (0.8 + 0.5) ÷ 2 = 1.30 - 0.65 = +0.65%

解读:本期价值股平均比成长股多涨了 0.65%。如果 HML 长期为正,意味着价值股有"价值溢价"。

回归方程(你可以用它来分析任何一只股票):

Rᵢ - Rf = αᵢ + βᵢ × MKT + sᵢ × SMB + hᵢ × HML + εᵢ

  • βᵢ:对市场因子的敏感度(如果 βᵢ > 1,这只股票比市场波动更大)
  • sᵢ:对规模因子的暴露(sᵢ > 0 → 表现得像小盘股)
  • hᵢ:对价值因子的暴露(hᵢ > 0 → 表现得像价值股)
  • αᵢ:截距项——如果 αᵢ 显著 > 0,说明模型无法解释的超额收益(Jensen's alpha,即基金经理追求的"α")

3.4 因素分析在商业中的应用 — 消费者调研实例

场景: 某护肤品品牌让 200 名消费者对 15 个产品属性打分(1-7 分)。15 个属性包括:"包装美观""成分天然""吸收快""香味好闻""品牌知名度高""朋友推荐购买"等等。

如果逐项分析,15 个维度太散,无法形成清晰的战略建议。

因素分析过程:

第一步:提取因子。 对 15 个变量的相关矩阵做因素分析。使用 Kaiser 准则(特征值 > 1 的因子才保留),发现 3 个因子的特征值大于 1。

因子特征值解释方差%累计%
F15.436.0%36.0%
F23.221.3%57.3%
F31.812.0%69.3%
F40.96.0%75.3%

F4 及之后的特征值 < 1 → 保留 3 个因子。这 3 个因子共解释了 69.3% 的总方差。

第二步:旋转(Varimax Rotation)。 旋转前,很多变量在多个因子上都有中等载荷(如"包装美观"在 F1=0.40, F2=0.35, F3=0.38——看不出它到底属于哪个因子)。旋转后,每个变量的载荷朝向一个主要因子"收敛"。

第三步:命名因子。 旋转后的载荷矩阵:

变量F1(产品体验)F2(品牌信任)F3(社交驱动)
吸收快0.850.120.08
香味好闻0.780.050.20
包装美观0.720.250.18
成分天然0.450.680.10
品牌知名度0.150.820.12
老品牌信赖0.080.790.05
朋友推荐0.220.150.88
网红推荐0.100.080.91

变量在某个因子上的载荷 > 0.6 即为"高载荷"。我们发现:

  • F1 = "产品体验因子"(使用感受相关的变量都高载荷)
  • F2 = "品牌信任因子"(成分、品牌认知相关的变量都高载荷)
  • F3 = "社交驱动因子"(口碑传播相关的变量都高载荷)

共同度(Communality): "成分天然"的共同度 = 0.45² + 0.68² + 0.10² = 0.2025 + 0.4624 + 0.01 = 0.675。这意味着 3 个因子共同解释了"成分天然"67.5% 的方差——剩下的 32.5% 是该变量独有的信息(独特方差)。

商业行动建议: "原来我们的消费者价值主张是三维的——不是只有一个'满意度'。产品团队优化 F1,品牌部强化 F2,营销部围绕 F3 设计社交传播——各司其职。"


第四节:聚类分析 — "物以类聚"的数学实现

分类是你天天在做的事(这个客户有价值,那个没有),但直觉分类有两大问题:不一致(不同分析师分类不同),不系统(遗漏隐藏的群体模式)。聚类分析把分类变成算法。

4.1 K-means 聚类 — 手动迭代一次

场景: 一家电商平台有 6 个客户,用两个维度刻画他们的行为:

客户R(距上次购买天数)F(年购买次数)
A530
B1025
C803
D905
E728
F952

设定 K=2(我们希望分成两组),初始质心(centroid)选取 A 和 C:

C1 = (5, 30),C2 = (80, 3)

第一次迭代:分配每个点到最近的质心。

距离使用欧氏距离:d = √[(R₁-R₂)² + (F₁-F₂)²]

A(5, 30):

  • d(C1) = √[(5-5)² + (30-30)²] = 0
  • d(C2) = √[(5-80)² + (30-3)²] = √(5625 + 729) = √6354 ≈ 79.7
  • 分配 → C1

B(10, 25):

  • d(C1) = √[(10-5)² + (25-30)²] = √(25 + 25) = √50 ≈ 7.1
  • d(C2) = √[(10-80)² + (25-3)²] = √(4900 + 484) = √5384 ≈ 73.4
  • 分配 → C1

C(80, 3):

  • d(C1) ≈ 79.7, d(C2) = 0
  • 分配 → C2

D(90, 5):

  • d(C1) = √[(90-5)² + (5-30)²] = √(7225 + 625) = √7850 ≈ 88.6
  • d(C2) = √[(90-80)² + (5-3)²] = √(100 + 4) = √104 ≈ 10.2
  • 分配 → C2

E(7, 28):

  • d(C1) = √[(7-5)² + (28-30)²] = √(4 + 4) = √8 ≈ 2.8
  • d(C2) = √[(7-80)² + (28-3)²] = √(5329 + 625) = √5954 ≈ 77.2
  • 分配 → C1

F(95, 2):

  • d(C1) = √[(95-5)² + (2-30)²] = √(8100 + 784) = √8884 ≈ 94.3
  • d(C2) = √[(95-80)² + (2-3)²] = √(225 + 1) = √226 ≈ 15.0
  • 分配 → C2

第一次迭代结果:

簇 1 = {A, B, E}:R̄ = (5+10+7)÷3 = 7.33,F̄ = (30+25+28)÷3 = 27.67

簇 2 = {C, D, F}:R̄ = (80+90+95)÷3 = 88.33,F̄ = (3+5+2)÷3 = 3.33

业务解读:

簇 1 = "高频忠诚客户":最近刚买过(R 很小),一年买 25-30 次(F 很高)。这是核心用户,应推送会员权益和交叉销售。

簇 2 = "流失客户":快 3 个月没买了(R 很大),一年买 2-5 次(F 很低)。这群人可能已经转投竞品,需要"挽回优惠券"或直接联系。

在没有聚类之前,你可能对所有客户群发同一条促销短信。现在你知道:对簇 1 说的话和对簇 2 说的话应该完全不同。

第二次迭代会用新质心 C1=(7.33, 27.67) 和 C2=(88.33, 3.33) 重新分配,直到质心不再(或几乎不再)移动。在这个简单例子中,第二次迭代就已经收敛。

4.2 选择 K — 肘部法和轮廓系数

K-means 要求你预先指定 K(聚成几类)。怎么选?

方法一:肘部法(Elbow Method)

计算每个 K 对应的 WCSS(Within-Cluster Sum of Squares,簇内平方和)——所有点到其所属质心的距离平方之和。

WCSS 随着 K 增大必然下降(K 越大,簇越"紧"),但边际收益递减。

KWCSSWCSS 的下降
112500
252007300(大幅下降)
338001400
43200600
52900300

画 WCSS 对 K 的折线图,在 K=2 处有一个明显的"肘部"——之后增加 K 带来的边际改善急剧减小。K=2 是最优选择。

方法二:轮廓系数(Silhouette Score)

对每个点 i:

  • a(i) = 点 i 到同簇其他点的平均距离(越小越好,说明簇内紧密)
  • b(i) = 点 i 到最近的其他簇的平均距离(越大越好,说明簇间分离好)
  • s(i) = (b - a) ÷ max(a, b)(范围 [-1, 1])

所有点的 s(i) 平均值就是整体轮廓系数。越接近 1 越好。

通常做法:对 K=2,3,4...10 都算轮廓系数,选最高值对应的 K。

面试中: "你最后选了 K=3,为什么不是 K=4?" —— 拿出肘部图或轮廓系数图,这是数据驱动的答案,不是"感觉"。

4.3 层次聚类 — 树状图的解读

K-means 需要你预设 K。如果连 K 的可能范围都不知道,可以先做层次聚类,画出树状图(Dendrogram),然后决定在哪里"切一刀"。

基本原理(自底向上,凝聚式):

  1. 每个点自成一簇(N 个簇)
  2. 找到距离最近的两个簇,合并为一个
  3. 重复步骤 2,直到所有点合并为一个大簇
  4. 整个过程可以画成一棵树

簇间距离的定义:

连接方法定义特点
单一连接(Single Linkage)两个簇中最近的两个点的距离容易产生"链状"长条簇
完全连接(Complete Linkage)两个簇中最远的两个点的距离倾向于产生紧凑的球形簇
平均连接(Average Linkage)两个簇中所有点对的距离平均值折中方案,最常用

树状图解读:

假设我们有 A, B, C, D 四个点。树状图显示:

  • 第一步:A 和 B 在高度 2.1 处合并(它们非常像)
  • 第二步:C 和 D 在高度 2.5 处合并
  • 第三步:(A,B) 和 (C,D) 在高度 8.7 处合并

竖着画一条"切割线"在高度 4.0 处 → 得到 2 个簇:{A,B} 和 {C,D}。 切割线在高度 1.5 处 → 得到 4 个簇:{A},{B},{C},{D}(每个独自一个簇)。

"切割线"的高度就是控制聚类粒度的旋钮。

K-means vs 层次聚类 的选用原则:

  • 数据量大(N > 10,000)且你知道 K → K-means(计算快)
  • 数据量小或你想看到嵌套的群体结构 → 层次聚类
  • 实际工作中,两者经常搭配使用:先用层次聚类确定 K 的范围,再用 K-means 跑最终结果

4.4 聚类的局限 — 以及怎么避免踩坑

局限 1:标准化是必须的,不是可选的。

在我们的客户例子中,R 的取值范围是 1-365(天),F 的取值范围是 1-50(次)。如果不做标准化,欧氏距离几乎完全被 R 主导:

d = √[(R₁-R₂)² + (F₁-F₂)²] ≈ √[(几百)² + (几)²] ≈ |R₁-R₂|

F 的差异(比如 30 次和 20 次之间的差距)在距离计算中几乎被淹没。

解决:Z-score 标准化 → 每个变量减去其均值,除以标准差。变换后所有变量的均值为 0,标准差为 1,距离度量中的权重自然平衡。

局限 2:K-means 对初始质心敏感。

不同的初始质心可能导致不同的聚类结果。解决:用 K-means++ 初始化(选择彼此尽量远离的点作为初始质心),或者跑多次选 WCSS 最低的结果。

局限 3:聚类总会给你结果——即使数据中根本没有自然的群组结构。

把完全均匀分布的随机点丢进 K-means,K-means 仍然会分成 K 个簇。你必须用轮廓系数或领域知识判断"这些簇是否有意义"。

局限 4:K-means 只适合球形簇。

如果数据是环形的、月牙形的,K-means 完全无能为力——它会硬切成两半。这种场景需要用 DBSCAN(基于密度的聚类)。


第五节:决策树 — 把"如果...就..."可视化

决策树是最直观的机器学习模型——你不需要懂数学就能理解它的逻辑。但面试中问的不只是"什么是决策树",而是信息增益怎么算、为什么选这个特征先分叉。

5.1 信息熵 — "不确定性"的度量

场景: 银行有 10 个历史贷款申请人,已知是否违约,以及两个特征:信用评分高低、是否有抵押物。我们想建立一个决策树来预测新申请人的违约风险。

熵的公式(信息论的基石):

H = -Σ pᵢ × log₂(pᵢ)

其中 pᵢ 是第 i 个类别的比例。熵的范围:[0, 1](对于二分类)。H=0 表示完全确定(全是同一类),H=1 表示完全不确定(各类正好 50:50)。

计算目标变量的熵:

10 个申请人中,4 人违约,6 人还款。

p(违约) = 4 ÷ 10 = 0.4 p(还款) = 6 ÷ 10 = 0.6

H(目标) = -0.4 × log₂(0.4) - 0.6 × log₂(0.6)

log₂(0.4) = ln(0.4) ÷ ln(2) = -0.9163 ÷ 0.6931 = -1.3219 log₂(0.6) = ln(0.6) ÷ ln(2) = -0.5108 ÷ 0.6931 = -0.7370

H(目标) = -0.4 × (-1.3219) - 0.6 × (-0.7370) = 0.5288 + 0.4422 = 0.9710

接近 1.0——数据"非常不确定"。什么都不做,你猜错的概率很高。

5.2 信息增益 — "知道这个特征后,不确定性减少了多少"

给定以下数据布局:

申请人信用评分有抵押物违约?
1
2
3
4
5
6
7
8
9
10

先看按"信用评分"分叉:

高信用组(6 人): 1 人违约,5 人还款

H(高信用) = -(1/6) × log₂(1/6) - (5/6) × log₂(5/6)

= -(0.1667) × (-2.5850) - (0.8333) × (-0.2630)

= 0.4308 + 0.2192 = 0.6500

低信用组(4 人): 3 人违约,1 人还款

H(低信用) = -(3/4) × log₂(3/4) - (1/4) × log₂(1/4)

= -(0.75) × (-0.4150) - (0.25) × (-2.0000)

= 0.3113 + 0.5000 = 0.8113

按信用评分分叉后的加权平均熵:

H(信用) = (6/10) × 0.6500 + (4/10) × 0.8113 = 0.3900 + 0.3245 = 0.7145

信用评分的信息增益:

IG(信用评分) = H(目标) - H(信用) = 0.9710 - 0.7145 = 0.2565

再看按"是否有抵押物"分叉:

有抵押物组(5 人): 0 人违约,5 人还款

H(有抵押物) = 0 ———— 完美纯净!(全是 "否")

无抵押物组(5 人): 4 人违约,1 人还款

H(无抵押物) = -(4/5) × log₂(4/5) - (1/5) × log₂(1/5)

= -(0.8) × (-0.3219) - (0.2) × (-2.3219) = 0.2575 + 0.4644 = 0.7219

按是否有抵押物分叉后的加权平均熵:

H(抵押物) = (5/10) × 0 + (5/10) × 0.7219 = 0.3610

是否有抵押物的信息增益:

IG(抵押物) = 0.9710 - 0.3610 = 0.6100

决策:IG(抵押物) = 0.610 > IG(信用评分) = 0.257 → 先按"是否有抵押物"分叉!

完整的决策树:

                   [根节点: 10人, 4违约]
                    / 是否有抵押物?  \
                   /                    \
          [有抵押物: 5人]        [无抵押物: 5人, 4违约]
          0违约 → 结论: 还款          /  信用评分?  \
                                    /                \
                           [高信用: 1人]      [低信用: 4人, 3违约]
                           0违约 → 还款      → 结论: 违约(75%)

规则提取:

规则 1:IF 有抵押物 → 预测还款(准确率 100%) 规则 2:IF 无抵押物 AND 信用评分高 → 预测还款(准确率 100%——目前数据) 规则 3:IF 无抵押物 AND 信用评分低 → 预测违约(准确率 75%)

这些规则可以直接交给信贷审批员:"先看有没有抵押物,没有的话再看信用评分。" 这就是决策树胜过逻辑回归的地方——你可以向非技术人员解释"为什么"这个申请人被拒绝。

5.3 剪枝 — 不要让树"记住"噪音

如果决策树一直长下去,直到每个"叶子"只包含一个数据点,那么训练准确率 = 100%,但测试准确率可能只有 60%。这就是过拟合——树把训练数据中的随机噪音也"记住"了。

预剪枝(Pre-Pruning): 在生长过程中就限制树的复杂度。

  • 信息增益小于某阈值 → 停止分裂
  • 节点中的样本数小于某最小值(如 < 5)→ 停止分裂
  • 树的最大深度设为 3 或 4

后剪枝(Post-Pruning): 先让树长到最大,再自底向上地评估:如果把这个子树替换成一个叶子节点(用多数类作为预测),验证集的准确率会下降吗?如果不会,就剪掉。

后剪枝通常比预剪枝效果更好,但计算成本更高。实际中,随机森林(Random Forest)和梯度提升树(XGBoost)通过集成多棵树来避免单棵树的过拟合——这些在量化金融和数据竞赛中是标配。


第六节:蒙特卡洛模拟 — 当公式给不了解析解时,用计算机暴力破解

在所有量化工具中,蒙特卡洛模拟可能是面试里最让你"出圈"的——大多数商科候选人只会说"我们用 Excel 算了 DCF",而你能说出"我对每个输入参数定义了概率分布,跑了 10,000 次模拟,给出了估值的分布而非一个点估计"。

6.1 为什么需要模拟

场景: 你给百威亚太(1876.HK)做 DCF 估值。

传统方法:拍一个 WACC = 8.5%,拍一个永续增长率 g = 2.0%,代入公式 → DCF 估值 = 850 亿。

这个"850 亿"给你的是一种虚假的精确感。实际上:

  • WACC 可能在 7.5% 到 9.5% 之间(取决于你如何估计股权成本和债务成本)
  • g 可能在 1.5% 到 2.5% 之间(取决于你对啤酒行业长期前景的判断)
  • 营收增速可能在 2% 到 6% 之间(取决于竞争格局和消费趋势)

你给老板说"估值 850 亿",老板以为你很确定。但如果 WACC 取 9.5% 且 g 取 1.5%,估值可能只有 600 亿。点估计掩盖了不确定性,蒙特卡洛揭示不确定性。

6.2 蒙特卡洛模拟 — 分步走

第一步:为每个不确定的输入定义概率分布。 这需要判断和经验——这就是为什么蒙特卡洛不是"纯数学",它也需要业务理解。

参数分布类型参数理由
WACCTriangularmin=7.0%, mode=8.5%, max=10.0%有一个"最可能"值,但上下限不对称
永续增长率 gUniformmin=1.5%, max=2.5%没有特别的"最可能"值,在区间内均匀分布
未来 5 年营收增速Normalμ=4.0%, σ=2.0%围绕均值对称分布,有一定波动

第二步:从每个分布中随机抽取一个值,代入 DCF 模型,得到一个估值。

假设第一次抽样:

  • WACC = 8.3%(从 Triangular 分布中抽)
  • g = 2.1%(从 Uniform 分布中抽)
  • 营收增速 = 3.8%(从 Normal 分布中抽)

代入 DCF → 估值 = 870 亿(记下来)

第二次抽样:

  • WACC = 9.1%, g = 1.7%, 营收增速 = 5.2% → 估值 = 780 亿

...重复 10,000 次...

第三步:分析输出分布。 你得到了 10,000 个估值,而不是 1 个。

统计量
均值(Mean)860 亿
中位数(Median)855 亿
标准差(Std Dev)95 亿
第 5 百分位720 亿
第 95 百分位1020 亿
P(DCF < 800 亿)18%

第四步:形成投资建议。

当前市值 = 800 亿。在 10,000 次模拟中,DCF 估值低于 800 亿的概率仅为 18%。也就是说,有 82% 的概率百威亚太的内在价值高于当前市值。

你可以对 PM(基金经理)说:"基于我们的假设分布,百威亚太有大约八成的概率被低估。估值的 90% 置信区间是 [720 亿, 1020 亿],下侧风险可控。如果我们可以接受 18% 的亏损概率,这是一个值得建仓的机会。"

相比于"估值 850 亿,低于市价不用看",这段话展示了三个层次的专业性:你量化了不确定性、你给出了概率判断、你让决策者在了解风险后自己做选择。

6.3 与敏感性分析的比较

维度敏感性分析蒙特卡洛模拟
方式每次只变动一个变量,看输出的变化同时变动所有变量
对变量的处理"如果 WACC 变成 7.5%,其他不变"WACC 从分布中随机抽,同时 g 也在随机抽
是否考虑相关性可以(需要显式建模)
输出"哪个变量对估值影响最大"(Tornado 图)"估值可能的分布范围"(直方图 / CDF)
计算复杂度Excel 可做通常需要写代码(Python/R),至少需要插件
适用场景理解关键驱动因素理解整体风险敞口

两者互补: 先用敏感性分析找到"哪些输入值得花时间精确估计"(如果一个变量的变动几乎不影响输出,就不值得为它争论三天),再用蒙特卡洛模拟生成完整的估值分布。

6.4 蒙特卡洛的陷阱 — 以及怎么避免

陷阱 1:垃圾进,垃圾出(GIGO)。

输出的分布质量完全取决于输入的分布假设。如果你对营收增速的分布定义错了(比如假设它是 Normal 但实际上有重尾风险),那么输出的第 5 百分位可能严重低估了下行风险。

应对:做多个情景(乐观/基准/悲观分布),看结论是否稳健。不要只相信一个分布设定。

陷阱 2:忽略变量之间的相关性会严重误导结论。

假设营收增速和毛利率负相关(为了冲量降价 → 营收增速高了但毛利率低了)。如果你的模拟独立抽取这两个变量,你会生成大量"高增速 + 高毛利"的组合——这在现实中几乎不存在。这种错误组合会高估上行空间。

应对:使用 Copula 或相关矩阵来建模变量间的依赖关系。最简单的做法:识别关键的相关性对,在抽样时施加约束。

陷阱 3:尾部概率需要非常多的迭代才能稳定。

如果你想估计"估值低于 500 亿的概率"(这个事件在 10,000 次模拟中可能只出现 50 次),那么 ± 几个事件就会导致概率估计在 0.4% 到 0.6% 之间大幅波动。对于 1-in-1000 事件的估计,你需要至少 50,000 到 100,000 次迭代。

应对:关注你需要的精度。如果只是用于内部讨论,10,000 次够了。如果要提交给投委会做资金分配决策,加一个数量级。


第七节:百威亚太综合应用 — 这些工具怎么连在一起

这一节是 Day 14-15 的总复习。我们以一个完整的买方分析师工作流为例,展示如何把学过的所有工具串成一条逻辑链。

场景设定: 你是一家对冲基金的消费行业分析师,被要求给百威亚太 (1876.HK) 做出投资建议。你不能只说"我觉得它会涨"——你需要一个从数据到结论的完整证据链。

应用 1:收入预测 — 多元回归

因变量(Y): 百威亚太的季度收入同比增速(%)

自变量:

  • X₁:中国 GDP 同比增速(%)
  • X₂:CPI 餐饮分项同比(%)
  • X₃:当月平均气温偏离历史均值(°C)——啤酒是典型的"天气敏感品"
  • X₄:高端及以上产品收入占比(%)——衡量产品高端化进展

用过去 5 年(20 个季度)的数据跑多元回归。

假设回归输出:

变量βSEtp 值VIF
截距 β₀-3.21.8-1.780.095
GDP 增速 X₁0.850.223.860.0012.1
CPI 餐饮 X₂0.420.182.330.0341.8
气温偏离 X₃0.150.062.500.0241.2
高端占比 X₄1.100.303.670.0022.5

R² = 0.72,Adjusted R² = 0.65

解读(面试级别):

  1. 四个变量全部统计显著(p < 0.05)——GDP 增速和高端占比的显著性最强
  2. VIF 都在 3 以下——没有严重的多重共线性问题
  3. β₄ = 1.10 的含义:在控制 GDP、CPI、气温不变的情况下,高端产品占比每提高 1 个百分点,收入增速提高 1.10 个百分点——高端化确实在推动增长
  4. R² = 0.72 意味着这四个变量解释了收入增速 72% 的变异——还算不错,但仍有 28% 未被解释(可能是因为促销活动、竞品动作、一次性事件等)
  5. 预测下一年收入增速:假设 GDP=4.5%, CPI=2.0%, 气温偏离=+0.5°C, 高端占比=38%

Ŷ = -3.2 + 0.85×4.5 + 0.42×2.0 + 0.15×0.5 + 1.10×38

= -3.2 + 3.825 + 0.84 + 0.075 + 41.8 = 43.34%...

等等,这个结果不合理——高端占比的单位需要确认。如果 X₄ 是百分比数值(如 38 代表 38%),β₄ = 1.10 意味着高端占比从 37% 提高到 38%,收入增速变化 1.10 个百分点。这更合理。

修正:Ŷ = -3.2 + 3.825 + 0.84 + 0.075 + 1.10×38 = -3.2 + 3.825 + 0.84 + 0.075 + 41.8... 还是不对。

这说明 X₄ 需要定义为"百分比变化"而非"百分比水平"。假设 X₄ 定义为"高端占比同比变化(百分点)",去年高端占比从 30%→34%(+4 个百分点),那么 β₄ = 1.10 的解释就是:占比提高 1 个百分点,增速提高 1.10 个百分点。

预测:GDP=4.5%, CPI餐饮=2.0%, 气温偏离=+0.5°C, 高端占比变化=+3.0 个百分点

Ŷ = -3.2 + 0.85×4.5 + 0.42×2.0 + 0.15×0.5 + 1.10×3.0

= -3.2 + 3.825 + 0.84 + 0.075 + 3.30 = 4.84%

预测下一年收入增速约为 4.8%。(这个数字看起来合理得多。)

这个例子也揭示了一个重要的建模教训:定义变量时要非常小心单位——β₄ = 1.10 看起来很"大",但如果 X₄ 的定义不同,解释完全不同。面试中展示这种自我质疑会让面试官觉得你真正理解回归,而不只是会跑代码。

应用 2:估值蒙特卡洛

基于应用 1 的回归结果,我们为 DCF 模型的关键输入定义分布:

参数分布参数设定
营收增速(未来 5 年平均)Normalμ = 4.8%, σ = 2.5%
WACCTriangularmin=7.0%, mode=8.5%, max=10.0%
永续增长率 gUniformmin=1.5%, max=2.5%
EBITDA 利润率Normalμ = 32.0%, σ = 3.0%

跑 10,000 次 → 估值分布的均值为 880 亿,90% CI = [700 亿, 1100 亿]。

当前市值 = 820 亿 → P(低估) ≈ 68% → 建议:买入,但下侧风险(估值跌至 700 亿意味着约 15% 的下跌空间)需要仓位控制。

应用 3:竞争格局 — K-means 聚类

收集中国啤酒行业 20+ 家公司的财务数据,对以下维度做标准化后跑 K-means:

维度含义
营收规模log(营收)
毛利率%
高端产品收入占比%
销售费用率%
ROE%
营收增速3 年 CAGR

K-means(K=4 时轮廓系数最高)将公司分为 4 个战略群组:

  • 簇 1(高端领导者):百威亚太、华润雪花(高端线)——高毛利、高高端占比、高 ROE
  • 簇 2(规模大众玩家):青岛啤酒、燕京啤酒——大营收但较低毛利率和高端占比
  • 簇 3(区域性价比品牌):珠江啤酒、重庆啤酒——小规模、低成本、区域聚焦
  • 簇 4(精酿新势力):各种小型精酿品牌——高增速、小规模、极高毛利率

洞见: 百威亚太真正的竞争对手不在"啤酒行业",而在"簇 1"——和华润雪花的高端线才是直接竞争。你在做竞争分析时,应该对比的是簇 1 内的公司,而不是整个行业的平均。

应用 4:假设检验 — "高端化战略是否真的提升了毛利率"

百威亚太从 2019 年开始大力推高端化(引入时代、科罗娜、福佳等高端品牌)。问题是:毛利率真的因此提高了吗?还是原材料成本下降等其他因素在起作用?

简单检验(Day 14 的双样本 t 检验):

H₀: μ_高端化后 - μ_高端化前 = 0(毛利率没有提高) H₁: μ_高端化后 - μ_高端化前 > 0(毛利率提高了)

收集高端化战略实施前后各 8 个季度的毛利率数据:

高端化前(8 个季度):均值 = 50.2%, s = 2.1% 高端化后(8 个季度):均值 = 53.8%, s = 2.4%

合并标准误 SE = √[s²_p × (1/8 + 1/8)] = √[(2.1²+2.4²)/2 × 0.25]... 实际应使用 Welch t 检验(方差不等的版本)。

假设 t = 3.2, df ≈ 13, p = 0.003(单侧)

结论:拒绝 H₀,高端化后毛利率统计显著提高。

但等一下——这里有个混杂变量(confounder): 同期全球大麦价格下降了约 8%,原材料成本的下降本身就会提升毛利率。你观察到的高端化"效果"可能部分是原材料成本的贡献。

更严谨的做法: 做一个多元回归,因变量是季度毛利率,自变量包括:(1) 高端产品占比,(2) 原材料成本指数,(3) 季度虚拟变量(控制季节性)。

如果控制原材料成本后,高端占比的系数仍然显著为正,你才能说"高端化确实提升了毛利率"。

这回到了应用 1 的逻辑——多元回归的最大价值就是控制混杂变量,分离出"纯净"的因果效应。

应用 5:决策树 — "该不该进入下一个省份?"

百威亚太计划进入一个新的省份市场。过去 5 年在 15 个省份的进入结果(成功/失败)可以作为训练数据。

省份人均 GDP (万)啤酒人均消费量 (升)竞品数量分销网络覆盖 (%)结果
江苏15.1382(少)80%(高)成功
四川6.8423(多)60%(中)成功
河南5.9353(多)30%(低)失败
湖南6.5302(少)55%(中)成功
..................

跑决策树,提取出的关键规则:

规则 1: IF 人均 GDP > 8 万 AND 分销网络覆盖 > 50% → 进入(历史成功率 7/8 = 88%) 规则 2: IF 人均 GDP < 6 万 AND 竞品数量 ≥ 3 → 不进入(历史失败率 5/6 = 83%) 规则 3: IF 6 万 < 人均 GDP < 8 万 AND 啤酒人均消费量 > 35 升 → 进入(成功率较高)

对于目标新省份(人均 GDP = 7.2 万,啤酒消费 = 38 升,竞品 = 2,分销网络 = 45%)→ 规则 3 适用 → 建议进入,但分销网络是短板,需配套投入。

应用 6:PCA — 理解百威亚太的风险敞口

收集百威亚太 + 20 家同业公司(啤酒 + 饮料 + 消费)的月度回报率,跑 PCA:

主成分特征值解释方差%累计%载荷最大的行业解读
PC18.542.5%42.5%所有消费股消费板块整体因子
PC24.221.0%63.5%啤酒股正载荷,饮料股负载荷酒精 vs 非酒精因子
PC32.814.0%77.5%高端品牌消费升级因子

百威亚太在各 PC 上的载荷:

  • PC1:+0.42(对消费板块整体敏感)
  • PC2:+0.68(对"酒精"因子非常敏感——啤酒股特征明显)
  • PC3:+0.52(对消费升级因子敏感——高端定位决定其 beta 于升级趋势)

投资含义: 买百威亚太,你实际上在做三个赌注:(1) 消费板块整体走强,(2) 酒精饮料跑赢非酒精饮料,(3) 消费升级趋势持续。如果你只想赌消费升级但不想赌酒精,你需要找到 PC3 载荷高但 PC2 载荷低的替代标的(比如高端乳制品或高端餐饮)。


面试题一览

Q1(回归基础): 某分析师跑了一个回归:销售量 = 100 + 5×价格 + 20×广告支出,R² = 0.65。请你解读这三个数字,并指出至少两个这个回归可能存在的问题。

参考答案框架:

  • β_价格 = 5:价格每提高 1 单位,销售量增加 5 单位——符号方向不对!(正常应该是负的,价格涨销量跌)。可能的解释:遗漏变量偏误(价格高的产品可能质量更好或品牌更强,而质量和品牌才是驱动销量的真正原因),或者多重共线性(价格和广告高度相关)。
  • β_广告 = 20:广告每增加 1 单位,销售量增加 20 单位。需要检验 p 值判断是否显著。
  • R² = 0.65:模型解释了 65% 的销量变异。
  • 可能的问题:(1) 遗漏变量——如促销力度、季节性、竞品价格;(2) 价格的内生性——价格和销量可能互相决定(联立方程偏误);(3) 没有检查残差——如果残差有自相关,标准误会偏小。

Q2(逻辑回归): 信用卡公司用逻辑回归预测客户流失。β_使用频率 = -0.05。求:(1) 使用频率每增加 1 次/月,流失胜率变化多少?(2) 如果某客户当前流失概率为 30%,使用频率增加 10 次/月后的流失概率是多少?

参考答案框架: (1) e^(-0.05) = 0.9512,每增加 1 次使用,胜率乘以 0.951(降低约 4.9%)。 (2) 当前胜率 = 0.3/(1-0.3) = 0.4286。增加 10 次后胜率 = 0.4286 × (0.9512)^10 = 0.4286 × e^(-0.5) = 0.4286 × 0.6065 = 0.260。新概率 P = 0.260/(1+0.260) = 0.206。流失概率从 30% 降到 20.6%。

Q3(ANOVA): 测试四种不同定价策略(每组 6 个城市)。ANOVA 表给出:SSB=480, SSW=600, df_between=3, df_within=20。求 F 统计量,并用 α=0.05 做检验(F(3,20) 临界值 = 3.10)。

参考答案框架: MSB = 480/3 = 160, MSW = 600/20 = 30, F = 160/30 = 5.33 > 3.10 → 拒绝 H₀。四种定价策略的效果不全相等。接下来应该做 Tukey HSD 事后检验确认哪些对之间有显著差异。

Q4(决策树): 数据:20 封邮件,12 封被打开,8 封未被打开。按照"标题是否包含数字"分叉:包含数字的 10 封中 8 封被打开;不包含数字的 10 封中 4 封被打开。求"标题是否包含数字"的信息增益。

参考答案框架: H(目标) = -(12/20)×log₂(12/20) - (8/20)×log₂(8/20) = -(0.6)×(-0.737) - (0.4)×(-1.322) = 0.442 + 0.529 = 0.971 H(有数字) = -(8/10)×log₂(8/10) - (2/10)×log₂(2/10) = -(0.8)×(-0.322) - (0.2)×(-2.322) = 0.258 + 0.464 = 0.722 H(无数字) = -(4/10)×log₂(4/10) - (6/10)×log₂(6/10) = 0.971(刚好和目标熵相同——分叉后没减少不确定性) 加权平均 = 0.5×0.722 + 0.5×0.971 = 0.8465 IG = 0.971 - 0.8465 = 0.1245。信息增益很小——这个特征帮助有限。事实上,不包含数字的那组和原始分布完全一样,等于没有提供新信息。

Q5(蒙特卡洛): 你给一个项目做 NPV 分析。初始投资 = 1000 万。每年现金流服从 Normal(μ=250万, σ=50万),持续 5 年。折现率 10%。(1) 用期望值直接计算 NPV。(2) 解释为什么蒙特卡洛比你刚算出的"点 NPV"更有信息量。

参考答案框架: (1) NPV = -1000 + 250/(1.1) + 250/(1.1)² + 250/(1.1)³ + 250/(1.1)⁴ + 250/(1.1)⁵ = -1000 + 250×3.7908 = -1000 + 947.7 = -52.3 万(负的——按期望值不应投资)。 (2) 但"期望值"掩盖了现金流的波动。如果σ=50万,有相当概率现金流高于250万,NPV可能为正。蒙特卡洛可以给出P(NPV>0)的概率分布,让决策者在"期望NPV为负但有概率为正"之间做权衡。而且现金流可能不是独立同分布的——如果第一年表现好,后续年份可能也好(正自相关),蒙特卡洛可以建模这种依赖关系。

Q6(综合 — PCA + 聚类): 你对一个包含 50 只股票的池子做 PCA + K-means。(1) 为什么在做 K-means 之前先做 PCA?(2) 前两个 PC 分别解释了 40% 和 25% 的方差。K-means 在 PC1-PC2 空间上给出 3 个簇。你如何向 PM 解释"这三个簇代表什么"?

参考答案框架: (1) 原因有三:降维(50 维 → 2 维,避免"维度诅咒"——高维空间所有距离都差不多,K-means 失效);去噪(PC3-50 中的变异很可能是不重要的噪音);可视化(在 PC1-PC2 的 2D 图上直接展示聚类结果)。 (2) 先看每个 PC 上哪些原始变量载荷高,给 PC 命名(如 PC1="规模因子"——大市值股票载荷高,PC2="动量因子"——近期涨幅大的股票载荷高)。然后在 PC1-PC2 散点图上标注三个簇的位置:(高规模+高动量)的"白马成长股"簇,(低规模+高动量)的"小盘热门股"簇,(高规模+低动量)的"大盘价值股"簇。PM 听完就知道这三个簇对应的投资主题。

Q7(综合应用题): 你是一家 VC 的分析师,需要从 200 家初创公司中选出 10 家做尽调。描述你会如何使用 Day 14-15 学过的至少四种工具来完成这个任务。

参考答案框架:

  1. 数据收集和清洗: 收集 200 家公司的财务、团队、市场、产品数据。处理缺失值(Day 14 第一节课)。
  2. 回归分析: 用历史上已投资项目的成败数据跑逻辑回归。因变量=成功/失败,自变量=创始团队经验年限、市场规模、月活用户增速、毛利率等。得到每个变量的胜率比,理解"什么因素最能预测成功"。
  3. PCA 降维: 200 家公司在 30 个指标上 → PCA 压缩到 5-6 个主成分(团队能力因子、市场潜力因子、产品成熟度因子等)。
  4. K-means 聚类: 在 PCA 空间上聚类,找到"高质量"的簇(该簇中历史成功项目比例高)。从该簇中选代表性公司。
  5. 蒙特卡洛模拟: 对每家公司做 scenario-based valuation(乐观/基准/悲观),用蒙特卡洛模拟合并市场风险 → 得到每家公司的期望回报分布 → 选期望回报最高的同时相关性低的(组合思维)。
  6. 最终输出: 推荐 10 家尽调标的,附带每家的逻辑回归成功概率预测、所属聚类和估值分布。这比"我觉得这几家不错"要专业得多。

今日核心公式速记

概念公式一句话
OLS 斜率β₁ = Σ(X-X̄)(Y-Ȳ) ÷ Σ(X-X̄)²协方差 ÷ X 的方差
1 - SS_residual ÷ SS_total被解释的变异比例
SE(β₁)√[MS_residual ÷ Σ(X-X̄)²]X 变异越大,估计越精确
VIF1 ÷ (1 - R²ⱼ)R²ⱼ 是 Xⱼ 对其他 X 回归的 R²
胜率比e^βX 每增 1 单位,胜率乘 e^β
F 统计量MSB ÷ MSW组间变异 ÷ 组内变异
Tukey HSDq × √(MSW ÷ n)最小显著差异
信息熵-Σ pᵢ × log₂(pᵢ)不确定性 = 0(纯)到 1(混乱)
信息增益H(父) - H(加权子)熵的减少量
欧氏距离√Σ(xᵢ - yᵢ)²K-means 的距离度量

Day 14 + Day 15 总览:从数据到决策的完整工具箱

Day 14 和 Day 15 合在一起,给了你一个完整的"量化分析工作流":

数据收集 → 描述性统计(Day 14 第一节)
    → 可视化探索(分布、散点图)
    → 假设检验(Day 14 第四-五节)→ "这几个组的差异是真实的吗?"
    → 回归分析(Day 15 第一节)→ "哪个因素在驱动结果?效应多大?"
    → 降维 + 聚类(Day 15 第三-四节)→ "数据的底层结构是什么?"
    → 决策树(Day 15 第五节)→ "可操作的规则是什么?"
    → 蒙特卡洛模拟(Day 15 第六节)→ "不确定性的全貌是什么?"
    → 决策建议

每一个箭头都是一个"你可以向面试官解释你做了什么"的步骤。每一块你都有手动计算的肌肉记忆(因为我们从 Day 14 到 Day 15 一直在手算),这意味着你在面试中被要求"在黑板上给我演示一下"的时候不会卡住。

最后一条建议: 在面试中,不要一次性把所有这些工具都甩出来。先理解业务问题,再选择 1-2 个最合适的工具深入展开。面试官想要的不是"我会多少种方法",而是"我知道在这个情境下哪种方法最合适,以及为什么"。


Day 15 · 建模与量化决策 · 2026-08-12本手册是 Day 14(概率与统计推断)的延续,建议与 Day 14 手册配合使用。

系统化商业技能训练 · 20天 · 6章 · 免费开放