量化交易中文教材

第 05 章 多元微积分与优化

金融里几乎没有只依赖一个变量的量。期权价格同时依赖标的价格、波动率、期限和利率;组合方差依赖每只资产的权重;债券组合的价值依赖整条收益率曲线。这一章把第 02 章的一元导数推广到多个变量。

你已经会的很多东西,其实都是本章内容的特例。各个 Greeks 是期权价格的偏导数;「Delta–Gamma 近似」是二元泰勒展开的一部分;最小方差组合是带约束的优化,用拉格朗日乘子求解;不允许卖空的组合优化,用的是 KKT 条件。读完本章,你能看懂第 04 册(数值最优化)和第 11 册第 05 章(组合构建)里的推导。

前置知识:第 02 章(导数、链式法则、泰勒展开、凸性),第 03 章(定积分)。矩阵记号会用到一些,不熟悉时先按「两只资产」的展开式去读,第 06 章会系统讲矩阵。


学习目标

  1. 会求偏导数,理解它是「其他变量固定时」的变化率,能把 Greeks 看成偏导数。
  2. 理解梯度的含义:它是一阶近似的系数向量,也是函数上升最快的方向;会求方向导数。
  3. 会写 Hessian 矩阵,会用多元泰勒展开做二阶近似(Delta–Gamma–Vega 近似)。
  4. 会用一阶条件找无约束极值点,用 Hessian 判断它是极小、极大还是鞍点;知道凸函数为什么好优化。
  5. 会用拉格朗日乘子法推导最小方差组合,理解乘子是「约束的影子价格」。
  6. 理解 KKT 条件的四个组成部分,能读懂只做多组合优化的解。
  7. 会计算简单的二重积分,会用雅可比行列式做变量替换,理解它在概率密度变换中的作用。

5.1 多元函数

金融例子。 两只资产组成的组合,权重 \(w_1,w_2\),波动率 \(\sigma_1,\sigma_2\),相关系数 \(\rho\)。组合方差是

\[\sigma_p^2(w_1,w_2)=w_1^2\sigma_1^2+w_2^2\sigma_2^2+2w_1w_2\rho\sigma_1\sigma_2.\]

输入两个数 \((w_1,w_2)\),输出一个数。这就是一个二元函数。

定义。 \(n\) 元函数 \(f:\mathbb R^n\to\mathbb R\) 把 \(n\) 个实数组成的向量 \(x=(x_1,\dots,x_n)\) 映射为一个实数 \(f(x)\)。本书中向量默认写成列向量,\(x^\top\) 表示转置后的行向量。

数值例。 \(\sigma_1=15\%\),\(\sigma_2=20\%\),\(\rho=0.3\),\(w=(0.6,0.4)\):

\[\sigma_p^2=0.36\times0.0225+0.16\times0.04+2\times0.6\times0.4\times0.3\times0.15\times0.20=0.0081+0.0064+0.00432=0.01882,\]

组合波动率 \(\sqrt{0.01882}=13.72\%\)。

等高线。 二元函数可以画成三维曲面,但更常用的是等高线:把 \(f(x,y)=c\) 的点连成曲线。你熟悉的无差异曲线、等方差线、收益率曲线上的等价格线,都是等高线。后面讲梯度和拉格朗日乘子时,等高线是最好用的几何图像。


5.2 偏导数

5.2.1 定义

直觉。 多个变量同时变化,很难说清「变化率」。最简单的办法是一次只动一个:其他变量全部固定,只看函数对某一个变量的敏感度。期权的 Delta 就是这样定义的:波动率、期限、利率都不变,只让标的价格变动。

定义。 \(f(x_1,\dots,x_n)\) 对 \(x_i\) 的偏导数是

\[\frac{\partial f}{\partial x_i}(x)=\lim_{h\to0}\frac{f(x_1,\dots,x_i+h,\dots,x_n)-f(x_1,\dots,x_n)}{h}.\]

记号 \(\partial\) 读作「偏」(partial),用来提醒你还有别的变量被固定着。也常写作 \(f_{x_i}\)、\(\partial_if\) 或 \(\partial_{x_i}f\)。

怎么算。 把其他变量当常数,按一元函数求导。第 02 章的所有求导法则照用。

5.2.2 例:组合方差的偏导数

对 \(\sigma_p^2=w_1^2\sigma_1^2+w_2^2\sigma_2^2+2w_1w_2\rho\sigma_1\sigma_2\):

  • 对 \(w_1\) 求偏导,\(w_2\) 当常数。第一项求导得 \(2w_1\sigma_1^2\);第二项与 \(w_1\) 无关,导数为 0;第三项是 \(w_1\) 乘常数 \(2w_2\rho\sigma_1\sigma_2\),导数就是这个常数。
    \[\frac{\partial\sigma_p^2}{\partial w_1}=2w_1\sigma_1^2+2w_2\rho\sigma_1\sigma_2.\]
  • 同理 \(\dfrac{\partial\sigma_p^2}{\partial w_2}=2w_2\sigma_2^2+2w_1\rho\sigma_1\sigma_2\)。

数值例。 在 \(w=(0.6,0.4)\) 处,\(\rho\sigma_1\sigma_2=0.009\):

\[\frac{\partial\sigma_p^2}{\partial w_1}=2\times0.6\times0.0225+2\times0.4\times0.009=0.0342,\qquad\frac{\partial\sigma_p^2}{\partial w_2}=0.032+0.0108=0.0428.\]

含义:给资产 2 多加一单位权重,组合方差上升得比给资产 1 加更快。这就是「边际风险」。

5.2.3 例:夏普比率对均值和方差的敏感度

记 \(g(a,b)=a/\sqrt b\),其中 \(a\) 是超额收益均值,\(b\) 是方差。

  • \(\dfrac{\partial g}{\partial a}=\dfrac1{\sqrt b}\)(\(b\) 当常数,\(a\) 的系数就是导数)。
  • \(\dfrac{\partial g}{\partial b}=a\cdot\dfrac{d}{db}b^{-1/2}=-\dfrac12ab^{-3/2}\)(\(a\) 当常数,幂函数求导)。

数值例。 \(a=8\%\),\(b=0.04\)(波动率 20%),夏普比率 0.4。\(\partial g/\partial a=5\),\(\partial g/\partial b=-\frac12\times0.08\times0.04^{-1.5}=-5\)。方差从 0.04 升到 0.041 时,近似变化 \(-5\times0.001=-0.005\),真实值 \(0.08/\sqrt{0.041}=0.39509\),变化 \(-0.00491\)。第 03 册的多元 Delta 方法用这两个偏导数推导夏普比率估计量的标准误。

5.2.4 Greeks 就是偏导数

记期权价格 \(V(S,\sigma,t,r)\):

Greek 偏导数 固定的变量
Delta \(\partial V/\partial S\) \(\sigma,t,r\)
Vega \(\partial V/\partial\sigma\) \(S,t,r\)
Theta \(\partial V/\partial t\) \(S,\sigma,r\)
Rho \(\partial V/\partial r\) \(S,\sigma,t\)

在 Hull 的书里看到 \(\partial V/\partial S\) 时,读成「其他条件不变,标的价格变动一单位,期权价格变动多少」,就是 Delta。


5.3 梯度与方向导数

5.3.1 梯度

定义。 把所有偏导数排成一个列向量,叫梯度:

\[\nabla f(x)=\begin{pmatrix}\partial f/\partial x_1\\ \vdots\\ \partial f/\partial x_n\end{pmatrix}.\]

\(\nabla\) 读作 nabla 或 del。

数值例。 上面的组合方差在 \(w=(0.6,0.4)\) 处,\(\nabla\sigma_p^2=(0.0342,\ 0.0428)^\top\)。期权价格对 \((S,\sigma)\) 的梯度是 \((\text{Delta},\text{Vega})^\top\)。

梯度的第一个含义:一阶近似的系数。 当所有变量都有小变动 \(\Delta x\) 时,

\[f(x+\Delta x)\approx f(x)+\sum_i\frac{\partial f}{\partial x_i}\Delta x_i=f(x)+\nabla f(x)^\top\Delta x.\]

这正是你做风险归因时的做法:总的价格变动 ≈ Delta × 标的变动 + Vega × 波动率变动 + …。各个偏导数的贡献直接相加,这在变动很小时成立(严格地说,需要偏导数连续,此时称 \(f\) 可微;本书遇到的函数都满足)。

5.3.2 方向导数

问题。 再平衡时,权重往往不是只动一个。比如从资产 2 挪 1% 到资产 1,权重变化方向是 \((1,-1)\)。沿这个方向,方差变化多快?

定义。 给定单位向量 \(u\)(长度为 1),\(f\) 在 \(x\) 处沿 \(u\) 的方向导数是

\[D_uf(x)=\lim_{h\to0}\frac{f(x+hu)-f(x)}{h}=\nabla f(x)^\top u.\]

第二个等号来自一阶近似:\(f(x+hu)-f(x)\approx\nabla f^\top(hu)=h\,\nabla f^\top u\),除以 \(h\) 即得。偏导数是方向导数的特例,方向取坐标轴 \(e_i\)。

数值例。 \(u=(1,-1)/\sqrt2\),\(D_u\sigma_p^2=(0.0342-0.0428)/\sqrt2=-0.00608\),沿这个方向方差下降。实际挪 1%,\(\Delta w=(0.01,-0.01)\),一阶近似变化 \(0.0342\times0.01-0.0428\times0.01=-8.60\times10^{-5}\)。精确计算新方差减旧方差得 \(-8.155\times10^{-5}\)。两者之差 \(4.45\times10^{-6}\) 来自二阶项,5.5 节会解释。

5.3.3 梯度的第二个含义:上升最快的方向

结论。 在所有单位方向 \(u\) 中,\(D_uf=\nabla f^\top u\) 在 \(u\) 与 \(\nabla f\) 同向时最大,最大值为 \(\|\nabla f\|\);在反向时最小。

推导:由 Cauchy–Schwarz 不等式(第 07 章),\(\nabla f^\top u\le\|\nabla f\|\,\|u\|=\|\nabla f\|\),等号在 \(u=\nabla f/\|\nabla f\|\) 时成立。

推论。 梯度与等高线垂直。沿等高线移动时 \(f\) 不变,方向导数为 0,即 \(\nabla f^\top u=0\),所以 \(u\perp\nabla f\)。

这两条是很多算法的出发点。梯度下降法每一步沿 \(-\nabla f\) 走一小步,因为这是函数下降最快的方向。神经网络训练(第 10 册)、数值优化(第 04 册第 03 章)都从这里开始。

5.3.4 多元链式法则

结论。 若 \(f(x_1,\dots,x_n)\) 中每个 \(x_i\) 又是 \(t\) 的函数,则

\[\frac{d}{dt}f\big(x_1(t),\dots,x_n(t)\big)=\sum_{i=1}^n\frac{\partial f}{\partial x_i}\frac{dx_i}{dt}=\nabla f^\top\frac{dx}{dt}.\]

白话:总变化率 = 每条路径的「敏感度 × 该变量的变化速度」之和。

数值例。 持有 \(q\) 股、股价 \(P\),市值 \(f=qP\)。若 \(q\) 每天增加 1000 股,\(P\) 每天上涨 0.2 元,当前 \(q=50000\)、\(P=30\),则市值每天变化 \(\frac{\partial f}{\partial q}\dot q+\frac{\partial f}{\partial P}\dot P=30\times1000+50000\times0.2=40000\) 元。这就是乘积法则 \(d(qP)=P\,dq+q\,dP\)。伊藤引理是这条链式法则在随机情形下的修正(多出一项二阶项),见第 08 册第 14 章。

5.3.5 例:风险贡献的欧拉分解

组合波动率 \(\sigma_p(w)=\sqrt{w^\top\Sigma w}\) 有一个性质:所有权重同时乘以 \(c>0\),波动率也乘以 \(c\)(一次齐次)。对这样的函数,欧拉定理给出

\[\sigma_p=\sum_iw_i\frac{\partial\sigma_p}{\partial w_i}.\]

推导:

  1. 对恒等式 \(\sigma_p(cw)=c\,\sigma_p(w)\) 两边对 \(c\) 求导。
  2. 左边用链式法则:\(\sum_i\frac{\partial\sigma_p}{\partial w_i}(cw)\cdot w_i\)。右边是 \(\sigma_p(w)\)。
  3. 令 \(c=1\) 即得。

\(w_i\,\partial\sigma_p/\partial w_i\) 称为资产 \(i\) 的风险贡献,各项之和恰好是总风险。可以算出 \(\partial\sigma_p/\partial w=\Sigma w/\sigma_p\)(第 06 章矩阵求导)。

数值例。 三只资产波动率 15%、20%、25%,相关系数 \(\rho_{12}=0.3\)、\(\rho_{13}=0.2\)、\(\rho_{23}=0.5\),等权。组合波动率 15.20%。边际风险 \(\Sigma w/\sigma_p=(0.0855,0.1623,0.2083)\),风险贡献 \(w_i\times\)边际风险 \(=(0.0285,0.0541,0.0694)\),相加正好 0.1520。占比 18.8%、35.6%、45.7%:资金等权,风险远不等权。风险平价策略就是要让这三个数相等(第 11 册第 05 章)。


5.4 Hessian 矩阵

5.4.1 定义

对每个偏导数再求一次偏导,得到二阶偏导数 \(\dfrac{\partial^2f}{\partial x_i\partial x_j}\)。把它们排成矩阵:

\[\nabla^2f(x)=H(x)=\begin{pmatrix}\dfrac{\partial^2f}{\partial x_1^2}&\cdots&\dfrac{\partial^2f}{\partial x_1\partial x_n}\\ \vdots&\ddots&\vdots\\ \dfrac{\partial^2f}{\partial x_n\partial x_1}&\cdots&\dfrac{\partial^2f}{\partial x_n^2}\end{pmatrix}.\]

对称性(Schwarz/Clairaut 定理)。 若二阶偏导数连续,则求导顺序可以交换:\(\dfrac{\partial^2f}{\partial x_i\partial x_j}=\dfrac{\partial^2f}{\partial x_j\partial x_i}\)。所以 Hessian 是对称矩阵。

数值例 1:组合方差。 由 5.2.2 的偏导数再求导:

\[\frac{\partial^2\sigma_p^2}{\partial w_1^2}=2\sigma_1^2,\quad\frac{\partial^2\sigma_p^2}{\partial w_2^2}=2\sigma_2^2,\quad\frac{\partial^2\sigma_p^2}{\partial w_1\partial w_2}=2\rho\sigma_1\sigma_2.\]

所以 \(H=2\Sigma\),是协方差矩阵的两倍,与 \(w\) 无关。代入数值 \(H=\begin{pmatrix}0.045&0.018\\0.018&0.08\end{pmatrix}\)。

数值例 2:期权的二阶 Greeks。 对 \(V(S,\sigma)\),

\[H=\begin{pmatrix}\partial^2V/\partial S^2&\partial^2V/\partial S\partial\sigma\\ \partial^2V/\partial\sigma\partial S&\partial^2V/\partial\sigma^2\end{pmatrix}=\begin{pmatrix}\text{Gamma}&\text{Vanna}\\ \text{Vanna}&\text{Volga}\end{pmatrix}.\]

对角线上的 Gamma、Volga 是「自己对自己」的二阶敏感度;非对角的 Vanna 是交叉项:它既是「Delta 对波动率的敏感度」,又是「Vega 对标的价格的敏感度」,两者相等正是 Hessian 对称性。


5.5 多元泰勒展开

5.5.1 公式

一元的二阶泰勒展开是 \(f(x+h)\approx f(x)+f'(x)h+\frac12f''(x)h^2\)。多元版本把导数换成梯度、二阶导换成 Hessian:

\[\boxed{f(x+\Delta x)\approx f(x)+\nabla f(x)^\top\Delta x+\frac12\Delta x^\top H(x)\,\Delta x}\]

展开成二元的形式更直观:

\[f(x+\Delta x,y+\Delta y)\approx f+f_x\Delta x+f_y\Delta y+\frac12\big(f_{xx}\Delta x^2+2f_{xy}\Delta x\Delta y+f_{yy}\Delta y^2\big).\]

二次项 \(\Delta x^\top H\Delta x\) 展开后,交叉项 \(f_{xy}\Delta x\Delta y\) 出现两次(\(H_{12}\) 和 \(H_{21}\)),所以有系数 2。

为什么成立(思路)。 令 \(g(t)=f(x+t\Delta x)\),这是 \(t\) 的一元函数。对 \(g\) 在 \(t=0\) 做一元泰勒展开,再令 \(t=1\)。用链式法则可以算出 \(g'(0)=\nabla f^\top\Delta x\),\(g''(0)=\Delta x^\top H\Delta x\)。多元泰勒就是「沿直线方向的一元泰勒」。

回到 5.3.2 的数值例。 组合方差是二次函数,\(H=2\Sigma\),二阶展开是精确的。\(\frac12\Delta w^\top(2\Sigma)\Delta w=\Delta w^\top\Sigma\Delta w=0.0001\times(0.0225+0.04-2\times0.009)=4.45\times10^{-6}\),加上一阶项 \(-8.60\times10^{-5}\) 正好得到精确值 \(-8.155\times10^{-5}\)。

5.5.2 例:Delta–Gamma–Vega 近似

期权价格 \(C(S,\sigma)\) 的二阶展开就是交易员的 P&L 解释:

\[\Delta C\approx\underbrace{\Delta\cdot\Delta S+\text{Vega}\cdot\Delta\sigma}_{\text{一阶}}+\underbrace{\tfrac12\Gamma\,\Delta S^2+\text{Vanna}\,\Delta S\,\Delta\sigma+\tfrac12\text{Volga}\,\Delta\sigma^2}_{\text{二阶}}.\]

下面用 BSM 看涨期权验证:\(K=100\),\(T=0.5\),\(r=3\%\),当前 \(S=100\),\(\sigma=20\%\)。我们用中心差分数值求梯度和 Hessian,与解析 Greeks 对照,再看一个「标的跌 5 元、波动率升 3 个点」的情景。

import numpy as np
from scipy.stats import norm

K, T, r = 100.0, 0.5, 0.03

def call(S, sigma):
    d1 = (np.log(S / K) + (r + 0.5 * sigma**2) * T) / (sigma * np.sqrt(T))
    d2 = d1 - sigma * np.sqrt(T)
    return S * norm.cdf(d1) - K * np.exp(-r * T) * norm.cdf(d2)

S0, s0 = 100.0, 0.20
x0 = np.array([S0, s0])
f = lambda x: call(x[0], x[1])
h = np.array([1e-2, 1e-4])          # 两个变量量纲不同,步长分别取

# 中心差分求梯度
grad = np.array([(f(x0 + h[i] * np.eye(2)[i]) - f(x0 - h[i] * np.eye(2)[i])) / (2 * h[i]) for i in range(2)])
# 中心差分求 Hessian
H = np.zeros((2, 2))
for i in range(2):
    for j in range(2):
        ei, ej = h[i] * np.eye(2)[i], h[j] * np.eye(2)[j]
        H[i, j] = (f(x0 + ei + ej) - f(x0 + ei - ej) - f(x0 - ei + ej) + f(x0 - ei - ej)) / (4 * h[i] * h[j])

d1 = (np.log(S0 / K) + (r + 0.5 * s0**2) * T) / (s0 * np.sqrt(T))
d2 = d1 - s0 * np.sqrt(T)
delta, vega = norm.cdf(d1), S0 * norm.pdf(d1) * np.sqrt(T)
gamma = norm.pdf(d1) / (S0 * s0 * np.sqrt(T))
vanna = -norm.pdf(d1) * d2 / s0
volga = vega * d1 * d2 / s0
print("数值梯度  [delta, vega] =", np.round(grad, 5))
print("解析梯度  [delta, vega] =", np.round([delta, vega], 5))
print("数值 Hessian =\n", np.round(H, 5))
print("解析 Hessian =\n", np.round([[gamma, vanna], [vanna, volga]], 5))

# 多元泰勒:S 跌 5,波动率升 3 个点
dx = np.array([-5.0, 0.03])
exact = f(x0 + dx) - f(x0)
first = grad @ dx
second = first + 0.5 * dx @ H @ dx
print(f"真实变动 {exact:.4f}  一阶近似 {first:.4f}  二阶近似 {second:.4f}")

输出:

数值梯度  [delta, vega] = [ 0.57016 27.77213]
解析梯度  [delta, vega] = [ 0.57016 27.77213]
数值 Hessian =
 [[ 0.02777 -0.06943]
 [-0.06943  0.86788]]
解析 Hessian =
 [[ 0.02777 -0.06943]
 [-0.06943  0.86788]]
真实变动 -1.7007  一阶近似 -2.0176  二阶近似 -1.6597

逐项拆开二阶近似:

项 计算 数值
Delta 项 \(0.57016\times(-5)\) \(-2.8508\)
Vega 项 \(27.772\times0.03\) \(+0.8332\)
Gamma 项 \(\frac12\times0.02777\times25\) \(+0.3471\)
Vanna 项 \((-0.06943)\times(-5)\times0.03\) \(+0.0104\)
Volga 项 \(\frac12\times0.86788\times0.0009\) \(+0.0004\)
合计 \(-1.6597\)

一阶近似误差 0.32,二阶近似误差 0.04。对这个情景,Gamma 项是最重要的修正。债券的「久期 + 凸性」近似是同一公式在一个变量时的特例(第 02 章);关键利率久期则是多个变量的一阶项。


5.6 无约束极值

5.6.1 一阶必要条件

结论。 若 \(f\) 可微,且在内点 \(x^*\) 处取得局部极小(或极大),则

\[\nabla f(x^*)=0.\]

推导:固定其他变量,只看 \(x_i\),得到一个一元函数,它在 \(x_i^*\) 处取极值,由第 02 章的一元结论,导数(即偏导数)为 0。对每个 \(i\) 都成立,所以梯度为零。满足 \(\nabla f=0\) 的点叫驻点。

驻点不一定是极值点,就像一元时 \(f'(x)=0\) 也可能是拐点。多元时还多一种情况:鞍点,即沿某些方向是极小、沿另一些方向是极大,像马鞍的中心。

5.6.2 二阶条件

在驻点处 \(\nabla f=0\),泰勒展开只剩二次项:\(f(x^*+\Delta x)-f(x^*)\approx\frac12\Delta x^\top H\Delta x\)。所以极值类型由二次型 \(\Delta x^\top H\Delta x\) 的符号决定:

Hessian 在驻点处 二次型符号 结论
正定(特征值全 \(>0\)) 对任意 \(\Delta x\ne0\) 都 \(>0\) 严格局部极小
负定(特征值全 \(<0\)) 都 \(<0\) 严格局部极大
不定(特征值有正有负) 有正有负 鞍点
半定(有零特征值) 二阶信息不够 需要更高阶分析

二元的快速判法。 对 \(2\times2\) 的 \(H=\begin{pmatrix}a&b\\b&c\end{pmatrix}\):\(\det H=ac-b^2>0\) 且 \(a>0\) 为正定;\(\det H>0\) 且 \(a<0\) 为负定;\(\det H<0\) 为不定。特征值与正定性见第 06 章。

数值例。 \(f(x,y)=x^3-3x+y^2\)。梯度 \((3x^2-3,\ 2y)\),令其为零得驻点 \((1,0)\) 和 \((-1,0)\)。Hessian \(=\begin{pmatrix}6x&0\\0&2\end{pmatrix}\)。

import numpy as np
# f(x,y) = x^3 - 3x + y^2 的驻点:(1,0) 与 (-1,0)
def hessian(x, y):
    return np.array([[6 * x, 0.0], [0.0, 2.0]])
for p in [(1.0, 0.0), (-1.0, 0.0)]:
    ev = np.linalg.eigvalsh(hessian(*p))
    kind = "极小值" if (ev > 0).all() else ("极大值" if (ev < 0).all() else "鞍点")
    print(f"驻点 {p}: Hessian 特征值 {ev}, 判定 {kind}, f = {p[0]**3 - 3*p[0] + p[1]**2}")

输出:

驻点 (1.0, 0.0): Hessian 特征值 [2. 6.], 判定 极小值, f = -2.0
驻点 (-1.0, 0.0): Hessian 特征值 [-6.  2.], 判定 鞍点, f = 2.0

\((-1,0)\) 处沿 \(x\) 方向是极大(\(f_{xx}=-6\)),沿 \(y\) 方向是极小(\(f_{yy}=2\)),是鞍点。注意 \((1,0)\) 只是局部极小:\(x\to-\infty\) 时 \(f\to-\infty\),全局极小不存在。

5.6.3 例:最小二乘回归

CFA 的简单回归 \(y=a+bx\) 的系数公式,其实是一个二元无约束极值问题的解。

最小化残差平方和 \(\text{SSE}(a,b)=\sum_{i=1}^n(y_i-a-bx_i)^2\)。

  1. 对 \(a\) 求偏导(链式法则,内层对 \(a\) 的导数是 \(-1\)):\(\dfrac{\partial\,\text{SSE}}{\partial a}=-2\sum(y_i-a-bx_i)\)。
  2. 对 \(b\) 求偏导(内层导数是 \(-x_i\)):\(\dfrac{\partial\,\text{SSE}}{\partial b}=-2\sum x_i(y_i-a-bx_i)\)。
  3. 令两者为零,整理得正规方程:
    \[na+b\sum x_i=\sum y_i,\qquad a\sum x_i+b\sum x_i^2=\sum x_iy_i.\]
  4. Hessian \(=2\begin{pmatrix}n&\sum x_i\\ \sum x_i&\sum x_i^2\end{pmatrix}\)。只要 \(x_i\) 不全相等,它就是正定的(\(\det=4\big(n\sum x_i^2-(\sum x_i)^2\big)=4n\sum(x_i-\bar x)^2>0\)),所以驻点是唯一的全局极小。

数值例。 5 个观测:\(x=(-2,0,1,3,3)\),\(y=(-3,1,1,4,7)\)。\(n=5\),\(\sum x=5\),\(\sum x^2=23\),\(\sum y=10\),\(\sum xy=40\)。正规方程 \(5a+5b=10\),\(5a+23b=40\),两式相减得 \(18b=30\),\(b=1.667\),\(a=0.333\)。与公式 \(b=\frac{\sum(x-\bar x)(y-\bar y)}{\sum(x-\bar x)^2}=30/18\) 一致。多元回归、最大似然估计都是同一个套路:写出目标函数,令梯度为零。


5.7 凸函数

5.7.1 定义与判别

直觉。 凸函数的图像像一只碗:任取两点连一条弦,弦总在图像上方。

定义。 \(f\) 是凸函数,如果对任意 \(x,y\) 和任意 \(\theta\in[0,1]\),

\[f\big(\theta x+(1-\theta)y\big)\le\theta f(x)+(1-\theta)f(y).\]

白话:「先混合再求值」不超过「先求值再混合」。若 \(-f\) 是凸函数,则 \(f\) 是凹函数。

二阶判别。 若 \(f\) 二阶可导,则 \(f\) 凸 \(\iff\) 在定义域内处处 \(H(x)\) 半正定。这是一元「\(f''\ge0\)」的直接推广。

数值例。 组合方差 \(w^\top\Sigma w\) 的 Hessian 是 \(2\Sigma\)。协方差矩阵总是半正定的(任何组合的方差 \(w^\top\Sigma w\ge0\)),所以组合方差是凸函数。检验凸性定义:\(w_A=(1,0)\),\(w_B=(0,1)\),方差分别为 0.0225 和 0.04;等权混合 \((0.5,0.5)\) 的方差是 \(0.25\times0.0225+0.25\times0.04+2\times0.25\times0.009=0.020125\),小于 \(0.5\times0.0225+0.5\times0.04=0.03125\)。这个不等式的金融含义就是分散化。

5.7.2 为什么凸性重要

结论。 凸函数的任何局部极小都是全局极小;若还是严格凸,全局极小点唯一。对可微凸函数,\(\nabla f(x^*)=0\) 不仅是必要条件,也是充分条件。

推导要点:凸函数满足 \(f(y)\ge f(x)+\nabla f(x)^\top(y-x)\)(图像在每一点的切平面上方)。若 \(\nabla f(x^*)=0\),代入得 \(f(y)\ge f(x^*)\) 对所有 \(y\) 成立。

实际意义。 凸问题可以放心交给数值优化器,找到的就是全局最优。均值–方差优化(凸二次规划)、最小二乘、Lasso 都是凸的。神经网络的损失函数通常不是凸的,所以训练结果依赖初始化,这是第 10 册要反复处理的问题。


5.8 拉格朗日乘子:以最小方差组合为例

5.8.1 问题与直觉

问题。 在 \(w_1+w_2=1\)(满仓)的约束下,选权重使组合方差最小。

可以把约束代入消元(\(w_2=1-w_1\)),变成一元问题。但资产一多、约束一多,消元就不现实了。拉格朗日乘子法给出一个统一的做法。

几何直觉。 画出 \(\sigma_p^2\) 的等高线(一圈圈椭圆)和约束线 \(w_1+w_2=1\)(一条直线)。沿约束线走,会穿过不同的等高线。最优点处,约束线恰好与某条等高线相切。相切意味着两条曲线在该点法向量平行。等高线的法向量是 \(\nabla f\),约束 \(g(w)=c\) 的法向量是 \(\nabla g\)。所以最优点满足

\[\nabla f(w^*)=\lambda\nabla g(w^*)\]

对某个数 \(\lambda\) 成立。如果不相切,梯度在约束线方向上有分量,沿约束线往那个方向的反方向走一点,\(f\) 还能下降,就不是最优。

5.8.2 方法

结论(拉格朗日乘子法)。 求 \(\min f(x)\) s.t. \(g(x)=c\)。构造拉格朗日函数

\[\mathcal L(x,\lambda)=f(x)-\lambda\big(g(x)-c\big).\]

最优点满足(在 \(\nabla g(x^*)\ne0\) 的正则性条件下)

\[\frac{\partial\mathcal L}{\partial x_i}=0\ (i=1,\dots,n),\qquad\frac{\partial\mathcal L}{\partial\lambda}=0.\]

第一组就是 \(\nabla f=\lambda\nabla g\);第二组就是约束 \(g(x)=c\) 本身。\(n+1\) 个方程解 \(n+1\) 个未知数。多个约束时,每个约束配一个乘子。

\(\lambda\) 前面用减号还是加号只是习惯,不影响解,只影响 \(\lambda\) 的符号。

5.8.3 两只资产的推导

\(\mathcal L=w_1^2\sigma_1^2+w_2^2\sigma_2^2+2w_1w_2\sigma_{12}-\lambda(w_1+w_2-1)\),记 \(\sigma_{12}=\rho\sigma_1\sigma_2\)。

  1. \(\partial\mathcal L/\partial w_1=2w_1\sigma_1^2+2w_2\sigma_{12}-\lambda=0\)。

  2. \(\partial\mathcal L/\partial w_2=2w_2\sigma_2^2+2w_1\sigma_{12}-\lambda=0\)。

  3. 两式相减消去 \(\lambda\):\(w_1(\sigma_1^2-\sigma_{12})=w_2(\sigma_2^2-\sigma_{12})\)。

    含义:最优点处两只资产的「边际方差」相等。如果不相等,把权重从边际方差高的资产挪到低的资产,方差会下降。

  4. 代入 \(w_2=1-w_1\) 解出

    \[w_1^*=\frac{\sigma_2^2-\sigma_{12}}{\sigma_1^2+\sigma_2^2-2\sigma_{12}}.\]

数值例。 \(\sigma_1=15\%\),\(\sigma_2=20\%\),\(\rho=0.3\):\(w_1^*=\dfrac{0.04-0.009}{0.0225+0.04-0.018}=\dfrac{0.031}{0.0445}=0.6966\),\(w_2^*=0.3034\)。最小方差 0.018404,波动率 13.57%,低于两只资产各自的波动率。这就是 CFA 里两资产最小方差组合的公式。

5.8.4 \(n\) 只资产的推导

用矩阵写:\(\min_w w^\top\Sigma w\) s.t. \(\mathbf 1^\top w=1\),其中 \(\mathbf 1\) 是全 1 向量。需要两个矩阵求导公式(第 06 章会推导):\(\nabla_w(w^\top\Sigma w)=2\Sigma w\)(\(\Sigma\) 对称时),\(\nabla_w(\mathbf 1^\top w)=\mathbf 1\)。可以对照 5.2.2:\(2\Sigma w\) 的两个分量正是那两个偏导数。

  1. \(\mathcal L=w^\top\Sigma w-\lambda(\mathbf 1^\top w-1)\)。
  2. 对 \(w\) 求梯度并令其为零:\(2\Sigma w-\lambda\mathbf 1=0\),所以 \(w=\frac\lambda2\Sigma^{-1}\mathbf 1\)。(要求 \(\Sigma\) 可逆,即没有完全冗余的资产。)
  3. 代入约束:\(\mathbf 1^\top w=\frac\lambda2\mathbf 1^\top\Sigma^{-1}\mathbf 1=1\),所以 \(\frac\lambda2=\dfrac1{\mathbf 1^\top\Sigma^{-1}\mathbf 1}\)。
  4. 得到
    \[\boxed{w^*=\frac{\Sigma^{-1}\mathbf 1}{\mathbf 1^\top\Sigma^{-1}\mathbf 1}},\qquad\sigma^2_{\min}=w^{*\top}\Sigma w^*=\frac1{\mathbf 1^\top\Sigma^{-1}\mathbf 1}.\]
  5. 由于目标函数凸、约束线性,这个驻点就是全局最小(5.7.2)。

第 2 步的条件 \(2\Sigma w=\lambda\mathbf 1\) 是两资产「边际方差相等」的推广:最优组合中,每只资产的边际方差 \((2\Sigma w)_i\) 都等于同一个 \(\lambda\)。

5.8.5 乘子的含义:影子价格

结论。 把约束右端从 \(c\) 改成 \(c+\Delta c\),最优目标值约变化 \(\lambda\Delta c\):

\[\frac{d f^*(c)}{dc}=\lambda.\]

白话:\(\lambda\) 是「约束放松一单位值多少」,经济学里叫影子价格。

在最小方差问题里,把 \(\mathbf 1^\top w=1\) 改成 \(\mathbf 1^\top w=c\),同样的推导给出 \(f^*(c)=c^2/(\mathbf 1^\top\Sigma^{-1}\mathbf 1)\),求导 \(2c/(\mathbf 1^\top\Sigma^{-1}\mathbf 1)\),在 \(c=1\) 处正好是 \(\lambda\)。

5.8.6 数值验证

三只资产,参数同 5.3.5。闭式解、数值优化器、影子价格三方核对:

import numpy as np
from scipy.optimize import minimize

vol = np.array([0.15, 0.20, 0.25])
corr = np.array([[1.0, 0.3, 0.2],
                 [0.3, 1.0, 0.5],
                 [0.2, 0.5, 1.0]])
Sigma = np.outer(vol, vol) * corr
ones = np.ones(3)

# 拉格朗日条件给出的闭式解:w = Σ^{-1}1 / (1'Σ^{-1}1)
x = np.linalg.solve(Sigma, ones)
w_star = x / (ones @ x)
lam = 2 / (ones @ x)                # min w'Σw s.t. 1'w=1 时的乘子
print("闭式解权重      :", np.round(w_star, 4))
print("组合方差 w'Σw   :", round(w_star @ Sigma @ w_star, 6), " 组合波动率:", round(np.sqrt(w_star @ Sigma @ w_star), 4))
print("乘子 lambda     :", round(lam, 6))
print("检查 2Σw - λ1   :", np.round(2 * Sigma @ w_star - lam * ones, 10))

# 数值优化器交叉验证
res = minimize(lambda w: w @ Sigma @ w, np.ones(3) / 3,
               constraints=[{"type": "eq", "fun": lambda w: w.sum() - 1}], method="SLSQP")
print("SLSQP 权重      :", np.round(res.x, 4))

# 乘子 = 约束放松一单位时目标值的变化率:把 1'w=1 改成 1'w=c
V = lambda c: c**2 / (ones @ x)     # 最优方差随 c 的变化
eps = 1e-6
print("dV/dc 数值      :", round((V(1 + eps) - V(1 - eps)) / (2 * eps), 6))

输出:

闭式解权重      : [0.6616 0.2228 0.1156]
组合方差 w'Σw   : 0.017758  组合波动率: 0.1333
乘子 lambda     : 0.035515
检查 2Σw - λ1   : [0. 0. 0.]
SLSQP 权重      : [0.6616 0.2228 0.1156]
dV/dc 数值      : 0.035515

代码中用 np.linalg.solve(Sigma, ones) 求 \(\Sigma^{-1}\mathbf 1\),而不是先求逆再相乘。解线性方程组比显式求逆更快也更稳定,这是数值计算的通用做法。

5.8.7 加上目标收益约束

马科维茨问题再加一个约束 \(\mu^\top w=m\)(目标期望收益)。这时有两个约束、两个乘子:

\[\mathcal L=w^\top\Sigma w-\lambda_1(\mathbf 1^\top w-1)-\lambda_2(\mu^\top w-m).\]

同样令梯度为零得 \(w=\frac12\Sigma^{-1}(\lambda_1\mathbf 1+\lambda_2\mu)\),再用两个约束解出 \(\lambda_1,\lambda_2\)。结果是:最优权重是 \(m\) 的线性函数,最小方差是 \(m\) 的二次函数,在 \((\sigma,m)\) 平面上画出来是一条双曲线,即有效前沿。\(\lambda_2\) 是「目标收益提高一单位,方差至少增加多少」,与有效前沿的斜率直接相关。详细推导见第 11 册第 05 章和第 04 册第 16a 章。


5.9 KKT 条件的直观

5.9.1 从等式约束到不等式约束

实际的组合几乎都有不等式约束:不许卖空(\(w_i\ge0\))、单只上限(\(w_i\le10\%\))、行业暴露上限。拉格朗日乘子法要推广到不等式,结果就是 KKT(Karush–Kuhn–Tucker)条件。

直觉。 每个不等式约束在最优点只有两种状态:

  • 不起作用(非紧):比如最优权重 \(w_i=0.3>0\),约束 \(w_i\ge0\) 没有被碰到。去掉它,最优解不变。它的乘子应该是 0。
  • 起作用(紧):比如最优权重恰好 \(w_i=0\),约束「顶住」了解。它就像一个等式约束,乘子可以非零,而且符号有限制:约束只能从一个方向推回去。

5.9.2 KKT 条件

问题:\(\min f(x)\) s.t. \(h_j(x)=0\)(等式),\(g_i(x)\ge0\)(不等式)。拉格朗日函数 \(\mathcal L=f-\sum_j\lambda_jh_j-\sum_i\mu_ig_i\)。在适当的正则性条件下,最优点满足:

  1. 平稳性:\(\nabla f=\sum_j\lambda_j\nabla h_j+\sum_i\mu_i\nabla g_i\)。
  2. 原始可行:\(h_j(x)=0\),\(g_i(x)\ge0\)。
  3. 对偶可行:\(\mu_i\ge0\)。
  4. 互补松弛:\(\mu_ig_i(x)=0\),即每个 \(i\) 至少有一个为零:要么约束紧(\(g_i=0\)),要么乘子为零(\(\mu_i=0\))。

对凸问题(\(f\) 凸、等式约束线性、不等式约束的可行域凸),KKT 条件也是充分的。均值–方差优化属于这一类。

5.9.3 例:只做多的最小方差组合

\(\min w^\top\Sigma w\) s.t. \(\mathbf 1^\top w=1\),\(w_i\ge0\)。KKT 平稳性条件是

\[2\Sigma w=\lambda\mathbf 1+\mu,\qquad\mu_i\ge0,\qquad\mu_iw_i=0.\]

逐个资产读:

  • 持仓的资产(\(w_i>0\)):互补松弛要求 \(\mu_i=0\),所以 \((2\Sigma w)_i=\lambda\)。持仓资产的边际方差都相等,与 5.8.4 一样。
  • 不持仓的资产(\(w_i=0\)):\((2\Sigma w)_i=\lambda+\mu_i\ge\lambda\)。它的边际方差不低于持仓资产。加一点它进来,方差只会上升,所以不买它是对的。\(\mu_i\) 衡量「这条不许卖空的约束让你损失了多少」。

下面让资产 3 与资产 1 高度相关(0.9)且波动更大,无约束解会做空资产 3:

import numpy as np
from scipy.optimize import minimize

# 资产 3 与资产 1 高度相关且波动更大:无约束最小方差会做空它
vol = np.array([0.15, 0.20, 0.25])
corr = np.array([[1.0, 0.2, 0.9],
                 [0.2, 1.0, 0.3],
                 [0.9, 0.3, 1.0]])
Sigma = np.outer(vol, vol) * corr
ones = np.ones(3)
x = np.linalg.solve(Sigma, ones)
print("无约束解        :", np.round(x / x.sum(), 4))

cons = [{"type": "eq", "fun": lambda w: w.sum() - 1}]
res = minimize(lambda w: w @ Sigma @ w, ones / 3, method="SLSQP",
               constraints=cons, bounds=[(0, None)] * 3)
w = res.x
print("只做多解        :", np.round(w, 4))
g = 2 * Sigma @ w                  # 目标函数梯度
lam = g[:2].mean()                 # 前两个资产权重为正,KKT 要求 g_i = λ
mu = g - lam                       # 非负约束的乘子 μ_i = g_i - λ
print("梯度 2Σw        :", np.round(g, 5))
print("λ               :", round(lam, 5))
print("μ_i = g_i - λ   :", np.round(mu, 5))
print("互补松弛 μ_i*w_i:", np.round(mu * w, 8))

输出:

无约束解        : [ 1.3045  0.2998 -0.6043]
只做多解        : [0.6733 0.3267 0.    ]
梯度 2Σw        : [0.03422 0.03422 0.05525]
λ               : 0.03422
μ_i = g_i - λ   : [ 0.      -0.       0.02103]
互补松弛 μ_i*w_i: [ 0. -0.  0.]

无约束解要做空资产 3 达 60%,用它对冲资产 1。加上不许卖空后,资产 3 权重为 0,约束起作用,乘子 \(\mu_3=0.021>0\);资产 1、2 权重为正,乘子为 0,边际方差都等于 \(\lambda=0.03422\)。四条 KKT 条件全部满足。\(-0\) 是浮点舍入,不是负数。

商业组合优化器(以及第 04 册第 16a 章的有效集法)本质上就是在猜「哪些约束起作用」,再解对应的等式约束问题,直到 KKT 条件全部满足。


5.10 二重积分

5.10.1 定义与直觉

金融例子。 两只资产的收益 \((X,Y)\) 有联合密度 \(f(x,y)\)。「两者同时上涨」的概率是密度在第一象限上的「体积」:

\[P(X>0,Y>0)=\iint_{x>0,\,y>0}f(x,y)\,dx\,dy.\]

定义(直观版)。 把平面区域 \(D\) 切成许多小矩形,每个小矩形面积 \(\Delta x\Delta y\),取函数值乘面积再求和,让网格无限细,极限就是二重积分 \(\iint_Df(x,y)\,dx\,dy\)。几何上,它是曲面 \(z=f(x,y)\) 与区域 \(D\) 之间的体积。这和第 03 章的一元定积分(面积 = 细长条之和)是同一个思路。

5.10.2 累次积分(Fubini 定理)

结论。 对性质良好的函数(连续,或非负,或绝对可积),二重积分可以化成两次一元积分,先积哪个都行:

\[\iint_{[a,b]\times[c,d]}f(x,y)\,dx\,dy=\int_a^b\Big(\int_c^df(x,y)\,dy\Big)dx=\int_c^d\Big(\int_a^bf(x,y)\,dx\Big)dy.\]

内层积分时,外层变量当常数,和求偏导时「其他变量当常数」是一样的思路。

数值例 1:两个独立违约时间同时在 5 年内发生。 \(T_1\sim\text{Exp}(0.02)\),\(T_2\sim\text{Exp}(0.03)\) 独立,联合密度 \(0.02e^{-0.02t_1}\cdot0.03e^{-0.03t_2}\)。

\[P(T_1\le5,T_2\le5)=\int_0^5 0.02e^{-0.02t_1}dt_1\cdot\int_0^5 0.03e^{-0.03t_2}dt_2=(1-e^{-0.1})(1-e^{-0.15})=0.09516\times0.13929=0.01326.\]

被积函数是乘积、区域是矩形时,二重积分等于两个一元积分之积。这就是独立事件概率相乘。

数值例 2:谁先违约。 区域不再是矩形:\(\{t_1<t_2\}\)。积分限要写对,外层 \(t_1\) 从 0 到 \(\infty\),内层 \(t_2\) 从 \(t_1\) 到 \(\infty\):

  1. 内层:\(\int_{t_1}^\infty\lambda_2e^{-\lambda_2t_2}dt_2=e^{-\lambda_2t_1}\)(这就是 \(P(T_2>t_1)\))。
  2. 外层:\(\int_0^\infty\lambda_1e^{-\lambda_1t_1}e^{-\lambda_2t_1}dt_1=\dfrac{\lambda_1}{\lambda_1+\lambda_2}\)。

代入 \(\lambda_1=0.02\),\(\lambda_2=0.03\),得 \(P(T_1<T_2)=0.4\)。信用篮子产品(第 08 册第 25 章)的首次违约定价用的就是这种计算。


5.11 变量替换与雅可比行列式

5.11.1 一元回顾

一元换元:\(x=\phi(u)\) 时 \(dx=\phi'(u)du\),即

\[\int f(x)\,dx=\int f(\phi(u))\,|\phi'(u)|\,du\]

(取绝对值并按 \(u\) 从小到大积分)。因子 \(|\phi'(u)|\) 修正「刻度被拉伸」:\(u\) 轴上长度 \(du\) 的小段,映射到 \(x\) 轴上长度约为 \(|\phi'(u)|du\)。

5.11.2 二元:面积的伸缩因子

二元换元 \(x=x(u,v)\),\(y=y(u,v)\)。\((u,v)\) 平面上一个 \(du\times dv\) 的小矩形,被映射成 \((x,y)\) 平面上的一个小平行四边形。它的两条边近似是向量 \(\big(\frac{\partial x}{\partial u},\frac{\partial y}{\partial u}\big)du\) 和 \(\big(\frac{\partial x}{\partial v},\frac{\partial y}{\partial v}\big)dv\),面积等于这两个向量构成的行列式的绝对值。所以

\[dx\,dy=|\det J|\,du\,dv,\qquad J=\frac{\partial(x,y)}{\partial(u,v)}=\begin{pmatrix}\partial x/\partial u&\partial x/\partial v\\ \partial y/\partial u&\partial y/\partial v\end{pmatrix}.\]

\(J\) 叫雅可比矩阵,\(\det J\) 叫雅可比行列式。换元公式为

\[\iint_Df(x,y)\,dx\,dy=\iint_{D'}f\big(x(u,v),y(u,v)\big)\,|\det J|\,du\,dv.\]

数值例:线性变换。 \(x=2u\),\(y=u+v\)。\(J=\begin{pmatrix}2&0\\1&1\end{pmatrix}\),\(\det J=2\)。\((u,v)\) 平面上的单位正方形被映射成面积为 2 的平行四边形。行列式就是线性变换的「面积放大倍数」(第 06 章)。

5.11.3 极坐标与高斯积分

极坐标 \(x=r\cos\theta\),\(y=r\sin\theta\):

\[J=\begin{pmatrix}\cos\theta&-r\sin\theta\\ \sin\theta&r\cos\theta\end{pmatrix},\qquad\det J=r\cos^2\theta+r\sin^2\theta=r.\]

所以 \(dx\,dy=r\,dr\,d\theta\)。离原点越远,同样的 \(dr\,d\theta\) 对应的面积越大,因子 \(r\) 正好描述这一点。

应用:为什么正态密度的常数是 \(1/\sqrt{2\pi}\)。 记 \(I=\int_{-\infty}^\infty e^{-x^2/2}dx\)。这个积分没有初等原函数,直接算不出来。技巧是先算 \(I^2\):

  1. \(I^2=\int e^{-x^2/2}dx\int e^{-y^2/2}dy=\iint_{\mathbb R^2}e^{-(x^2+y^2)/2}dx\,dy\)(两个一元积分之积写成二重积分,Fubini 反过来用)。
  2. 换成极坐标,\(x^2+y^2=r^2\),\(dx\,dy=r\,dr\,d\theta\):\(I^2=\int_0^{2\pi}\int_0^\infty e^{-r^2/2}r\,dr\,d\theta\)。
  3. 内层令 \(s=r^2/2\),\(ds=r\,dr\):\(\int_0^\infty e^{-s}ds=1\)。多出来的 \(r\) 恰好让积分变得可算。
  4. 外层 \(\int_0^{2\pi}d\theta=2\pi\)。所以 \(I^2=2\pi\),\(I=\sqrt{2\pi}\)。

于是 \(\frac1{\sqrt{2\pi}}e^{-x^2/2}\) 积分为 1,是合法的密度。

5.11.4 数值验证

import numpy as np
from scipy.integrate import dblquad

# 1) 高斯积分:直角坐标下的二重积分 vs 极坐标(雅可比 r)
f = lambda y, x: np.exp(-(x**2 + y**2) / 2)
I_cart, _ = dblquad(f, -10, 10, -10, 10)
I_polar, _ = dblquad(lambda r, th: np.exp(-r**2 / 2) * r, 0, 2 * np.pi, 0, 10)
print(f"直角坐标 ∬ = {I_cart:.8f}   极坐标 ∬ (含 r) = {I_polar:.8f}   2π = {2*np.pi:.8f}")
I_wrong, _ = dblquad(lambda r, th: np.exp(-r**2 / 2), 0, 2 * np.pi, 0, 10)
print(f"漏掉雅可比 r 的错误结果 = {I_wrong:.6f}")

# 2) 两只资产同时上涨的概率:二元标准正态,相关系数 ρ
rho = 0.6
def phi2(y, x):
    q = (x**2 - 2 * rho * x * y + y**2) / (1 - rho**2)
    return np.exp(-q / 2) / (2 * np.pi * np.sqrt(1 - rho**2))
P, _ = dblquad(phi2, 0, 10, 0, 10)
print(f"P(X>0, Y>0) 数值积分 = {P:.6f}   公式 1/4 + arcsin(ρ)/(2π) = {0.25 + np.arcsin(rho) / (2*np.pi):.6f}")

输出:

直角坐标 ∬ = 6.28318531   极坐标 ∬ (含 r) = 6.28318531   2π = 6.28318531
漏掉雅可比 r 的错误结果 = 7.874805
P(X>0, Y>0) 数值积分 = 0.352416   公式 1/4 + arcsin(ρ)/(2π) = 0.352416

两点说明。dblquad(f, a, b, c, d) 的被积函数参数顺序是 f(y, x),内层变量在前,这是 scipy 的约定,容易写反。积分限取 \(\pm10\) 而不是 \(\pm\infty\),因为 \(e^{-50}\) 已可忽略。

第二个结果的公式 \(\frac14+\frac{\arcsin\rho}{2\pi}\) 也来自变量替换:令 \(X=Z_1\),\(Y=\rho Z_1+\sqrt{1-\rho^2}Z_2\)(\(Z_1,Z_2\) 独立标准正态),区域 \(\{X>0,Y>0\}\) 在 \((z_1,z_2)\) 平面上是一个顶点在原点、张角为 \(\frac\pi2+\arcsin\rho\) 的扇形。独立标准正态的联合密度在极坐标下与 \(\theta\) 无关,所以概率等于张角除以 \(2\pi\)。\(\rho=0.6\) 时同涨概率 35.2%,比独立时的 25% 高出 10 个点。

5.11.5 密度的变换

雅可比行列式在概率论里最常用的地方是求变换后随机变量的密度。

一元。 若 \(Y=\phi(X)\) 单调,\(X\) 的密度为 \(f_X\),则

\[f_Y(y)=f_X\big(\phi^{-1}(y)\big)\cdot\Big|\frac{d\phi^{-1}(y)}{dy}\Big|.\]

数值例:对数正态密度。 股价 \(S=e^X\),\(X\sim N(\mu,\sigma^2)\)。反函数 \(x=\ln s\),\(dx/ds=1/s\),所以

\[f_S(s)=\frac1{s\,\sigma\sqrt{2\pi}}\exp\Big(-\frac{(\ln s-\mu)^2}{2\sigma^2}\Big).\]

多出来的 \(1/s\) 就是雅可比因子。\(\mu=0\),\(\sigma=0.2\) 时,\(f_S(1)=\frac{1}{0.2\sqrt{2\pi}}=1.9947\)。

多元。 若 \(Y=\phi(X)\) 是 \(\mathbb R^n\) 上的一一变换,则

\[f_Y(y)=f_X\big(\phi^{-1}(y)\big)\cdot\big|\det J_{\phi^{-1}}(y)\big|.\]

数值例。 \(Y_1=X_1+X_2\),\(Y_2=X_1-X_2\)。反解 \(X_1=(Y_1+Y_2)/2\),\(X_2=(Y_1-Y_2)/2\),雅可比矩阵 \(\begin{pmatrix}1/2&1/2\\1/2&-1/2\end{pmatrix}\),行列式 \(-1/2\),绝对值 \(1/2\)。所以 \(f_Y(y_1,y_2)=\frac12f_X\big(\frac{y_1+y_2}2,\frac{y_1-y_2}2\big)\)。第 02 册第 06b 章用这个方法推导和与差的联合分布。


本章小结

内容 公式 备注
偏导数 \(\partial f/\partial x_i\) 其他变量固定;Greeks 都是偏导数
梯度 \(\nabla f=(\partial_1f,\dots,\partial_nf)^\top\) 上升最快方向,垂直于等高线
一阶近似 \(f(x+\Delta x)\approx f+\nabla f^\top\Delta x\) 风险归因
方向导数 \(D_uf=\nabla f^\top u\),\(\lVert u\rVert=1\)
多元链式法则 \(\frac{d}{dt}f(x(t))=\nabla f^\top\dot x\)
欧拉分解 \(\sigma_p=\sum w_i\,\partial\sigma_p/\partial w_i\) 一次齐次函数;风险贡献
Hessian \(H_{ij}=\partial^2f/\partial x_i\partial x_j\) 对称;组合方差 \(H=2\Sigma\)
二阶泰勒 \(f+\nabla f^\top\Delta x+\frac12\Delta x^\top H\Delta x\) Delta–Gamma–Vega 近似
一阶条件 \(\nabla f(x^*)=0\) 必要条件
二阶条件 \(H\) 正定→极小;负定→极大;不定→鞍点
凸性 \(H\) 半正定 \(\iff\) 凸 局部最优 = 全局最优
拉格朗日 \(\nabla f=\lambda\nabla g\),\(g=c\) \(\lambda=df^*/dc\) 影子价格
两资产最小方差 \(w_1^*=\frac{\sigma_2^2-\sigma_{12}}{\sigma_1^2+\sigma_2^2-2\sigma_{12}}\)
\(n\) 资产最小方差 \(w^*=\frac{\Sigma^{-1}\mathbf 1}{\mathbf 1^\top\Sigma^{-1}\mathbf 1}\),\(\sigma^2_{\min}=\frac1{\mathbf 1^\top\Sigma^{-1}\mathbf 1}\)
KKT 平稳、原始可行、\(\mu\ge0\)、\(\mu_ig_i=0\) 凸问题时充要
Fubini \(\iint f=\int\!\big(\int f\,dy\big)dx\) 可交换积分顺序
雅可比换元 \(dx\,dy=\lvert\det J\rvert\,du\,dv\) 极坐标 \(\det J=r\)
高斯积分 \(\int e^{-x^2/2}dx=\sqrt{2\pi}\) 极坐标推导
密度变换 \(f_Y=f_X(\phi^{-1})\lvert\det J_{\phi^{-1}}\rvert\) 对数正态的 \(1/s\)

练习

1. 求 \(f(x,y)=x^2y+3y\) 在 \((1,2)\) 处的两个偏导数。

答:\(f_x=2xy=4\),\(f_y=x^2+3=4\)。

2. \(f(x,y)=x^2+xy\)。求 \((1,1)\) 处的梯度,以及沿方向 \((3,4)\) 的方向导数。

答:\(\nabla f=(2x+y,\ x)=(3,1)\)。单位方向 \(u=(0.6,0.8)\),\(D_uf=3\times0.6+1\times0.8=2.6\)。注意先把方向向量化成单位长度。

3. 求 \(f(x,y)=x^2+4xy+y^2\) 的驻点并判断类型。

答:\(\nabla f=(2x+4y,\ 4x+2y)=0\) 只有解 \((0,0)\)。\(H=\begin{pmatrix}2&4\\4&2\end{pmatrix}\),\(\det H=4-16=-12<0\),不定,是鞍点(特征值 6 和 \(-2\))。沿 \(x=y\) 方向 \(f=6x^2\) 上升,沿 \(x=-y\) 方向 \(f=-2x^2\) 下降。

4. 两只资产 \(\sigma_1=10\%\),\(\sigma_2=30\%\),\(\rho=0\)。求最小方差组合权重和波动率。

答:\(w_1^*=\dfrac{0.09}{0.01+0.09}=0.9\)。方差 \(0.81\times0.01+0.01\times0.09=0.009\),波动率 9.49%,低于资产 1 的 10%。

5. 上题改为 \(\rho=-1\),结果如何?

答:\(\sigma_{12}=-0.03\),\(w_1^*=\dfrac{0.09+0.03}{0.01+0.09+0.06}=0.75\)。组合波动率 \(0.75\times0.1-0.25\times0.3=0\),完全对冲。

6. 用拉格朗日乘子法求 \(\max xy\) s.t. \(x+y=10\),并解释 \(\lambda\)。

答:\(\mathcal L=xy-\lambda(x+y-10)\)。\(y=\lambda\),\(x=\lambda\),代入约束得 \(x=y=\lambda=5\),最大值 25。约束放松到 \(x+y=11\) 时最大值 \(30.25\),增加 5.25,近似等于 \(\lambda=5\)。

7. 夏普比率 \(g(a,b)=a/\sqrt b\)。在 \(a=0.06\),\(b=0.0225\) 处求两个偏导数,并估计方差升到 0.025 时夏普比率的变化。

答:\(\sqrt b=0.15\),\(g=0.4\)。\(\partial g/\partial a=1/0.15=6.667\);\(\partial g/\partial b=-\frac12\times0.06\times0.0225^{-1.5}=-0.06/(2\times0.003375)=-8.889\)。变化约 \(-8.889\times0.0025=-0.0222\)。精确值 \(0.06/\sqrt{0.025}-0.4=0.3795-0.4=-0.0205\)。

8. 判断下列函数是否为凸函数:(a)\(w^\top\Sigma w\),\(\Sigma\) 为协方差矩阵;(b)\(f(x)=-\ln x\),\(x>0\);(c)\(f(x,y)=xy\)。

答:(a)凸,Hessian \(2\Sigma\) 半正定。(b)凸,\(f''=1/x^2>0\)。(c)不凸,\(H=\begin{pmatrix}0&1\\1&0\end{pmatrix}\) 特征值 \(\pm1\),不定。

9. 写出 \(f(x,y)=e^{x+2y}\) 在 \((0,0)\) 处的二阶泰勒展开,并在 \((0.1,0.05)\) 处与真值比较。

答:\(\nabla f(0)=(1,2)\),\(H(0)=\begin{pmatrix}1&2\\2&4\end{pmatrix}\)。\(f\approx1+x+2y+\frac12(x^2+4xy+4y^2)\)。代入得 \(1+0.1+0.1+\frac12(0.01+0.02+0.01)=1.22\),真值 \(e^{0.2}=1.22140\)。

10. 用 KKT 条件求 \(\min(x-2)^2\) s.t. \(x\le1\),并解释乘子。

答:写成 \(g(x)=1-x\ge0\),\(\mathcal L=(x-2)^2-\mu(1-x)\)。平稳性 \(2(x-2)+\mu=0\)。若 \(\mu=0\),则 \(x=2\),不可行。所以约束起作用,\(x=1\),\(\mu=2\ge0\)。含义:上限从 1 放宽到 \(1+\epsilon\),目标值约下降 \(2\epsilon\)。

11. 两个独立违约时间 \(T_1\sim\text{Exp}(0.01)\),\(T_2\sim\text{Exp}(0.04)\)。求 \(P(T_1<T_2)\)。

答:\(\lambda_1/(\lambda_1+\lambda_2)=0.01/0.05=0.2\)。

12. 设 \((X_1,X_2)\) 有联合密度 \(f_X\),\(Y_1=X_1+X_2\),\(Y_2=X_1-X_2\)。写出 \(Y\) 的联合密度,并说明雅可比因子是多少。

答:\(f_Y(y_1,y_2)=\frac12f_X\big(\frac{y_1+y_2}2,\frac{y_1-y_2}2\big)\)。反变换的雅可比行列式是 \(-\frac12\),取绝对值 \(\frac12\)。也可以先算正变换 \(\det\begin{pmatrix}1&1\\1&-1\end{pmatrix}=-2\),再取倒数的绝对值。


在全书中用到的地方

  • 第 02 册第 06b 章(条件分布、次序统计量与变换):用雅可比行列式求变换后的联合密度。
  • 第 02 册第 07c 章(矩母函数与多元正态):多元正态密度的常数与线性变换。
  • 第 03 册第 01 章、第 09 章:多元 Delta 方法用梯度;最大似然估计令得分函数(对数似然的梯度)为零,用 Hessian(Fisher 信息)给出标准误。
  • 第 03 册第 13a 章、第 05 册第 19a 章:最小二乘的正规方程。
  • 第 04 册第 02 章、第 12 章、第 16a 章:无约束优化的一阶二阶条件;约束优化理论与 KKT;二次规划与有效集法。几乎整本第 04 册都建立在本章之上。
  • 第 08 册第 14 章、第 19b 章:伊藤引理是二阶泰勒展开的随机版本;Gamma、Vega 与 Greeks 风险管理。
  • 第 08 册第 25 章(信用衍生品):首次违约篮子用到多个违约时间的联合分布积分。
  • 第 10 册第 08 章、第 09 章、第 11 章:性能曲面的梯度与 Hessian;最速下降与牛顿法;反向传播就是多元链式法则。
  • 第 11 册第 04 章、第 05 章:风险模型中的边际风险与风险贡献;均值–方差、最小方差、风险平价组合的构建。