跳轉到

1952 -- Harry Markowitz《投資組合選擇》:分散風險變成數學#

案件描述#

1952 年 3 月,一位 25 歲的芝加哥大學博士生 Harry Markowitz 在《Journal of Finance》發表了短短 14 頁的論文《投資組合選擇》(Portfolio Selection)。這篇論文做了一件改變整個金融業的事:

把「不要把雞蛋放在同一個籃子裡」這句古老的諺語,變成可以求解的數學最佳化問題。

1990 年,Markowitz 因這篇論文獲得諾貝爾經濟學獎。評審委員稱之為「華爾街第一次革命」。

前因:投資學的黑暗時代#

  • 1950 年代的投資學教科書還在教「選好股票」:強調公司的品質、股息記錄、產業前景——只看個股,不看組合。
  • 凱因斯主義盛行,但投資決策完全沒有數學基礎。
  • Cowles(1933)已經證明預測無用,但「那投資人該怎麼辦?」沒有人有系統性的答案。
  • 線索:Markowitz 在準備博士論文時,讀到 John Burr Williams(1938)的《投資價值理論》,書中主張股票的價值等於未來股息的現值。Markowitz 立刻抓到矛盾:如果每個人都最大化期望報酬,那為什麼不把所有錢都投進期望報酬最高的那一檔股票?

推理過程#

線索一:報酬不是唯一的目標——還有風險#

Markowitz 的洞察:投資人關心的是「期望報酬」與「風險」的組合,而不是單獨的期望報酬。他提出用變異數衡量風險。

線索二:相關性是分散的靈魂#

關鍵數學:對 \(n\) 檔資產,權重 \(\mathbf{w} = (w_1, \dots, w_n)^T\) ,期望報酬向量 \(\boldsymbol{\mu}\) ,共變異數矩陣 \(\Sigma\) :

\[ E[R_p] = \mathbf{w}^T \boldsymbol{\mu}, \qquad \mathrm{Var}(R_p) = \mathbf{w}^T \Sigma \, \mathbf{w} \]

展開變異數:

\[ \mathbf{w}^T \Sigma \, \mathbf{w} = \sum_i w_i^2 \sigma_i^2 + \sum_{i \neq j} w_i w_j \, \sigma_{ij} \]

當資產間相關係數 \(\rho_{ij} < 1\) 時,組合變異數小於個股變異數的加權平均——這就是「分散投資降低風險」的數學證明。極端情況下,若 \(\rho = -1\) ,可以構造出零風險組合。

線索三:效率前緣——一個二次規劃問題#

Markowitz 把投資組合選擇寫成二次規劃(QP):

\[ \min_{\mathbf{w}} \; \mathbf{w}^T \Sigma \, \mathbf{w} \quad \text{s.t.} \quad \mathbf{w}^T \boldsymbol{\mu} = \mu^*, \quad \mathbf{w}^T \mathbf{1} = 1 \]

對每個目標報酬 \(\mu^*\) 求解,得到的最低風險組合連成一條曲線——效率前緣(Efficient Frontier)。理性投資人只應該選擇前緣上的組合。

Markowitz 在 1950 年代初期用手工計算(參考線性規劃的 Dantzig 單純形法)求解小規模問題——這也是二次規劃演算法發展的動力之一。

現代程式重現:計算效率前緣#

import numpy as np
from scipy.optimize import minimize

mu = np.array([0.10, 0.12, 0.07, 0.09])          # 期望報酬
Sigma = np.array([[0.04, .01, .002, 0],
                  [.01, .06, .003, .005],
                  [.002, .003, .01, .001],
                  [0, .005, .001, .025]])        # 共變異數矩陣
n = len(mu)

def port_var(w): return w @ Sigma @ w

# 最小變異數組合(s.t. 權重和 = 1)
cons = [{'type': 'eq', 'fun': lambda w: w.sum() - 1}]
res = minimize(port_var, np.repeat(1/n, n), constraints=cons)
print("最小變異數組合權重:", res.x)
print("組合波動率:", np.sqrt(port_var(res.x)))

# 掃描目標報酬,畫出效率前緣
for mu_star in np.linspace(0.07, 0.12, 20):
    cons2 = cons + [{'type': 'eq', 'fun': lambda w: w @ mu - mu_star}]
    r = minimize(port_var, np.repeat(1/n, n), constraints=cons2)
    # (mu_star, sqrt(port_var(r.x))) 即前緣上的一點

後果#

  • 1959 年,Markowitz 出版專書《Portfolio Selection: Efficient Diversification of Investments》,加入完整的計算方法。
  • 1964 年,他的學生 Sharpe 從這套框架中提煉出 CAPM(見 1964-SharpeCAPM.md)。
  • 1990 年諾貝爾獎。
  • 現代資產管理業的根基:所有現代資產配置、風險平價、Robo-advisor 的數學核心都是 Markowitz 的 \(\mathbf{w}^T \Sigma \mathbf{w}\) 。
  • Markowitz 自己曾說,他的貢獻不是告訴投資人「如何選股」,而是「如何在不選股的前提下思考風險」。
  • 著名的盲點:Markowitz 框架依賴 \(\Sigma\) 的估計,而實務上 \(\Sigma\) 難以準確估計(高維度下估計誤差巨大)——這催生了後來的 shrinkage 估計(Ledoit–Wolf 2004)與因子模型。

偵探筆記#

  • 動機:Williams 股息現值理論的內在矛盾
  • 工具:二次規劃、共變異數矩陣、效率前緣
  • 遺產:現代資產管理業的數學根基
  • 盲點:估計誤差、常態分配假設、單期框架(沒有跨期動態)

參考資料#

  • Markowitz, H. (1952). "Portfolio Selection". Journal of Finance, 7(1), 77–91.
  • Markowitz, H. (1959). Portfolio Selection: Efficient Diversification of Investments. Wiley.