Quant (Linear Regression)
Linear Regression
1.1 什么是Linear Regression
假设因变量y和自变量x之间是线性关系,用数据找到最优参数(The parameters are estimated by minimizing the sum of squared residuals)
Model: \(y = X\beta + \varepsilon\)
- $y$: 目标变量 target variable
- $X$: 特征矩阵 feature matrix
- 行是样本,列是特征 (rows are samples, columns are features)
- $\beta$: 真实的参数(上帝知道,你不知道)
- $X\beta$: 模型能解释的部分(特征 x 系数)。The part which can be explained by the model
- $\varepsilon$(真实残差): 模型解释不了的部分(装修,运气,风水….不是函数的一部分,是承认模型不完美)。
- 真实的线: $X\beta$ 真实的线性关系(未知的,我们永远不知道)
- 真实的点: $X\beta + \varepsilon$ 不是所有点都在线上,每个观测值都偏离真实线一点(噪声)
- 拟合的线; $X\hat{\beta}$ 我们用数据估计出来的线,是对$X\beta$的近似
- $\hat{\beta}$: OLS估计出来的参数,OLS的目的就是让$\hat{\beta}$尽可能接近真实的$\beta$
- $\hat{y} = X\hat{\beta}$: 预测值(拟合的函数,不包括$\varepsilon$)。
- 矩阵形式中X的第一列全是
1对应$\beta_0$ - $\beta_i$: 特征$i$的系数
- $x_i$: 第 $i$ 个特征(feature $i$)
- 矩阵形式中X的第一列全是
- $y - \hat{y}$(真实的点和拟合的线之间的距离, 计算的残差): $y - \hat{y} = (X\beta +\varepsilon) - X\hat{\beta} = X(\beta - \hat{\beta}) + \varepsilon$
- 残差不属于某个feature, 属于这个样本,因为预测值是所有feature一起算的
- 当$\hat{\beta} = \beta$ (估计完美等于真实值)时,$y - \hat{y} = \varepsilon$(真实的点和拟合的线之间的距离是真实的残差)
- 现实中$\hat{\beta} \neq \beta$,只是近似。所以准确的说法是: 残差$(y - \hat{y})$是$\varepsilon$的估计,不是$\varepsilon$本身(约等于)。
四个假设:
- 线性: $y$和$x$之间是线性关系
- 如果关系非线性: coefficient本身就是错的(模型结构不对)
- 样本独立: 样本之间相互独立,一个不影响另一个
- 如果样本重复 - 自相关autocorrelation
- coefficient不变: 数据形状没有变,最优直线还是同一条
- $R^2$不变: 分子分母同比翻倍,比值不变
- t-statistic变大(波动减小,看起来这个feature更可靠): 真实独立样本少于$n$ -> 计算出的SE偏小 -> t-statistic会偏大 -> 虚假显著
- 统计显著(Statistically Significant): 观察到的结果不太可能是纯粹由随机噪声产生的
- 显著: 信号够强,结果不太可能是噪声碰巧产生的,有足够证据说他有用
- 不显著: 信号不够强,结果完全可能是噪声碰巧产生的,没有足够证据说他有用
- 统计显著(Statistically Significant): 观察到的结果不太可能是纯粹由随机噪声产生的
- 如果样本重复 - 自相关autocorrelation
- 等方差(Homoscedasticity): 所有样本的残差波动差不多,不随任何 X 变化(X不是某个feature,是所有feature)
- OLS用一个统一的$\sigma^2$来代表所有样本(大锅炖)
- 如果残差方差不恒定,即Heteroscedasticity(异方差),大锅炖失真,$SE$算错,t-statistic也不可靠。SE 和 t 是针对每个 feature 的。但它们的计算都依赖那个共用的 σ²。如果 σ² 不准(heteroscedasticity),那每个 feature 的 SE 都不准,因为它们都用了同一个不准的 σ²。
- 例子:便宜的房子残差小,贵的房子残差大
- 正态: 残差服从正态分布
-
如果不是正态分布,那么t-statistic的判断没有依据,因为$ t > 2$就显著这个规则来自正态分布
-
线性保证模型没有建错,独立和等方差保证SE没有算错,正态保证判断标准没有用错
1.2 什么是OLS
Ordinary Least Squares: 普通最小二乘法。通过最小化残差平方和来找到最优参数
- $X’y$: 每个特征和y的原始关系($X’$的每一行是一个特征,和$y$做内积)
- $X’X$: 特征之间的关系(量级 + 重叠,对角线是各自的量级,非对角线是相关程度)
- $(X’X)^{-1}$: 校准量级 + 拆分重叠(逆矩阵 = 矩阵的’除法’)
- $(X’X)^{-1}X’y$: 每个特征对y的独立贡献
$\hat{\beta} = $ 特征和y的原始关系,校准量级和拆分重叠后的结果
Holding everything else constant, a one unit increase in x is associated with a $\beta$-unit change in $y$
公式推导:
-
通过计算求导得 $\hat{\beta} = (X’X)^{-1}X’y$
-
最小化 $L = \sum{(y - X\beta)^2}$, 矩阵写法 = $(y - X\beta)’(y - X\beta)$
-
展开: $L = (y’ - (X\beta)’)(y - X\beta) = (y’ - \beta’X’)(y - X\beta) = y’y - 2\beta’X’y + \beta’X’X\beta$ 其中$y’X\beta$和$\beta’X’y$都是标量,标量转置等于自身,所以合并为$2\beta’X’y$
- 对$\beta$求导然后令其为零: $\frac{\partial L}{\partial \beta} = -2X’y + 2X’X\beta = 0$ 设 $\beta$ 是 $k \times 1$ 的向量,$a$ 是与 $\beta$ 无关的 $k \times 1$ 常向量,$A$ 是与 $\beta$ 无关的 $k \times k$ 对称矩阵,则: \(\frac{\partial (\beta' a)}{\partial \beta} = a\) \(\frac{\partial (\beta' A \beta)}{\partial \beta} = 2A\beta\)
- 解方程, 两边同时左乘$(X’X)^{-1}$
-
-
空间理解: $y$在特征空间上的投影,残差和特征空间垂直 -> 残差和X的每个列向量内积为零: $X’(y - X\hat{\beta}) = 0$
- $X$是特征矩阵(数据)
- $X’$是$X$的转置(计算工具)
- 特征空间 = $X$的列向量能组合出来的所有可能的$\hat{y}$(一个抽象平面)
- $X$出现在公式$X’(y - X\beta) = 0$,不是因为$X’$是特征空间,而是因为算内积需要转置。残差和特征空间垂直 = 残差和X的每一个列向量的内积为0。算内积要把列向量横过来,所有列一起横过来就是$X’$
求导法: $\sum(y - X\beta)^2$从最小化出发,$\beta$是变量,求导解出来的结果才叫$\hat{\beta}$。$\beta$是你在调的旋钮,$\hat{\beta}$是调完后最优的位置。
几何法: $X’(y - X\hat{\beta}) = 0$从投影出发,$\hat{y} = X\hat{\beta}$以进士投影的结果了。”残差和特征空间垂直”这个性质就是最优解满足的条件,不是在求解。
Ordinary:
-
Ordinary Least Squares (OLS): 最基本的,所有样本一视同仁 -
Weighted Least Squares (WLS): 给不同样本不同权重(解决Heteroscedasticity) -
Generalized Least Squares (GLS): 更通用,处理残差相关和异方差
平方:
- 避免正负残差相互抵消
- 平方函数:
- 光滑可求导
- 另导数为零就可解出精确公式
- 绝对值函数:
- 在零点有尖角不可导
- 没有精确公式,只能用迭代算法慢慢逼近
- 平方函数:
1.3 $R^2$ (R-squared)
模型解释了多少比例的数据波动 \(R^2 = 1 - \frac{\sum(y - \hat{y})^2}{\sum(y - \bar{y})^2}\)
- ${\sum(y - \hat{y})^2}$: 残差平方和 = 模型没解释的波动
- ${\sum(y - \bar{y})^2}$: 总平方和 = 数据本身的波动
- $R^2 = 1$: 完美预测
- $R^2 = 0$: 和猜均值一样差
- $R^2 = 0.8$: 模型解释了80%的波动
R-squared measures the proportion of variance in $y$ explained by the model. An $R^2$ of 0.8 means the model explains 80% of the variation in $y$.
1.4 Standard Error (SE, 标准误)
均值的标准差 = 均值估计的波动幅度 \(SE = \frac{\sigma}{\sqrt{n}}\)
- $\sigma$: 标准差: 个体数据的波动
- $SE$: 标准误: 均值估计的波动
- n越大,SE越小,估计越稳定
1.5 t-statistic
coefficient除以SE。衡量这个特征是否真的有用还是碰巧 \(t = \frac{coefficient}{SE}\)
-
$ t > 2$: 特征显著(真的有用) - $|t| < 2$: 不显著(可能碰巧) 本质上是信号除以噪音。信号远大于噪音就是显著
σ²、SE、t 的关系
所有 feature 共用一个$\sigma^2$(残差的方差),但每个 feature 有自己的 SE 和 t-statistic。
第一步:算一个统一的$\sigma^2$(所有 feature 共用)
所有残差放在一起,算一个方差(大锅炖):
\[\hat{\sigma}^2 = \frac{\sum(y - \hat{y})^2}{n - k}\]$n$ = 样本数,$k$ = 参数个数
第二步:每个 feature 有自己的 SE
\[SE(\hat{\beta}_j) = \hat{\sigma} \times \sqrt{[(X'X)^{-1}]_{jj}}\]- $\hat{\sigma}$ 是共用的(第一步算的)
- 但$(X’X)^{-1}$的对角线元素对每个 feature 不同(取决于这个 feature 的数据分布和与其他 feature 的相关程度)
- 所以每个 feature 的 SE 不同
第三步:每个 feature 有自己的 t
\[t_j = \frac{\hat{\beta}_j}{SE(\hat{\beta}_j)}\]例子:
| feature | coefficient | SE | t | 显著? |
|---|---|---|---|---|
| 面积 | 5 | 1.2 | 4.2 | ✅ 显著 |
| 卧室数 | 3 | 2.5 | 1.2 | ❌ 不显著 |
| 房龄 | -2 | 0.8 | -2.5 | ✅ 显著 |
三个 feature 用的是同一个$\hat{\sigma}^2$,但各自有不同的 SE 和 t。
这也是为什么 Heteroscedasticity 是问题:OLS 假设一个统一的$\sigma^2$能代表所有样本。如果不能(便宜房子残差小,贵房子残差大),这个$\sigma^2$就不准 → 所有 feature 的 SE 都不准 → 所有 t-statistic 都不可靠。
1.6 Omitted Variable Bias (OVB, 遗漏变量偏差)
遗漏一个和自变量,因变量都相关的变量,导致coefficient偏高或偏低
1.7 Multicollinearity (多重共线性)
两个特征高度相关,模型分不清各自的贡献。$X’X$里重叠很大,方程组几乎一样,解不稳定。比如$X’X = [[100, 99], [99, 100]]$
- 对角线是每个特征自己和自己的相关程度(自己的量级),非对角线是两个特征的相关程度。
- 左上100: 面积x面积 - 面积自己的相关程度(量级)
- 右下100: 卧室x卧室 - 卧室自己的量级
- 99: 面积x卧室 - 面积和卧室的相关程度
- 99接近100,说明面积和卧室几乎完全相关
- 两个特征完全不相关: $X’X = [[100, 0], [0, 100]]$
影响
- coefficient不稳定(换一批数据就会变很多)
- $SE$会变大 -> $t-statistic$会变小 -> 两个特征都不显著
- coefficient本身不偏(无偏但是不稳定)
多重共线性: feature和feature相关
- X的列与列之间太像
- coefficient不稳定,SE变大
- 两个 feature 说的是几乎一样的信息,模型分不清谁的贡献。换一批数据,coefficient 可能从 (5, 1) 变成 (1, 5)。这种不稳定性就体现在 SE 大。$SE(\hat{\beta}j) = \hat{\sigma} \times \sqrt{[(X’X)^{-1}]{jj}}$
自相关: 样本和样本相关
- X的行与行之间不独立
- SE偏小,t偏大,虚假显著
解决办法:
| 删掉一个 | Ridge (L2正则化) | Lasso (L1正则化) |
删掉一个:
类似的信息,就留一个就行
正则化
Ridge (L2正则化) 把所有的coefficient往零压,但不会压到零:
从矩阵角度: 在$X’X$的对角线上加一个$\lambda$。原来是$X’X\beta = X’y$, Ridge: \((X'X + \lambda I)\beta = X'y\) \(\hat{\beta}_{ridge} = (X'X + \lambda I)^{-1}X'y\) 加入了$\lambda I$后,即使两个特征高度相关,方程也不会几乎一样,解便稳定了。
- 直觉: 多重共线性 = 两条线几乎平行 -> 交点不稳定
- 2个feature -> 两个方程 -> 两条线 -> 交点就是($\beta_1, \beta_2$)
- 加入了$\lambda$后,两条线被拉开了一点距离,交点稳定,就能解了。
- 优点: 保留了所有特征,coefficient更稳定
- 缺点: coefficient有偏(往零压了一点), $\lambda$需要调
- 假设两个特征高度相关,
从导数角度: 最小化$\sum(y - X\beta)^2 + \lambda\sum\beta^2$
Ridge的惩罚是$\lambda\beta^2$, 对$\beta$求导是$2\lambda\beta$,当$\beta = 0.01$(很小),导数$2\lambda * 0.01 = $很小的力 ,越接近零,拉力越弱,所以永远到不了零,只能无限接近。
对 Ridge 的目标函数求导令其为零:
$\frac{dL}{d\beta} = -2X’y + 2X’X\beta + 2\lambda\beta = 0$
$(-2X’y) + (2X’X + 2\lambda I)\beta = 0$
$(X’X + \lambda I)\beta = X’y$
$\hat{\beta}_{ridge} = (X’X + \lambda I)^{-1}X’y$
对比 OLS: $\hat{\beta} = (X’X)^{-1}X’y$
Lasso(L1正则化) 会把一些coefficient直接压到零 = 自动选择特征:
Lasso 的目标: 最小化 $\sum(y - X\beta)^2 + \lambda\sum|\beta|$
从导数角度: Lasso的惩罚是$\lambda | \beta | $,对$\beta$求导$=\lambda$(常数,和$\beta$无关)。当$\beta = 0.01$(很小),导数 $= \lambda = $ 和$\beta = 100$时一样大。不管$\beta$多小,拉力都一样大,所以当特征对预测的贡献小于$\lambda$时,直接被拉到零 |
比如面积和卧室数高度相关,Lasso可能会吧卧室数的coefficient压倒零,只留面积。相当于自动帮你做了方法1(删除特征),但是不需要手动决定删除哪一个
- 优点: 自动选择特征,结果可解释(feature越少,模型越容易解释)
- 缺点: 如果两个特征都有用,可能随机删除一个
Ridge有两个种解释方式(矩阵 + 导数)
- 有公式解: $\hat{\beta}_{ridge} = (X’X + \lambda I)^{-1}X’y$,直接算
Lasso只有一种(导数)
- 没有公式解,迭代算法慢慢逼近
1.8 测量误差 (Measurement Error)
当出现Measurement Error时,即自变量$x$带噪声时,会导致coefficient往零偏(attenuation bias(衰减偏差))
- 噪声稀释了$x$和$y$之间的关系,让关系看起来更弱
1.9 相关系数范围
\(\text{corr}(X, Z) = ab \pm \sqrt{(1 - a^2)(1 - b^2)}\) 其中$a = \text{corr}(X, Y), b = \text{corr}(Y, Z)$
为什么有范围限制?
如果$X$和$Y$高度正相关,$Y$和$Z$也高度正相关,那么$X$和$Z$不可能负相关
- 身高和体重正相关(a = 0.8)
- 体重和腰围正相关(b = 0.9)
- 身高和腰围不可能是-0.9(身高越高腰围越小是不合理的) 怎么来的?
相关系数矩阵必须是半正定的(PSD),行列式 >= 0:
\(\begin{array}{c|ccc} & X & Y & Z \\ \hline X & 1 & a & c \\ Y & a & 1 & b \\ Z & c & b & 1 \end{array}\)
- $a = \text{corr}(X, Y)$
- $b = \text{corr}(Y, Z)$
- $c = \text{corr}(X, Z)$ ← 要求的
- 相关系数矩阵(correlation matrix: 每个位置是两个变量的相关系数)的三个特点:
- 对角线都是1: 自己和自己相关系数为1 (完全相关)
- 关于对角线对称: corr(X, Y) = corr(Y, X)
- 已知三个相关系数中的两个,求第三个的范围,不管哪两个已知,结构都一样。因为相关系数矩阵是对称的,三个未知数(a, b, c)的地位完全平等。
- 和Covariance matrix的区别:
- Covariance matrix:
- 对角线: 各自的方差
- 非对角线: 协方差
- Correlation matrix:
- 对角线: 全是1
- 非对角线: 相关系数(标准化后的协方差)
- correlation = covariance除以两个标准差,消除了量级的影响,所以对角线变成了1,飞对角线变成了-1到1之间的数
- Covariance matrix:
展开行列式:
$1 - a^2 - b^2 - c^2 + 2abc \geq 0$
把这个关于 c 的不等式解出来(就是一元二次不等式),得到:
$ab - \sqrt{(1-a^2)(1-b^2)} \leq c \leq ab + \sqrt{(1-a^2)(1-b^2)}$
几个特殊情况:
| $a$ | $b$ | 范围 | 直觉 |
|---|---|---|---|
| $1$ | $1$ | $[1, 1]$ | $X = Y = Z$,只能完全正相关 |
| $0$ | $0$ | $[-1, 1]$ | $X$ 和 $Y$ 无关,$Y$ 和 $Z$ 无关,$X$ 和 $Z$ 什么都可能 |
| $0.8$ | $0.6$ | $[0, 0.96]$ | 两个都正相关,第三个不可能是负的 |
| $0.8$ | $-0.6$ | $[-0.96, 0]$ | 一正一负,第三个不可能是正的 |
1.10 Sharpe Ratio
\(Sharpe = \frac{平均收益}{标准差}\) 每承担一单位风险(波动 = 不确定 = 可能亏多少 = 风险),能换来多少收益
年化: $\text{daily sharpe} * \sqrt{252}$
正自相关(Positive Autocorrelation): 直接用年度数据算Sharpe, 不用日数据来算。因为年化直接乘$\sqrt{252}$会高估Sharpe,因为风险(波动)被低估,Sharpe会被高估。
- 正自相关 -> 涨跌连续 -> 真实的标准差更大
1.11 协方差矩阵 (Covariance Matrix)
什么是协方差
协方差衡量两个变量一起变动的程度:
\[cov(X, Y) = \frac{\sum_{i=1}^{n}(x_i - \bar{x})(y_i - \bar{y})}{n - 1}\]- $cov(X, Y) > 0$:面积大时卧室也多(同涨同跌)
- $cov(X, Y) < 0$:面积大时卧室少(反着动)
- $cov(X, Y) = 0$:没有关系
注:除以 $n$ 是总体方差,除以 $n-1$ 是样本方差(因为均值本身是估计的,”用掉”了一个自由度)。面试中不纠结 $n$ 还是 $n-1$。
协方差和相关系数的关系
\[corr(X, Y) = \frac{cov(X, Y)}{\sigma_X \times \sigma_Y}\]协方差受量级影响(面积用㎡和用ft²算出来的协方差不同),除以两个标准差后变成相关系数,消除量级,范围永远在 $[-1, 1]$。
什么是协方差矩阵
所有特征两两之间的协方差,放在一个表格里:
| 面积 | 卧室 | |
|---|---|---|
| 面积 | 面积的方差 | 面积和卧室的协方差 |
| 卧室 | 卧室和面积的协方差 | 卧室的方差 |
数字就是 $C = [[4, 2], [2, 9]]$
- 对角线 4:面积的方差(面积自己波动多大)
- 对角线 9:卧室的方差(卧室自己波动多大)
- 非对角线 2:面积和卧室的协方差(它们一起变动的程度)
协方差矩阵和 $X’X$ 的关系
\[C = \frac{X'X}{n}\]前提:$X$ 是去均值后的数据。 如果没去均值,这个关系不成立。
用例子理解为什么:
面积原始数据 = [50, 30, 40],均值 = 40 去均值后 = [10, -10, 0]
$X’X$ 算的是去均值后的平方和:$10^2 + (-10)^2 + 0^2 = 200$
$cov = X’X / n = 200 / 3 \approx 66.7$
一句话:$X’X$ 是”原始的加总”,$C$ 是”平均后的”。差一个 $n$。
注意:$X’X$ 和 $XX’$ 不一样:
| $X’X$ | $XX’$ | |
|---|---|---|
| 大小 | 特征数 × 特征数 | 样本数 × 样本数 |
| 含义 | 特征之间的关系 | 样本之间的关系 |
| 用在哪 | OLS 公式、协方差矩阵 | 不常用 |
半正定 (PSD):任何方向上的方差都不能是负数
有两个特征(面积,卧室),协方差矩阵是 $C = [[4, 2], [2, 9]]$。
$v$ 是方向向量,$v’Cv$ 是沿这个方向看到的方差:
- $v = [1, 0]$(只看面积方向):$v’Cv = 4 \geq 0$ ✅
- $v = [0, 1]$(只看卧室方向):$v’Cv = 9 \geq 0$ ✅
- $v = [1, 1]$(同时看面积和卧室):$v’Cv = 4 + 2 + 2 + 9 = 17 \geq 0$ ✅
- 注:非对角线的协方差可以为负(即两个特征负相关),但整体方向上的方差 $v’Cv$ 一定 $\geq 0$
半正定 = 对任意方向 $v$,$v’Cv \geq 0$ = 这个矩阵作为协方差矩阵是合法的
为什么协方差矩阵一定是 PSD:
\[C = X'X/n, \quad v'Cv = v'X'Xv/n = \|Xv\|^2/n \geq 0\]向量和自己的内积($|Xv|^2$)一定非负,所以 $v’Cv \geq 0$。
Eigenvalue 和 Eigenvector
\[Av = \lambda v\]一个矩阵 $A$ 乘以向量 $v$,如果结果只是 $v$ 伸缩了(方向没有变):
- $v$:特征向量 eigenvector(被 $A$ 乘完方向不变)
- $\lambda$:特征值 eigenvalue(伸缩倍数)
判断半正定:所有 eigenvalue $\geq 0$ 就是半正定
eigenvalue 的计算例子:
\(C = [[5, 1], [1, 3]]\) \(Cv = \lambda v \Rightarrow (C - \lambda I)v = 0 \Rightarrow det(C - \lambda I) = 0\) \(\lambda^2 - 8\lambda + 14 = 0\) \(\lambda_1 = 5.41, \quad \lambda_2 = 2.59\)
都大于零 → 半正定 ✅
注意:对角线是 5 和 3,eigenvalue 是 5.41 和 2.59。不一样,但和相等。这是线性代数的一个性质:矩阵的 trace(迹)= eigenvalue 之和。Trace = 对角线元素之和:$5 + 3 = 5.41 + 2.59 = 8$。
数据的线性变换
在讲 PCA 之前,先理解矩阵乘法对数据做了什么。矩阵 × 数据 = 对数据做线性变换(拉伸、旋转、剪切)。
拉伸 (Scaling)
数据矩阵 $D$(每一列是一个数据点,行是特征):
\[D = \begin{bmatrix} x_1 & x_2 & x_3 & x_4 \\ y_1 & y_2 & y_3 & y_4 \end{bmatrix}\]拉伸矩阵 $S$(对角线上有数字,其他位置是零):
\[S = \begin{bmatrix} 2 & 0 \\ 0 & 1 \end{bmatrix}\]做矩阵乘法:
\[SD = \begin{bmatrix} 2x_1 & 2x_2 & 2x_3 & 2x_4 \\ y_1 & y_2 & y_3 & y_4 \end{bmatrix}\]直觉:基向量的变化
- $i = \begin{bmatrix} 1 \ 0 \end{bmatrix} \to \hat{i} = \begin{bmatrix} 2 \ 0 \end{bmatrix}$:x 方向被拉长 2 倍
- $j = \begin{bmatrix} 0 \ 1 \end{bmatrix} \to \hat{j} = \begin{bmatrix} 0 \ 1 \end{bmatrix}$:y 方向不变
对角线矩阵的含义: 对角线上的数字就是各个方向的拉伸倍数。非对角线是零意味着没有旋转或剪切,纯粹的拉伸。
从数据角度看: 每个点的 x 坐标变成原来的 2 倍,y 坐标不变。圆形点云变成椭圆(x 方向更长)。
旋转 (Rotation)
旋转矩阵(逆时针旋转 $\theta$ 角度):
\[R = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix}\]直觉:基向量的变化
- $i = \begin{bmatrix} 1 \ 0 \end{bmatrix} \to \hat{i} = \begin{bmatrix} \cos\theta \ \sin\theta \end{bmatrix}$:x 轴基向量被转到和 x 轴成 $\theta$ 角的位置
- $j = \begin{bmatrix} 0 \ 1 \end{bmatrix} \to \hat{j} = \begin{bmatrix} -\sin\theta \ \cos\theta \end{bmatrix}$:y 轴基向量也转了 $\theta$ 角,依然和 $\hat{i}$ 垂直
为什么公式是这样? $i$ 在单位圆上初始在角度 0,逆时针转 $\theta$ 后到了 $(\cos\theta, \sin\theta)$。$j$ 初始在 90°,转完在 $90 + \theta$,坐标是 $(\cos(90+\theta), \sin(90+\theta)) = (-\sin\theta, \cos\theta)$。
旋转矩阵的含义: 第一列是 $\hat{i}$(x 轴转完的位置),第二列是 $\hat{j}$(y 轴转完的位置)。
从数据角度看: 整团数据绕原点旋转 $\theta$ 角度。形状不变,只是朝向变了。
拉伸 vs 旋转对比:
| 拉伸(对角线矩阵) | 旋转矩阵 | |
|---|---|---|
| 矩阵形状 | 对角有数字,其他为零 | 四个位置都有数字 |
| 对数据的影响 | 改变各方向的长度 | 整体转一个角度 |
| 数据形状变化 | 圆 → 椭圆 | 形状不变,朝向变 |
| 点之间距离 | 会改变 | 不变(刚性变换) |
拉伸 + 旋转 = 真实的数据分布
真实数据(比如数学和物理成绩的散点图)常常是一个”斜着的椭圆”。这可以理解为:
\[D' = RSD\]- $D$:原始的圆形点云(白化数据)
- $S$:拉伸(让某个方向方差更大)→ 圆变成正着的椭圆
- $R$:旋转(让椭圆斜过来)→ 正着的椭圆变成斜着的椭圆
- $D’$:我们观测到的数据
反过来,从观测数据 $D’$ 还原:
\[D = S^{-1}R^{-1}D' = S^{-1}R^TD'\]其中:
- $S = \begin{bmatrix} a & 0 \ 0 & b \end{bmatrix}$,$S^{-1} = \begin{bmatrix} 1/a & 0 \ 0 & 1/b \end{bmatrix}$
- $R^{-1} = R^T$(旋转矩阵的逆等于转置,因为反向旋转 = 转置)
协方差矩阵的 eigenvector 就是 $R$(旋转方向),eigenvalue 就是 $S^2$(拉伸倍数的平方)。
PCA(Principal Component Analysis,主成分分析)
一句话:PCA 就是”从椭圆回到圆”的反向过程。 给你一团斜着的椭圆数据,反推出:
- 它是怎么”斜”的(旋转了多少)→ eigenvector(椭圆的长轴方向)
- 它被”拉”了多少倍 → eigenvalue(椭圆长短轴的长度)
为什么要做 PCA? 找到数据变化最大的方向,用少数几个方向代替原来的很多特征。
比如有 100 个特征,其中很多是相关的(面积大的房子卧室多、浴室多、车库多),PCA 说这些特征虽然有 100 个,但真正独立的方向可能只有 10 个。
PCA 的步骤:
- 去中心化(把坐标原点放在数据中心)= 去均值
- 算协方差矩阵
- 找 eigenvalue 和 eigenvector
- eigenvalue 最大的 eigenvector = 数据变化最大的方向 = 第一主成分
- eigenvalue 第二大的 = 第二主成分
- 选前几个主成分,丢掉剩下的(降维)
需要保存的信息:
- 新坐标系的原点(= 原始数据的均值)
- 新坐标系的方向(= eigenvector)
- 新坐标下的数据点
和线性变换的联系:
- 对角线矩阵是”已知变换,作用到数据上”(正向)
- PCA 是”已知数据,反推出变换”(反向)
PCA 完整例子
4 个学生,2 个特征:数学和物理成绩
| 学生 | 数学 | 物理 |
|---|---|---|
| A | 90 | 85 |
| B | 70 | 65 |
| C | 80 | 78 |
| D | 60 | 52 |
第一步:去均值
数学均值 = $(90+70+80+60)/4 = 75$,物理均值 = $(85+65+78+52)/4 = 70$
| 学生 | 数学 - 75 | 物理 - 70 |
|---|---|---|
| A | 15 | 15 |
| B | -5 | -5 |
| C | 5 | 8 |
| D | -15 | -18 |
第二步:算协方差矩阵
\(cov(数学,数学) = (15^2 + (-5)^2 + 5^2 + (-15)^2) / 4 = 125\) \(cov(物理,物理) = (15^2 + (-5)^2 + 8^2 + (-18)^2) / 4 = 159.5\) \(cov(数学,物理) = (15 \times 15 + (-5) \times (-5) + 5 \times 8 + (-15) \times (-18)) / 4 = 140\)
\[C = [[125, 140], [140, 159.5]]\]协方差 140 很大(接近对角线),说明数学和物理高度正相关。
第三步:算 eigenvalue
\(det(C - \lambda I) = 0\) \((125 - \lambda)(159.5 - \lambda) - 140^2 = 0\) \(\lambda^2 - 284.5\lambda + 337.5 = 0\) \(\lambda_1 = 283.3, \quad \lambda_2 = 1.2\)
第四步:解读
| 主成分 | Eigenvalue | 占比 | 含义 |
|---|---|---|---|
| 第一主成分 | 283.3 | 99.6% | 整体学习能力(数学物理一起高或一起低) |
| 第二主成分 | 1.2 | 0.4% | 微小差异(数学好但物理差,或反过来) |
第一主成分解释了 99.6% 的变异,说明数学和物理几乎完全同步。原来 2 个特征,用 1 个主成分就够了,这 1 个主成分就是”整体学习能力”。
4 个点几乎在一条斜线上,这条斜线就是第一主成分的方向(eigenvector)。数据沿着这条线的变异 = 283.3(很大),垂直于这条线的变异 = 1.2(很小)。
用线性变换理解: 这团数据就是一个几乎退化成线的椭圆。$\lambda_1 = 283.3$ 是长轴(很长),$\lambda_2 = 1.2$ 是短轴(几乎为零)。PCA 找到了这个椭圆的长轴方向,告诉你”沿着这个方向看,数据变化最大”。
Statistic
2.1 贝叶斯定理:
\(P(A|B) = \frac{P(B|A) P(A)}{P(B)}\) 当$P(A|B)$难算,用容易知道的$P(B|A)$反推
2.2 期望
\(E[X] = 每个值\text{ X }概率, 全部加起来\) 掷骰子的期望 = $1\times\frac{1}{6} + 2\times\frac{1}{6} + 3\times\frac{1}{6} + 4\times\frac{1}{6} + 5\times\frac{1}{6} + 6\times\frac{1}{6} = 3.5$
2.3 标准差和方差
方差: 偏离均值的平方的期望 = 波动有多大 \(Var(X) = E[(X - \mu)^2]\)
标准差 = $\sqrt{Var(X)}$, 单位和原始数据一样
- 方差可加: 独立随机变量的方差可以直接相加
- 标准差不可以加: 要先加方差再开根号
- n次独立随机试验: 总标准差 = $\sigma \times \sqrt{n}$
2.4 常见分布
| 分布 | 含义 | 期望 | 方差 |
|---|---|---|---|
| Bernoulli | 做一次,成功或失败 | $p$ | $p(1-p)$ |
| Binomial | 做 $n$ 次,数成功几次 | $np$ | $np(1-p)$ |
| Geometric | 一直做到第一次成功 | $1/p$ | $(1-p)/p^2$ |
| Uniform$(0,1)$ | $0$ 到 $1$ 等概率 | $0.5$ | $1/12$ |
| Normal | 钟形曲线 | $\mu$ | $\sigma^2$ |
关系: Bernoulli做一次 -> Binomial做n次; Bernoulli做一次 -> Geometric一直做到成功
Bernoulli:做一次,成功或失败(均值 = 期望)
期望等于p,惯例上这个p就是定义为1的那个事件的概率(p也可以说是成功概率)
- 掷一次硬币($p=0.5$):期望 $= 0.5$,意味着掷很多很多次,平均一半是正面。方差 $= 0.5 \times 0.5 = 0.25$,标准差 $= 0.5$,意味着每次结果(0或1)平均偏离均值0.5大约0.5,不确定性最大(因为正反各一半,完全不知道会出什么)。
- 投一次篮($p=0.4$):期望 $= 0.4$,意味着投很多次,平均40%会进。方差 $= 0.4 \times 0.6 = 0.24$,比掷硬币小一点,因为不进的概率更大,结果稍微更可预测(大概率不进)。
- 标准差是sqrt(0.24)约等于0.49意味着每次投篮的结果(0或1)平均偏离均值0.4大约0.49
- 但对于Bernoulli分布,标准差的直觉意义不大,因为结果只有0和1两个值。方差和标准差在Binomial(多次投篮)里更有用
- 投100次篮(p = 0.4), 期望进球数是40,标准差是sqrt(100 * 24) = sqrt(24) = 4.9。68%的情况进球数在40 +- 5, 即35到45个
- n很小(n = 3), Binomial不像正态
- n足够大(n >= 30), Binomial近似正态分布,可以用68-95-99.7
- 所以不是Binomial本身是正态分布,而是n足够大时它近似正态
- CLT: 不管原始分布是什么(Binomial, Uniform, 任何分布),样本量足够大时均值/总和趋向正态分布
- 投100次篮(p = 0.4), 期望进球数是40,标准差是sqrt(100 * 24) = sqrt(24) = 4.9。68%的情况进球数在40 +- 5, 即35到45个
- 一个用户点不点广告($p=0.02$):期望 $= 0.02$,意味着100个人看广告,平均2个人会点。方差 $= 0.02 \times 0.98 = 0.0196$,非常小,因为几乎可以确定不会点,不确定性很低。
- 一只股票今天涨不涨($p=0.5$):期望 $= 0.5$,意味着长期来看大约一半的天是涨的。方差 $= 0.25$,和掷硬币一样,完全不确定。
Binomial:做 n 次 Bernoulli,数成功几次
- 掷100次硬币($p=0.5$),正面几次?期望 $= 50$,意味着平均50次正面。标准差 $= 5$,意味着大部分情况正面次数在$50 \pm 5$,即45到55之间(68%)。如果出现60次正面,$z = (60-50)/5 = 2$,比较异常。
- 投20次篮($p=0.4$),进几个?期望 $= 8$,意味着平均进8个。标准差 $\approx 2.2$,意味着大部分情况进球数在$8 \pm 2.2$,即6到10个之间。
- 10000个用户看广告($p=0.02$),几人点了?期望 $= 200$,意味着平均200人点击。标准差 $= 14$,意味着正常波动范围是$200 \pm 14$,即186到214人。如果只有150人点了,$z = (150-200)/14 = -3.6$,非常异常,可能广告出了问题。
- 252个交易日($p=0.5$),几天涨?期望 $= 126$,意味着平均126天涨。标准差 $\approx 7.9$,意味着正常范围是$126 \pm 8$,即118到134天。
Geometric:一直做到第一次成功
不关心成功几次,只关心第一次成功要等多久。
直觉理解:
你在投篮(命中率$p=0.4$),一直投直到第一次进。可能的情况:
- 第1次就进了:概率 $= 0.4$
- 第1次没进,第2次进了:概率 $= 0.6 \times 0.4 = 0.24$
- 前2次没进,第3次进了:概率 $= 0.6^2 \times 0.4 = 0.144$
- 前k-1次没进,第k次进了:概率 $= (1-p)^{k-1} \cdot p$
写出来就是:
\[p, \quad (1-p)p, \quad (1-p)^2p, \quad (1-p)^3p, \quad \ldots\]每一项是前一项的$(1-p)$倍。这是一个等比数列(geometric sequence),所以叫几何分布(geometric distribution)。
越往后概率越小 — 第1次就成功的概率最大,等的越久概率越低。
期望公式: $E = 1/p$
推导: 设$E$为期望次数。每次尝试花1步,然后:
- 概率$p$成功了 → 结束
- 概率$(1-p)$失败了 → 回到起点,还需要$E$次
所以 $E = 1 + p \cdot 0 + (1-p) \cdot E = 1 + (1-p)E$
化简:$pE = 1$,$E = 1/p$
方差公式: $Var = (1-p)/p^2$
$p$越小(成功越难)→ 期望越大(等越久)→ 方差也越大(波动越大,有时很快成功有时等很久)
例题:
- 一直掷骰子直到出6($p=1/6$):
- 每次尝试:第1次概率$1/6$,第2次概率$5/6 \times 1/6$,第3次概率$(5/6)^2 \times 1/6$…
- 期望 $= 1/(1/6) = 6$次
- 方差 $= (5/6)/(1/36) = 30$,标准差 $= \sqrt{30} \approx 5.5$
- 意味着平均要掷6次,但波动很大(标准差5.5),有时候1次就出6,有时候要掷十几次
- 一直投篮直到第一次进($p=0.4$):
- 每次尝试:第1次概率$0.4$,第2次概率$0.24$,第3次概率$0.144$…
- 期望 $= 1/0.4 = 2.5$次
- 方差 $= 0.6/0.16 = 3.75$,标准差 $\approx 1.94$
- 意味着平均投2到3次就能进,大部分情况在$2.5 \pm 2$次,即1到5次之间
- 一直面试直到拿到第一个offer($p=0.1$):
- 每次尝试:第1次概率$0.1$,第2次概率$0.09$,第3次概率$0.081$…
- 期望 $= 1/0.1 = 10$家
- 方差 $= 0.9/0.01 = 90$,标准差 $\approx 9.5$
- 意味着平均面10家,但波动极大(标准差9.5),运气好1家就中,运气差可能要面20多家
- 一直交易直到第一次盈利($p=0.6$):
- 每次尝试:第1次概率$0.6$,第2次概率$0.24$,第3次概率$0.096$…
- 期望 $= 1/0.6 \approx 1.67$次
- 方差 $= 0.4/0.36 \approx 1.11$,标准差 $\approx 1.05$
- 意味着平均不到2次就盈利,波动小(标准差约1),大部分情况1到3次就成功
Uniform(0,1):每个值概率相等
直觉理解:
在0到1之间随机取一个数,取到0.3和取到0.7的概率一样大。没有哪个数更”偏好”。
想象一个完全均匀的转盘,指针停在任何位置的概率都一样。
和正态分布对比:
| Uniform | Normal | |
|---|---|---|
| 形状 | 平的,每个值概率一样 | 钟形,中间高两边低 |
| 例子 | 随机数生成器 | 考试成绩 |
| 极端值 | 和中间值一样可能 | 极端值很少见 |
期望和方差:
- 期望 $= (0 + 1) / 2 = 0.5$
- 直觉:最小值0和最大值1的中点,因为分布完全对称
- 意味着生成很多很多次,平均值趋向0.5
- 方差 $= 1/12 \approx 0.083$,标准差 $\approx 0.289$
- 意味着每次结果平均偏离0.5大约0.29
- 68%的结果在$0.5 \pm 0.289$,即$[0.211, 0.789]$之间(注意:这里不是正态分布,只是大致范围) Uniform(0,1) 方差的推导:
方差 = $E[X^2] - (E[X])^2$
第一步:算 $E[X]$
Uniform(0,1) 每个值概率一样,期望就是中点:
\[E[X] = \frac{0 + 1}{2} = 0.5\]第二步:算 $E[X^2]$
$E[X^2]$ = 所有 $x^2$ 的平均值。因为是连续的,用积分:
\[E[X^2] = \int_0^1 x^2 , dx = \frac{x^3}{3}\Big|_0^1 = \frac{1}{3}\]第三步:代入公式
\[Var(X) = E[X^2] - (E[X])^2 = \frac{1}{3} - \left(\frac{1}{2}\right)^2 = \frac{1}{3} - \frac{1}{4} = \frac{4-3}{12} = \frac{1}{12}\]直觉理解:
方差衡量数据偏离均值多远。Uniform(0,1) 的数据均匀散布在 0 到 1 之间,偏离 0.5 最远的是 0 和 1(各偏 0.5),最近的就是 0.5 本身(偏 0)。平均下来偏离大约 0.289(= $\sqrt{1/12}$)。
如果是 Uniform(a, b):
同样的推导,把 0 和 1 换成 a 和 b:
\[Var = \frac{(b-a)^2}{12}\]范围越大(b-a 越大),方差越大。比如 Uniform(0,10) 的方差 = $100/12 \approx 8.33$,比 Uniform(0,1) 的 $1/12$ 大 100 倍。
一般化: 如果是Uniform($a$, $b$)($a$到$b$之间均匀分布):
- 期望 $= (a + b) / 2$
- 方差 $= (b - a)^2 / 12$
比如 Uniform(0, 10):期望 $= 5$,方差 $= 100/12 \approx 8.33$,标准差 $\approx 2.89$
Order Statistics(顺序统计量):
$n$个人各自独立从Uniform(0,1)中取一个数,最大值和最小值的期望是多少?
公式:
- 最大值期望 $= n/(n+1)$
- 最小值期望 $= 1/(n+1)$
直觉:$n$个人把$[0, 1]$这个区间大致均匀分成$n+1$段。最小值在第1段的位置,最大值在最后一段的位置。
推导(最大值):
最大值 $\leq x$ 意味着所有$n$个人都 $\leq x$:
\[P(\max \leq x) = x^n\]这是最大值的CDF(累积分布函数)。对它求导得到PDF(概率密度函数):
\[f(x) = n \cdot x^{n-1}\]期望:
\[E[\max] = \int_0^1 x \cdot f(x) \, dx = \int_0^1 x \cdot n \cdot x^{n-1} \, dx = n \int_0^1 x^n \, dx = \frac{n}{n+1}\]例题:
- 2个人各取一个:
- 最大值期望 $= 2/3 \approx 0.667$,意味着两个随机数里大的那个平均在0.667附近
- 最小值期望 $= 1/3 \approx 0.333$,意味着小的那个平均在0.333附近
- 5个人各取一个:
- 最大值期望 $= 5/6 \approx 0.833$,人多了,最大值往1靠
- 最小值期望 $= 1/6 \approx 0.167$,最小值往0靠
- 100个人各取一个:
- 最大值期望 $= 100/101 \approx 0.99$,几乎到1了
- 最小值期望 $= 1/101 \approx 0.01$,几乎到0了
- 直觉:100个人里总有人取到接近1的数,也总有人取到接近0的数
- 1个人取一个:
- 最大值期望 $= 1/2 = 0.5$,只有一个人,最大值就是他自己,期望就是Uniform的均值
Normal:中间多两边少(68-95-99.7规则)
68–95–99.7 规则:
| 范围 | 覆盖比例 |
|---|---|
| $\mu \pm 1\sigma$ | $68\%$ |
| $\mu \pm 2\sigma$ | $95\%$ |
| $\mu \pm 3\sigma$ | $99.7\%$ |
不管原始数据什么分布,取 $n$ 个样本的均值趋向正态分布($n$ 足够大时)。
z值的罕见程度(结合Geometric分布,每天/每次出现的概率$p$,期望等待次数$= 1/p$):
| $z$ | 概率(单侧) | 大约多罕见 |
|---|---|---|
| 1 | 16% | 很常见,6次出现1次 |
| 2 | 2.5% | 不常见,40次出现1次 |
| 2.5 | 0.6% | 罕见,160次出现1次 |
| 3 | 0.15% | 极罕见,667次出现1次 |
| 3.3 | 0.05% | 极其罕见,2000次出现1次 |
“多少次出现1次”就是Geometric分布的期望$= 1/p$。比如$z = 2.5$的概率$p = 0.006$,期望等待$1/0.006 \approx 160$次。
例题:
- 全班考试($\mu=70, \sigma=10$):68%在$[60, 80]$意味着大部分人考60到80分。95%在$[50, 90]$意味着几乎所有人在50到90之间。考了90分 $\to z = (90-70)/10 = 2$,超过了大约95%的人。换个角度:$z = 2$对应概率2.5%,每40个学生里大约1个能考到90分以上($1/0.025 = 40$)。
- 身高($\mu=170cm, \sigma=6cm$):68%在$[164, 176]$意味着大部分人身高在这个范围。190cm $\to z = (190-170)/6 = 3.3$,对应概率约0.05%,大约2000人里只有1个($1/0.0005 = 2000$)。
- 股票日收益($\mu=0.05\%, \sigma=2\%$):68%在$[-1.95\%, 2.05\%]$意味着大部分天变化不超过2%。某天跌5% $\to z = (5-0.05)/2 = 2.5$,对应概率约0.6%,大约160个交易日出现1次($1/0.006 \approx 160$),差不多大半年一次,值得关注。
- 零件尺寸($\mu=10cm, \sigma=0.1cm$):95%在$[9.8, 10.2]$意味着合格范围。10.3cm $\to z = (10.3-10)/0.1 = 3$,对应概率约0.15%,大约667个零件里出现1个($1/0.0015 \approx 667$),应该退回。
中心极限定理(CLT)
| 结论 | 公式 |
|---|---|
| 均值的均值 | $= \mu$(不变) |
| 均值的标准差 | $= \sigma / \sqrt{n} = SE$ |
为什么:取很多个数算平均,最可能的情况是大的小的互相抵消,均值在总体均值附近。全偏大或全偏小的概率极低 $=$ 正态分布。
标准误(SE)
\[SE = \frac{\sigma}{\sqrt{n}} = \text{均值的标准差}\]| 概念 | 含义 |
|---|---|
| 标准差 $\sigma$ | 个体的波动 |
| 标准误 $SE$ | 均值估计的波动 |
| $n$ 越大 | $SE$ 越小,估计越稳 |
2.5 假设检验和置信区间
| | 假设检验 | 置信区间 | |:—|:—:|:—:| | 起点 | 假设真实值 | 已知观测值 | | 方向 | 推测观测值的范围,看观测值是否异常 | 推测真实值的范围 | | 结论 | 拒绝或不拒绝 | 一个范围 |
假设检验
假设真实值是$H_0$, 推测观测值的范围(噪声的范围),看真实的观测值是否在这个范围内 步骤:
- $H_0$ = “没有什么特别的”
- 策略没用: return = 0
- 硬币公平: p = 0.5
- $SE = \frac{\sigma}{\sqrt{n}}$
- $z = \frac{(观测值 - H_0)}{SE}$
-
$ z > 2$ -> 拒绝$H_0$ (在$H_0$下出现这个结果的概率$<5%$)
置信区间
根据观测值,推测真实值的范围: 真实值有95%的概率在(观测值 $\pm\, 2 \times SE$)这个范围内
- CLT 告诉你:飞镖有 95% 的概率落在靶心周围 2 个 SE 的圆内
- 反过来想:如果飞镖落在某处,那么靶心有 95% 的概率在飞镖周围 2 个 SE 的圆内
假设检验例题
例1:策略是否有用
策略跑了36个月,月均return 1%,标准差3%。策略有用吗?
- $H_0$:策略没用,真实return $= 0\%$
- $SE = 3\% / \sqrt{36} = 0.5\%$
- $z = (1\% - 0\%) / 0.5\% = 2$
-
$ z = 2 \geq 2$ → 拒绝$H_0$ → 策略大概率有用
直觉:如果策略真的没用,$H_0$下观测值应该在$0\% \pm 2 \times 0.5\% = [-1\%, 1\%]$范围内。观测到1%刚好在边界 → 勉强异常。
例2:硬币是否公平
掷400次,220次正面。硬币公平吗?
- $H_0$:硬币公平,$p = 0.5$
- 观测比例 $= 220/400 = 0.55$
- $SE = \sqrt{0.5 \times 0.5 / 400} = \sqrt{0.000625} = 0.025$
- $z = (0.55 - 0.5) / 0.025 = 2$
-
$ z = 2 \geq 2$ → 拒绝$H_0$ → 硬币大概率不公平
例3:策略证据不足
策略跑了100天,日均return 0.3%,标准差2%。有用吗?
- $H_0$:真实return $= 0\%$
- $SE = 2\% / \sqrt{100} = 0.2\%$
- $z = 0.3\% / 0.2\% = 1.5$
-
$ z = 1.5 < 2$ → 不能拒绝$H_0$ → 证据不足,不能证明策略有用
注意:不是说”策略没用”,而是”证据不够”。就像法庭判无罪不是说没犯罪,只是证据不够定罪。
例4:灯泡寿命
公司说灯泡寿命1000小时。测了49个,均值980,标准差70。公司说的对吗?
- $H_0$:真实寿命 $= 1000$小时
- $SE = 70 / \sqrt{49} = 10$
- $z = (980 - 1000) / 10 = -2$
-
$ z = 2 \geq 2$ → 拒绝$H_0$ → 寿命大概率不是1000小时
置信区间例题
例1:策略return的范围
策略36个月,月均return 1%,$SE = 0.5\%$
95%置信区间 $= 1\% \pm 2 \times 0.5\% = [0\%, 2\%]$
意味着真实月均return有95%的概率在0%到2%之间。
例2:点击率是否达标
老板要求点击率至少1.5%。观测10000人,150人点击,点击率1.5%。
- $SE = \sqrt{0.015 \times 0.985 / 10000} \approx 0.0012$
- 置信区间 $= 1.5\% \pm 2 \times 0.12\% = [1.26\%, 1.74\%]$
- 下限1.26% $< 1.5\%$ → 真实点击率可能低于1.5% → 不能保证达标
如果观测到2%:
- 置信区间 $= [1.72\%, 2.28\%]$
- 下限1.72% $> 1.5\%$ → 可以保证达标
例3:IC的范围
Alpha signal跑了48个月,IC均值0.02,标准差0.05。
- $SE = 0.05 / \sqrt{48} \approx 0.0072$
- 置信区间 $= 0.02 \pm 2 \times 0.0072 = [0.0056, 0.0344]$
- 意味着真实IC有95%的概率在0.56%到3.44%之间
- 下限 $> 0$ → IC大概率为正 → signal有用
假设检验和置信区间的对应关系:
同一道题,两种方法结论一致:
| 方法 | 策略return例子 |
|---|---|
| 假设检验 | $H_0 = 0\%$,$z = 2$,拒绝 → 策略有用 |
| 置信区间 | 区间$[0\%, 2\%]$,0%在边界上 → 勉强有用 |
假设检验说”拒绝$H_0$”等价于置信区间说”$H_0$的值在区间边界或外面”。
Probability面试题
3.1 几何分布
每次成功的概率是$p$, 期望尝试次数是$\frac{1}{p}$
- 掷骰子到6停止,$E = \frac{1}{\frac{1}{6}} = 6$
3.2 Monty Hall
三门问题。来自美国电视节目 “Let’s Make a Deal”,主持人叫 Monty Hall,所以叫 Monty Hall Problem。
选了门1,主持人开了门3(没奖品)。换门赢的概率是$\frac{2}{3}$ | 奖品在 | 不换结果 | 换的结果 | |:—:|:—:|:—:| | 门 $1$ | 赢 | 输 | | 门 $2$ | 输 | 赢 | | 门 $3$ | 输 | 赢 |
不换赢$\frac{1}{3}$, 换了赢$\frac{2}{3}$。关键是主持人会可以避开奖品
3.3 不公平硬币模拟公平
抛两次
- HT: 正
- TH: 反
- HH/TT: 重来
$P(HT) = P(TH) = p(1-p)$所以公平
3.4 Order Statistics(顺序统计量)核心是平均 = 期望
什么是 Order Statistics?
$n$个随机数排好序后,第$k$大的那个叫第$k$个顺序统计量。面试里最常考最大值和最小值。
题目: $n$个人各自独立从Uniform(0,1)中取一个数,最大值和最小值的期望是多少?
直觉理解:
1个人取一个数,期望在0.5(中间)。
2个人各取一个数,大的那个会往右偏,小的那个会往左偏:
- 就像两个人站在0到1的数轴上,他们会把数轴大致分成3段
- 小的那个大约在1/3的位置,大的那个大约在2/3的位置
3个人各取一个数,把数轴大致分成4段:
- 最小的在1/4,中间的在2/4,最大的在3/4
规律:$n$个人把$[0, 1]$均匀分成$n+1$段
- 最小值期望 $= 1/(n+1)$(第1段的位置)
- 最大值期望 $= n/(n+1)$(最后一段的位置)
- 第$k$小的期望 $= k/(n+1)$
公式推导(最大值):
设$M = \max(X_1, X_2, \ldots, X_n)$
第一步:求CDF(累积分布函数)
$M \leq x$意味着所有$n$个人都$\leq x$。每个人独立,所以概率相乘:
3.5 Gambler’s Ruin(赌徒破产)
从位置$i$出发,每步等概率左或右跳1步。到$N$就赢,碰到$k$就死。赢的概率:
\[P = \frac{i - k}{N - k}\]特殊情况:$k = 0$时,$P = \frac{i}{N}$
直觉: 你离死亡越近,赢的概率越低。离目标越近,赢的概率越高。
例题1:基础题
你在位置3,目标到位置10,碰到0就死。赢的概率?
\[P = \frac{3 - 0}{10 - 0} = \frac{3}{10} = 30\%\]你离0只有3步,离10有7步,赢的概率不高。
例题2:换死亡位置
你在位置5,目标到位置8,碰到2就死。赢的概率?
\[P = \frac{5 - 2}{8 - 2} = \frac{3}{6} = 50\%\]你在死亡和目标的正中间,所以刚好一半。
例题3:几乎必死
你在位置1,目标到位置100,碰到0就死。赢的概率?
\[P = \frac{1}{100} = 1\%\]离死亡只有1步,离目标有99步,几乎必死。
例题4:几乎必赢
你在位置99,目标到位置100,碰到0就死。赢的概率?
\[P = \frac{99}{100} = 99\%\]离目标只有1步,几乎必赢。
例题5:面试变种 — 赌徒
你有$50,每局赢$1或输$1(各50%)。赢到$100就走,输到$0就破产。赢着离开的概率?
\[P = \frac{50 - 0}{100 - 0} = \frac{50}{100} = 50\%\]虽然每局公平,但因为有”破产”这个吸收壁,长期来看赌徒最终一定会破产(如果一直玩下去不设目标的话)。设了目标$100才有50%的赢面。
从$S_0$:掷一次(花1步)
- 掷到H(概率$1/2$)→ 进入$S_1$
- 掷到T(概率$1/2$)→ 回到$S_0$(没有进度)
从$S_1$:掷一次(花1步)
- 掷到H(概率$1/2$)→ Done!不需要更多步
- 掷到T(概率$1/2$)→ 回到$S_0$(之前的H白费了)
列方程:
\[E_0 = 1 + \frac{1}{2}E_1 + \frac{1}{2}E_0\]- 1:这一步本身的消耗(不管结果如何都要掷一次)
- $\frac{1}{2}E_1$:掷到H,进入$S_1$,还需要$E_1$步
- $\frac{1}{2}E_0$:掷到T,回到$S_0$,还需要$E_0$步
- 1:这一步的消耗
- $\frac{1}{2} \cdot 0$:掷到H,结束了,不需要更多步
- $\frac{1}{2}E_0$:掷到T,回到$S_0$,还需要$E_0$步
解方程:
从第二个方程:$E_1 = 1 + \frac{1}{2}E_0$
代入第一个:$E_0 = 1 + \frac{1}{2}(1 + \frac{1}{2}E_0) + \frac{1}{2}E_0$
展开:$E_0 = 1 + \frac{1}{2} + \frac{1}{4}E_0 + \frac{1}{2}E_0$
$E_0 = \frac{3}{2} + \frac{3}{4}E_0$
$\frac{1}{4}E_0 = \frac{3}{2}$
\[E_0 = 6\]3.6 连续HH的期望
拆状态:
- $E_0 = 1 + \frac{1}{2}E_1 + \frac{1}{2}E_0$
- $E_1 = 1 + \frac{1}{2}\times0 + \frac{1}{2}E_0$
- $E_0 = 6$
例题1:连续HH
如上,$E = 6$次。
例题2:连续HT
掷到H之后要掷到T。和HH有什么不同?
状态:
- $S_0$:起点
- $S_1$:刚掷了H,需要T
$E_0 = 1 + \frac{1}{2}E_1 + \frac{1}{2}E_0$
$E_1 = 1 + \frac{1}{2} \cdot 0 + \frac{1}{2}E_1$
注意$E_1$的方程不同:掷到T就结束,掷到H还是停留在$S_1$(因为你有了一个新的H,不用回到$S_0$)。
解$E_1$:$E_1 = 1 + \frac{1}{2}E_1$,$\frac{1}{2}E_1 = 1$,$E_1 = 2$
代入:$E_0 = 1 + \frac{1}{2} \cdot 2 + \frac{1}{2}E_0 = 2 + \frac{1}{2}E_0$
$\frac{1}{2}E_0 = 2$,$E_0 = 4$
连续HT只要4次,比HH的6次少。 因为HT不会浪费进度:掷了H之后掷了H,你不用回到起点,你还是在$S_1$(手上有一个H)。而HH掷了H之后掷了T,之前的H全废了。
例题3:连续HHH(面试可能追问)
状态:$S_0$(起点),$S_1$(一个H),$S_2$(两个H)
$E_0 = 1 + \frac{1}{2}E_1 + \frac{1}{2}E_0$
$E_1 = 1 + \frac{1}{2}E_2 + \frac{1}{2}E_0$
$E_2 = 1 + \frac{1}{2} \cdot 0 + \frac{1}{2}E_0$
从$E_2$开始往回解:
$E_2 = 1 + \frac{1}{2}E_0$
$E_1 = 1 + \frac{1}{2}(1 + \frac{1}{2}E_0) + \frac{1}{2}E_0 = \frac{3}{2} + \frac{3}{4}E_0$
$E_0 = 1 + \frac{1}{2}(\frac{3}{2} + \frac{3}{4}E_0) + \frac{1}{2}E_0 = \frac{7}{4} + \frac{7}{8}E_0$
$\frac{1}{8}E_0 = \frac{7}{4}$
\[E_0 = 14\]总结:
| 目标 | 期望次数 | 为什么 |
|---|---|---|
| HH | 6 | 掷到T就回到起点,浪费进度 |
| HT | 4 | 掷到H不浪费,还能继续用 |
| HHH | 14 | 需要连续3个,任何一个T都回到起点 |
面试技巧: 遇到这类题,先画状态,再列方程,每个状态只看一步。不要试图一个方程解决所有事。
3.7 Markov Chain
- n步后的概率: 列出所有路径,每条概率相乘再加起来
- 长期稳态: 设$p$,列方程”今天概率 = 明天概率”,解$p$
Quant专业概念
Quant 核心逻辑
Hedge Fund 做什么
拿投资人的钱,用策略赚钱,赚了分成。
和普通基金的区别:可以做空、加杠杆,策略灵活。”Hedge”就是对冲的意思。
QR 做什么
一句话:找到一个好的排名标准(signal),让排名尽量准。
具体流程:
- 想一个假设(比如”被分析师正面提到多的股票表现更好”)
- 收集数据,给股票打分排名
- 回测验证(IC、Quintile backtest、Alpha 检验)
- 上线后持续监控
怎么赚钱
买排名靠前的股票,卖空排名靠后的股票。
- 买(long):花钱买入股票,涨了赚钱
- 卖空(short):借股票卖掉,跌了再买回来还,跌了赚钱
为什么要同时买和卖空?对冲大盘风险。
| 情况 | 只买不卖空 | 买 + 卖空 |
|---|---|---|
| 大盘涨 | 赚 ✅ | 赚 ✅(买的涨更多) |
| 大盘跌 | 全亏 ❌ | 赚 ✅(卖空的跌更多) |
| 大盘不动 | 看运气 | 赚 ✅(好的涨一点,差的跌一点) |
只买 = 赌大盘方向 + 赌排名(两个风险)
买 + 卖空 = 只赌排名(对冲掉了大盘风险)
你的 signal 只能预测排名,预测不了大盘方向。所以把不能预测的对冲掉,只赚你能预测的钱。这就是 hedge(对冲)。
前提只有一个:排名是对的(IC > 0)。排名错了就全亏。所以 QR 的全部价值就在于让排名更准。
排名不需要预测涨跌
排名靠后不代表跌,只代表比排名靠前的差:
| 股票 | 排名 | 实际return | 操作 | 赚了 |
|---|---|---|---|---|
| Apple | 1 | +8% | 买 | +8% |
| 2 | +5% | 买 | +5% | |
| Meta | 4 | +2% | 卖空 | -2% |
| Netflix | 5 | +1% | 卖空 | -1% |
所有股票都涨了,但买的涨得多(+8%, +5%),卖空的涨得少(+2%, +1%)。
净赚 = (8+5)/2 - (2+1)/2 = 6.5% - 1.5% = +5%
全涨也能赚,全跌也能赚,只要排名对。这就是 market neutral(市场中性)策略。
Signal 可以是任何东西
| signal | 排名标准 |
|---|---|
| 分析师情绪 | 被分析师正面提到越多,排名越高 |
| 社交媒体 | Twitter 正面讨论越多,排名越高 |
| 财报意外 | 财报超预期越多,排名越高 |
| 动量 | 最近涨得越多,排名越高 |
每个 QR 找不同的标准。公司把很多 QR 的标准叠在一起,组合成更准的总排名。
单个 signal 很弱(IC ≈ 0.02),但几十个独立的弱 signal 叠加起来就很强。就像一根绳子很细容易断,几十根拧在一起就很结实。
所有知识点串起来
| 你学的 | 在做什么 |
|---|---|
| Case study | 想出一个新的排名标准(signal) |
| IC | 衡量这个排名准不准 |
| Quintile backtest | 看排名是不是每一档都分得开 |
| Alpha 检验 | 看这个排名是不是真的有用 |
| Factor regression | 看排名是不是只在重复已知的标准 |
| 假设检验 | 判断结果是真的还是运气 |
| Linear Regression | 理解 signal 和 return 之间的关系 |
角色分工
| 角色 | 做什么 |
|---|---|
| QR | 找 signal,给股票排名 |
| PM | 决定买多少、卖空多少、每只投多少钱 |
| QD | 写代码,搭建交易系统和数据管道 |
| Risk | 监控风险,确保不会亏太多 |
QR 只负责排名准不准。怎么用排名赚钱是 PM 的事。
4.1 IC(Information Coefficient)
预测排名和实际排名的相关系数。衡量的不是预测值准不准,而是排名对不对。
为什么用排名而不是准确值?
因为交易时你做的决策是”买哪个、卖哪个”,不是”某只股票明天涨2.3%还是2.5%”。只要你能把好股票排在前面,差股票排在后面,就能赚钱。
- $IC > 0$:signal 有方向
- $IC \approx 0.02 \text{–} 0.05$:在 quant 里就算不错
- $IC \approx 0$:signal 没用
IC为什么这么小就有用?
IC = 0.02 听起来几乎没用,但你不是只交易一只股票:
- 500只股票 × 12个月 = 一年6000次预测
- 每次比随机好一点点
- 6000次”好一点点”累积起来就很可观
就像赌场每局只多2%的胜率,但一天几千局下来稳赚。IC = 0.02就是你的”赌场优势”。
具体例子:如何算一个月的IC
你的signal对5只股票打了分,月底看实际return:
| 股票 | signal分数 | 预测排名 | 实际return | 实际排名 |
|---|---|---|---|---|
| A | 95 | 1 | +5% | 1 |
| B | 80 | 2 | +3% | 2 |
| C | 60 | 3 | -1% | 4 |
| D | 40 | 4 | +1% | 3 |
| E | 20 | 5 | -3% | 5 |
预测排名和实际排名很接近(只有C和D差了一位),这个月的IC很高,大约0.9。
如果预测排名和实际排名完全乱的,IC接近0。
多个月的IC怎么用?
你跑了12个月,每个月算一个IC:
| 月份 | IC |
|---|---|
| 1月 | 0.05 |
| 2月 | -0.02 |
| 3月 | 0.08 |
| 4月 | 0.01 |
| 5月 | 0.03 |
| 6月 | -0.01 |
| 7月 | 0.06 |
| 8月 | 0.02 |
| 9月 | 0.04 |
| 10月 | -0.03 |
| 11月 | 0.07 |
| 12月 | 0.02 |
IC均值 = $(0.05 - 0.02 + 0.08 + 0.01 + 0.03 - 0.01 + 0.06 + 0.02 + 0.04 - 0.03 + 0.07 + 0.02) / 12 \approx 0.027$
IC标准差 $\approx 0.035$
检验:这个signal有用吗?
- $H_0$:IC = 0(signal没用)
- $SE = \frac{0.035}{\sqrt{12}} = \frac{0.035}{3.46} \approx 0.01$
- $t = \frac{0.027}{0.01} = 2.7$
-
$ t = 2.7 > 2$ → 拒绝$H_0$ → signal有用
如果只跑了3个月呢?
同样的IC均值0.027,标准差0.035:
- $SE = \frac{0.035}{\sqrt{3}} \approx 0.02$
- $t = \frac{0.027}{0.02} = 1.35$
-
$ t = 1.35 < 2$ → 不能拒绝$H_0$ → 证据不足
同样的signal,12个月能证明有用,3个月证明不了。 因为数据越多,SE越小,越容易达到显著。
IC均值 vs IC稳定性:
| signal | IC均值 | IC标准差 | 哪个更好? |
|---|---|---|---|
| A | 0.03 | 0.02 | ✓ 均值不大但非常稳定 |
| B | 0.08 | 0.15 | ✗ 均值大但波动剧烈 |
Signal A更好。因为稳定的小优势比不稳定的大优势更赚钱。A的$t$更大($0.03/0.02 = 1.5$ vs $0.08/0.15 = 0.53$),更可能是真的。
稳定比大更重要。
4.2 Alpha 有效性检验4步
-
是否有用: 算IC, 看t-stat是否大于2 -
是否分的开: Quintile backtest分成五组看return是否单调递减 -
signal是否是假的:- Overfitting: 反复调参拟合历史噪音 (Out-of-sample 验证)
- Look-ahead bias: 用了未来的数据 (检查每个数据的release date)
- Survivorship bias: 只看活下来的股票 (用point-in-time 数据)
-
是新的么: Factor regression,看扣掉已知因子后,$\alpha$是否显著。Factor是已知的赚钱规律,大家都知道:- Market: 大盘涨你也涨
- Size: 小盘股比大盘涨的多
- Value: 便宜股票比贵的赚的多
- Momentum: 最近涨的继续涨
4.3 Rolling / Expanding Validation
为什么不能单次 80/20 切分?
假设你有 2018-2023 年的数据,80/20 切分:
- 训练集:2018-2022(前 80%)
- 测试集:2023(后 20%)
问题:2023 年刚好是牛市。你的模型在牛市表现好,你就以为模型很棒。但如果 2023 年是熊市呢?可能表现很差。
一次切分的结果完全取决于测试集那段时间的 market regime(市场环境)。你不知道模型在其他环境下表现如何。
更大的问题: 时间序列数据不能随机切分。如果你随机选 20% 做测试集,训练集里可能有 2023 年 3 月的数据,测试集里有 2023 年 1 月的数据。你在用未来的数据预测过去 → look-ahead bias。
Rolling Validation
固定窗口,往前滑动。每次用最近 N 个月训练,预测下一个月。
- 第1轮:训练 [1月-12月] → 预测 1月(第二年)
- 第2轮:训练 [2月-1月] → 预测 2月(第二年)
- 第3轮:训练 [3月-2月] → 预测 3月(第二年)
…
窗口大小固定(比如 12 个月),像一个滑动的窗户。
用具体例子:
| 轮次 | 训练数据 | 预测 | 当时的市场环境 |
|---|---|---|---|
| 1 | 2018.1 - 2018.12 | 2019.1 | 牛市 |
| 2 | 2018.2 - 2019.1 | 2019.2 | 牛市 |
| … | … | … | … |
| 12 | 2019.1 - 2019.12 | 2020.1 | 牛市末 |
| 13 | 2019.2 - 2020.1 | 2020.2 | COVID 来了 |
| 14 | 2019.3 - 2020.2 | 2020.3 | 暴跌 |
| … | … | … | … |
| 36 | 2021.1 - 2021.12 | 2022.1 | 加息开始 |
模型在牛市、COVID、加息等不同环境都被测试过了。 不像单次 80/20 只测了一种环境。
优点: 训练数据永远是最新的,旧数据会被丢掉 缺点: 窗口小的话训练数据少,可能不够
Expanding Validation
窗口越来越大,从头开始累积所有历史数据。
- 第1轮:训练 [1月-12月] → 预测 1月(第二年)
- 第2轮:训练 [1月-1月(第二年)] → 预测 2月(第二年)
- 第3轮:训练 [1月-2月(第二年)] → 预测 3月(第二年)
…
用具体例子:
| 轮次 | 训练数据 | 预测 | 训练数据量 |
|---|---|---|---|
| 1 | 2018.1 - 2018.12 | 2019.1 | 12个月 |
| 2 | 2018.1 - 2019.1 | 2019.2 | 13个月 |
| … | … | … | … |
| 24 | 2018.1 - 2019.12 | 2020.1 | 24个月 |
| 36 | 2018.1 - 2020.12 | 2021.1 | 36个月 |
训练数据越来越多,窗口只会变大不会缩小。
优点: 数据越来越多,模型越来越稳 缺点: 如果早期数据已经过时(比如 2018 年的规律在 2023 年不适用),旧数据反而是噪音
Rolling vs Expanding 对比
| Rolling | Expanding | |
|---|---|---|
| 训练窗口 | 固定大小(如 12 个月) | 越来越大 |
| 旧数据 | 丢掉 | 保留 |
| 适合 | 市场变化快,旧规律容易失效 | 市场规律比较稳定 |
| 数据量 | 始终一样多 | 越来越多 |
面试中说: “I’d use rolling or expanding window validation to test across multiple market conditions, rather than a single train-test split which only covers one regime.”
三种方法对比
| 方法 | 做法 | 覆盖环境 | 风险 |
|---|---|---|---|
| 单次 80/20 | 前 80% 训练,后 20% 测试 | 只有 1 种 | 测试集碰巧是牛市,你以为模型很好 |
| Rolling | 固定窗口滑动 | 多种 | 窗口小的话数据不够 |
| Expanding | 窗口越来越大 | 多种 | 旧数据可能过时 |
4.4 Feature Ablation
去掉特征看效果是否下降。如果去掉Twitter特征后IC显著下降,说明Twitter特征有独立价值
Case Study
5.1 开场五点
1. Target:预测什么
问清楚你到底在预测什么数字。
| 场景 | 可能的 target | 区别 |
|---|---|---|
| 股票 | 价格?return?方向? | 价格是绝对值,return是百分比变化,方向是涨/跌 |
| 房价 | 售价?租金?涨幅? | 售价是一次性的,租金是每月的 |
| 送餐 | 送达时间?等待时间?总时间? | 总时间 = 做菜时间 + 送达时间 |
| Citi Bike | 借车量?还车量?净流量? | 借和还是两个不同的数字 |
面试英文: “Before I start, I’d like to clarify — what exactly is the prediction target? Are we predicting the actual sale price, or the price change?”
2. Horizon:预测多远
三个维度要问清楚:
Cadence(频率):多久预测一次?
- 每 5 分钟?每小时?每天?每月?
- Citi Bike 可能是每小时预测一次
- 股票可能是每天预测一次
Lead time(提前量):提前多久预测?
- 现在预测 1 小时后?明天?下个月?
- 送餐:下单时就预测(提前 30-60 分钟)
- 股票:今天收盘预测明天收盘(提前 1 天)
Prediction window(预测窗口):预测某个时刻还是一段时间?
| 类型 | 含义 | 例子 |
|---|---|---|
| Point | 预测某个精确时刻的值 | 明天收盘价是多少 |
| Period | 预测一段时间内的值 | 下一个小时的总借车量 |
面试英文: “What’s the prediction horizon? Are we predicting the value at a specific point in time, or an aggregate over a period?”
3. Unit:一行数据是什么
问清楚数据表的每一行代表什么。这决定了你的 primary key。
什么时候不需要时间?
一套房子卖一次就完了,不需要反复预测:
- Unit = transaction_id(一笔交易)
- 不需要乘时间
什么时候需要乘时间?
同一个对象需要反复预测:
- Citi Bike:同一个站点每小时都要预测 → Unit = station_id × hour
- 股票:同一只股票每天都要预测 → Unit = stock_id × date
- 送餐:每个订单只预测一次 → Unit = order_id(不需要时间)
怎么判断?问自己:同一个对象需要预测多次吗?
| 场景 | 同一对象多次预测? | Unit |
|---|---|---|
| 房价 | 否,卖一次就完了 | transaction_id |
| 送餐时间 | 否,每单预测一次 | order_id |
| Citi Bike 需求 | 是,每小时都要预测 | station_id × hour |
| 股票 return | 是,每天都要预测 | stock_id × date |
| 广告点击率 | 是,每天都要预测 | ad_id × date |
面试英文: “So the unit of observation would be station × hour, since we’re predicting demand for each station at each hour. Is that correct?”
4. Available info:预测时有哪些信息可用
关键:是预测时(prediction time)已有的信息,不是事后的信息。
以 Citi Bike 为例,预测下午 3 点的借车量。在下午 2 点(预测时刻)你能用什么?
| 可用 ✅ | 不可用 ❌ |
|---|---|
| 下午 2 点之前的借车历史 | 下午 3 点的实际借车量(这是你要预测的) |
| 当前天气 | 明天的天气(还没发生) |
| 今天是周几 | — |
| 站点容量、位置 | — |
| 附近站点当前状态 | — |
以股票为例,今天收盘预测明天 return。你能用什么?
| 可用 ✅ | 不可用 ❌ |
|---|---|
| 今天及之前的股价、成交量 | 明天的股价(这是你要预测的) |
| 今天之前发布的财报 | 明天才发布的财报(look-ahead bias) |
| 今天的 Twitter 数据 | 明天的 Twitter 数据 |
| 行业分类、市值 | — |
这个问题也在帮你避免 look-ahead bias。
面试英文: “At prediction time, what information is available? I assume we have historical demand, current weather, calendar features, and station metadata. Is there anything else?”
5. Evaluation:用什么指标评估
两个最常见的指标:
MAE(Mean Absolute Error)= 平均绝对误差
\[MAE = \frac{1}{n}\sum|y - \hat{y}|\]每个误差同等对待。偏 5 万和偏 10 万的惩罚是线性的(10 万的惩罚 = 5 万的 2 倍)。
RMSE(Root Mean Squared Error)= 均方根误差
\[RMSE = \sqrt{\frac{1}{n}\sum(y - \hat{y})^2}\]大误差被平方放大惩罚。偏 10 万的惩罚 = 偏 5 万的 4 倍(不是 2 倍)。
怎么选?看”一个大错误”和”几个小错误”哪个更糟糕:
| 场景 | 选哪个 | 原因 |
|---|---|---|
| 送餐时间预测 | RMSE | 预测偏了 30 分钟比偏了 5 分钟严重得多,客户会投诉 |
| 房价预测 | RMSE | 一套房估错 50 万比 5 套房各估错 10 万更严重 |
| Citi Bike 需求 | MAE 或 RMSE 都行 | 少派几辆车不算严重 |
| 股票 return | IC 更常用 | quant 里排名比准确值重要 |
面试中怎么说:
“I’d use RMSE as the primary metric because a single large prediction error is much worse than several small ones — for example, if we predict a delivery takes 30 minutes but it actually takes 90 minutes, that’s a terrible customer experience. RMSE penalizes such large errors more heavily than MAE.”
追问:为什么不用 MAE?
“MAE treats all errors equally. But in this context, being off by 30 minutes is much worse than being off by 5 minutes six times, even though the total absolute error is the same. RMSE captures this by squaring the errors.”
追问:什么时候用 MAE?
“When all errors are equally bad regardless of size, or when there are many outliers that you don’t want to dominate the metric. MAE is more robust to outliers.”
5.2 Baseline
面试官问你”What model would you use?”,不要直接说 XGBoost。先说 baseline。
面试官很看重你是否主动说 baseline,因为这体现了科学的研究思路:先有一个简单的参照物,再看复杂模型能好多少。
什么是 Baseline?
最简单的、不需要任何特征的预测方法。 如果你的复杂模型连 baseline 都打不过,说明你的特征和模型没有价值。
不同场景的 Baseline
| 场景 | Baseline | 为什么合理 |
|---|---|---|
| 房价 | 同一个社区的房价均值 | 位置是房价最大的决定因素 |
| Citi Bike | 上周同一时刻的借车量 | 借车有很强的周规律 |
| 送餐时间 | 该餐厅的历史平均送餐时间 | 不同餐厅速度差很多 |
| 股票 return | 0(零 return) | 短期 return 几乎不可预测,猜 0 是最简单的 |
| 广告点击率 | 整体平均点击率 | 不知道任何信息时的最佳猜测 |
Baseline 有层次
以房价为例,从简单到复杂:
| 层次 | Baseline | 用了什么信息 |
|---|---|---|
| 第 1 层 | 全城所有房子的均价 | 没用任何信息 |
| 第 2 层 | 同一个社区的均价 | 用了位置 |
| 第 3 层 | 同社区 + 同户型的均价 | 用了位置 + 户型 |
面试中说第 1 或第 2 层就够了。 不需要把 baseline 搞得很复杂,它的作用只是当参照物。
面试中怎么说
标准回答模板:
“I’d start with a simple baseline — [具体 baseline]。Then I’d move to a more powerful model like XGBoost to see how much improvement the features provide over this baseline.”
例子(Citi Bike):
“My baseline would be last-week-same-hour demand. Bike demand has strong weekly seasonality, so this is already a reasonable prediction. Then I’d use XGBoost with additional features like weather, calendar, and nearby station signals to improve upon this baseline.”
例子(股票):
“The simplest baseline is zero return — the assumption that prices don’t change. Any model I build needs to beat this. If my Twitter features can’t beat predicting zero, they’re not useful.”
例子(房价):
“I’d start with the median sale price of nearby houses in the past few months. That already captures location and market timing. Then I’d move to XGBoost with house-level features to improve the prediction.”
为什么面试官看重 Baseline?
- 体现研究素养: 科学研究都有 control group(对照组),baseline 就是你的对照组
- 避免过度自信: 很多人的”复杂模型”其实还不如猜均值,没有 baseline 你根本不知道
- 区分你和其他候选人: 直接说 XGBoost 的人很多,先说 baseline 的人很少
5.3 特征分组
从问题的物理过程出发,不要套模板。想象这件事从头到尾怎么发生的,每一步对应什么特征。
为什么不要套模板?
你学了 Citi Bike 的 5 组特征(历史需求、日历、天气、站点属性、附近站点)。如果面试换成送餐时间,你直接套这 5 组,就会漏掉最核心的特征:距离、交通、司机数量。
每个问题的物理过程不同,特征也不同。
方法:画出物理过程,每一步提取特征
例子 1:送餐时间
物理过程:下单 → 餐厅接单排队 → 做菜 → 司机取餐 → 开车送达
| 步骤 | 对应特征 |
|---|---|
| 下单 | 订单大小、菜品数量、是否是复杂菜品 |
| 餐厅排队 | 当前队列长度、餐厅当前订单数 |
| 做菜 | 餐厅历史平均出餐时间 |
| 司机取餐 | 附近可用司机数量、司机到餐厅的距离 |
| 开车送达 | 餐厅到客户的距离、实时交通状况、天气 |
如果套 Citi Bike 模板,你可能会说”天气、日历、历史数据”,但完全漏掉”距离、交通、司机、队列”这些最核心的特征。
例子 2:房价预测
物理过程:一套房子挂牌 → 买家看房 → 评估 → 出价 → 成交
什么决定价格?从里到外想:
| 层次 | 对应特征 |
|---|---|
| 房子本身 | 面积、卧室数、卫生间数、房龄、车库、泳池、装修 |
| 周边环境 | 学区、安全性、交通、医院、超市 |
| 市场行情 | 近期同社区成交价、利率、季节 |
先想房子本身(最直接),再想周边(位置),最后想市场(宏观)。从具体到抽象。
例子 3:Citi Bike 需求预测
物理过程:一个人想骑车 → 查看附近站点 → 有车就借 → 没车就去别的站
| 因素 | 对应特征 |
|---|---|
| 有多少人想骑车 | 历史同时刻需求、日历(工作日/周末)、天气 |
| 这个站什么情况 | 站点容量、位置、附近有无地铁 |
| 附近站什么情况 | 附近站点当前空满程度(substitution effect) |
例子 4:股票 return 预测(用 Twitter 数据)
物理过程:市场信息产生 → 人们在 Twitter 讨论 → 情绪影响交易行为 → 股价变化
| 因素 | 对应特征 |
|---|---|
| 讨论热度 | 提到该股票的推文数量 |
| 讨论内容 | 情绪分数(正面/负面) |
| 热度 × 内容 | 高热度 + 高情绪 比 低热度 + 高情绪 更有信号 |
| 市场背景 | 大盘 return、板块 return(用来对冲,不是预测) |
| 价格历史 | 近期 return(momentum)、成交量 |
面试中怎么说
模板:
“I’d think about the physical process of [这件事]. [描述过程]. At each step, I’d extract relevant features.”
例子(送餐):
“I’d think about the physical process of a delivery: the order is placed, the restaurant queues and prepares the food, a driver picks it up, and drives to the customer. So my features would be organized around these steps — order complexity, restaurant queue length and cooking speed, driver availability, and distance plus real-time traffic.”
常见错误
| 错误 | 后果 |
|---|---|
| 套 Citi Bike 模板 | 漏掉当前问题最核心的特征 |
| 先想到周边特征,忘了主体本身 | 房价预测先说学区,忘了面积卧室(最基本的) |
| 一个一个随机列特征 | 听起来没有逻辑,像在背答案 |
| 只说类别不说具体 | “天气特征”太模糊,要说”温度、是否下雨、极端天气” |
5.4 模型选择
标准回答流程
先说 baseline → 再说强模型 → 解释为什么选这个模型 → 说 loss function
Baseline
见 5.2,先说最简单的预测。
强模型:XGBoost(Gradient Boosted Trees)
面试中推荐 XGBoost 作为默认选择。
什么是 XGBoost?
很多棵决策树排队干活。第 1 棵树做预测,第 2 棵树专门纠正第 1 棵的错误,第 3 棵纠正前两棵剩余的错误……几百棵叠加起来,预测就很准了。
为什么选 XGBoost?
| 优点 | 解释 |
|---|---|
| 处理非线性关系 | 房价和面积不是完美线性的(面积从 10㎡ 到 50㎡ 涨价快,从 200㎡ 到 250㎡ 涨价慢) |
| 自动捕捉特征交互 | 多一间卧室在家庭社区加价多,在市中心加价少。树模型自然能发现这种交互 |
| 不需要手动构造特征 | 不用自己算”面积×卧室数”这种交互项,模型自动学 |
| 对缺失值友好 | 有些数据缺失也能处理 |
为什么不用 Linear Regression?
| Linear Regression | XGBoost | |
|---|---|---|
| 非线性 | ❌ 只能线性 | ✅ 天然处理 |
| 特征交互 | ❌ 需要手动构造 | ✅ 自动发现 |
| 可解释性 | ✅ 每个 coefficient 有明确含义 | ❌ 黑盒 |
| 面试什么时候用 | stats 题(讨论 assumptions) | case 题(做预测) |
面试英文:
“I’d use gradient boosted trees, specifically XGBoost. With features spanning multiple categories — the house itself, neighborhood, and market context — there are likely nonlinear effects and feature interactions. For example, an extra bedroom adds more value in a family neighborhood than in a downtown studio district. Tree-based models handle this naturally without manual feature engineering.”
面试官可能追问
“为什么不用 Neural Network / Deep Learning?”
“For tabular data with structured features, XGBoost typically outperforms deep learning. Deep learning shines with unstructured data like images or text, but for our case with numerical and categorical features, tree-based models are the standard choice.”
“为什么不用 Random Forest?”
“Both are tree-based, but XGBoost usually performs better because boosting focuses each new tree on the mistakes of previous trees. Random Forest trains trees independently, which is good for reducing variance but doesn’t actively correct errors.”
“为什么不只用 Linear Regression?”
“Linear regression is a good baseline and useful for interpretability. But it can’t capture nonlinear relationships or feature interactions without manual feature engineering. I’d start with linear regression as a baseline, then move to XGBoost to see how much improvement the nonlinearity provides.”
Loss Function
Loss function 告诉模型”什么算错,错多少”。不同类型的预测目标用不同的 loss。
| 数据类型 | Loss | 为什么 |
|---|---|---|
| 连续值(房价、送餐时间) | MSE | 预测值可以是任何数字,平方惩罚大误差 |
| 计数数据(借车量) | Poisson loss | 借车量是非负整数(0, 1, 2, 3…),Poisson 保证预测值非负 |
| 分类(涨/跌) | Cross-entropy | 输出的是概率(0到1之间),Cross-entropy 衡量概率预测的好坏 |
面试中怎么选 loss?看你的 target 是什么类型:
- target 是”多少钱”(连续)→ MSE
- target 是”几辆车”(计数)→ Poisson loss
- target 是”涨还是跌”(二分类)→ Cross-entropy
面试追问:”为什么 Citi Bike 用 Poisson 不用 MSE?”
“Bike demand is count data — it’s a non-negative integer. MSE could give negative predictions, which doesn’t make sense for counts. Poisson loss naturally constrains predictions to be non-negative and is designed for count data.”
面试追问:”可以在 XGBoost 里用 Poisson loss 吗?”
“Yes. XGBoost supports custom loss functions. Using XGBoost with Poisson loss combines the flexibility of tree-based models with an appropriate loss for count data.”
5.5 常见 Follow-up
面试官在你讲完模型后,会追问一些”如果……怎么办”的问题。这些问题考的是你能不能处理现实中的意外情况。
Cold Start(冷启动)
问题: 一个全新的对象,没有任何历史数据,怎么预测?
例子:
- Citi Bike:新开了一个站点,没有历史借车数据
- 房价:一个新建小区,周围没有成交记录
- 股票:一只新上市的股票(IPO),没有历史 return
解决方法:两步走
第一步:找相似对象的数据代替
| 场景 | 怎么找相似 | 用什么特征匹配 |
|---|---|---|
| Citi Bike 新站 | 找位置、周边环境类似的老站 | 学区、交通、人口密度 |
| 新建小区 | 找档次、位置类似的老小区 | 学区、安全性、交通便利度 |
| IPO 股票 | 找同行业、同规模的公司 | 行业、市值、营收 |
第二步:只用非历史特征
新对象没有历史数据,但其他特征还在:
| 场景 | 没有的 | 还有的 |
|---|---|---|
| Citi Bike 新站 | 历史借车量 | 天气、日历、站点容量、位置、附近有无地铁 |
| 新建小区 | 历史成交价 | 面积、卧室数、学区、交通 |
| IPO 股票 | 历史 return | 行业、财报数据、市值 |
随着时间推移,新对象积累了自己的数据,逐步切换到用自己的历史数据。
面试英文:
“For a cold-start station, I’d rely on station metadata features — location, capacity, nearby transit — and use demand patterns from similar existing stations as a proxy. As the new station accumulates its own data, I’d gradually incorporate local history.”
Regime Change(市场环境变化)
问题: 你的模型是用旧数据训练的,但市场环境突然变了(比如 COVID、加息),怎么办?
为什么是问题?
你的模型从没见过新环境的数据:
- 2019 年训练的模型不知道 COVID 是什么
- COVID 期间人们的行为完全不同(不坐地铁了、在家办公了)
- 模型预测出来的结果不可信
解决方法:三步走
第一步:检测 regime change
监控模型表现。如果 IC 突然下降或 return 突然变差,可能是 regime 变了。
| 指标 | 正常 | 异常 |
|---|---|---|
| IC | 稳定在 0.03 | 突然降到 0 或负数 |
| 日 return | 稳定正收益 | 连续亏损 |
| 预测误差 | 稳定 | 突然变大 |
第二步:缩短训练窗口
不再用 5 年的历史数据训练,改用最近 3-6 个月。让模型只学习新环境的规律。
旧方法:用 2015-2020 的数据训练(包含大量旧环境数据) 新方法:只用 2020.6-2020.12 的数据训练(只有新环境数据)
第三步:加重近期数据权重
如果不想直接丢掉旧数据,可以给近期数据更高的权重:
| 数据时间 | 权重 |
|---|---|
| 最近 1 个月 | 5x |
| 最近 3 个月 | 3x |
| 最近 6 个月 | 2x |
| 6 个月以前 | 1x |
面试英文:
“If there’s a regime change, I’d first detect it by monitoring model performance — a sudden drop in IC or increase in prediction error. Then I’d retrain with a shorter training window and increase the weight on recent data, since pre-regime patterns are no longer representative.”
Feature Importance(特征重要性)
问题: 怎么知道哪些特征真的有用?
方法:Feature Ablation(特征消融)
去掉一个特征,看模型表现是否下降。
| 实验 | IC | 变化 |
|---|---|---|
| 所有特征 | 0.035 | — |
| 去掉天气 | 0.033 | 下降 0.002(天气有点用) |
| 去掉 Twitter 情绪 | 0.020 | 下降 0.015(Twitter 很有用) |
| 去掉日历 | 0.034 | 几乎不变(日历没用) |
IC 下降多 = 这个特征很重要。IC 几乎不变 = 这个特征没用,可以删掉。
为什么不直接看 coefficient 大小?
因为如果用 XGBoost(tree-based model),没有 coefficient。Feature ablation 对任何模型都适用。
面试中怎么说:
“To assess feature importance, I’d use feature ablation — remove one feature at a time and measure the drop in out-of-sample IC. A significant drop confirms the feature adds independent value.”
面试追问:”去掉一个特征 IC 没变,说明这个特征没用吗?”
“Not necessarily. It could be highly correlated with another feature that’s still in the model. The information is redundant, not useless. If I remove both, IC might drop significantly.”
其他可能的 Follow-up
| 问题 | 简短回答 |
|---|---|
| Data leakage 怎么避免? | 检查每个特征的 release date,确保没有用到未来信息 |
| 缺失值怎么处理? | XGBoost 自动处理;或者用中位数填充;或者加一个”是否缺失”的 indicator 特征 |
| 异常值怎么处理? | 看是真实的极端值还是数据错误。错误就修正,真实的可以 winsorize(截断到某个百分位) |
| 时间序列为什么不能随机 split? | 随机 split 会把未来数据放进训练集 → look-ahead bias。必须按时间切分 |
| 怎么监控模型上线后的表现? | 持续计算 IC、tracking error,发现衰减及时下线 |
Behavioral
6.1 Why quant
I used to trade stocks and options on my own, but I realized I was making decisions based on intuition — there was no rigorous way to learn from wins or losses. That experience made me appreciate the quantitative approach: form a hypothesis, backtest it against historical data, and only deploy when the evidence supports it. As a software engineer at TikTok, I work with data and code every day. I want to apply those skills to a field where the feedback loop is direct — your research either makes money or it doesn’t.
Enjoy Reading This Article?
Here are some more articles you might like to read next: