返回目錄
A
數據驅動的投資決策:金融分析與機器學習實務 - 第 3 章
第 3 章 時序統計與風險度量
發布於 2026-02-24 01:55
# 第 3 章 時序統計與風險度量
> 在金融市場,所有投資決策的核心皆建立於對資產回報分布、波動與風險的準確把握。 本章將帶領讀者從基礎的收益率計算,延伸至波動率、相關性與風險度量指標,並以實作範例說明如何在 Python 環境中完成這些計算。
## 3.1 收益率分佈
### 3.1.1 收益率的定義
| 回報類型 | 公式 | 例子 |
|---|---|---|
| 簡單回報 | \(R_t = \frac{P_t - P_{t-1}}{P_{t-1}}\) | 若收盤價從 100 萬變到 101 萬,\(R_t = 0.01\) |
| 連續(對數)回報 | \(r_t = \ln\frac{P_t}{P_{t-1}}\) | 同上,\(r_t = \ln(1.01)\approx 0.00995\) |
> **注意**:對數回報在多期複合計算時可直接相加,且近似於簡單回報,方便統計分析。
### 3.1.2 收益率分布形態
- **正態分布**:傳統金融理論假設回報服從正態分布,但實際數據常顯示**尖峰與肥尾**。
- **t 分布 / 高斯混合**:能更好地捕捉極端事件。
### 3.1.3 實作範例:計算並可視化 AAPL 回報分布
python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import yfinance as yf
# 下載歷史資料
ticker = 'AAPL'
start, end = '2022-01-01', '2023-01-01'
df = yf.download(ticker, start=start, end=end, progress=False)
# 連續回報
returns = np.log(df['Adj Close'] / df['Adj Close'].shift(1)).dropna()
# 簡單回報
simple_ret = df['Adj Close'].pct_change().dropna()
# 繪製直方圖
plt.figure(figsize=(10,5))
plt.hist(returns, bins=50, alpha=0.7, label='Log Returns')
plt.hist(simple_ret, bins=50, alpha=0.5, label='Simple Returns')
plt.legend()
plt.title(f'{ticker} 2022 年回報分佈')
plt.xlabel('回報率')
plt.ylabel('頻率')
plt.show()
> 結果通常顯示左側尖峰與右側肥尾,提示常態假設不足。
## 3.2 波動率與其測量
### 3.2.1 歷史波動率
波動率衡量資產價格的變動幅度,常用**年化標準差**表示:
\[\sigma_{annual} = \sqrt{252} \times \sigma_{daily}\]
- 252:交易日數。
### 3.2.2 估計方法
| 方法 | 公式 | 優缺點 |
|---|---|---|
| 簡單歷史波動率 | \(\sigma_{h}=\sqrt{\frac{1}{n-1}\sum_{i=1}^{n}(r_i-\bar r)^2}\) | 直觀、易計算;對近期市場變動不敏感 |
| 交易量加權波動率 | 以交易量權重 | 能反映市場活躍度 |
| GARCH(1,1) | \(\sigma_t^2 = \omega + \alpha\epsilon_{t-1}^2 + \beta\sigma_{t-1}^2\) | 捕捉波動聚類;參數較多 |
### 3.2.3 實作範例:滑動窗口波動率
python
# 滑動 30 天窗口計算日波動率
window = 30
vol_daily = returns.rolling(window).std()
vol_annual = vol_daily * np.sqrt(252)
plt.figure(figsize=(10,4))
plt.plot(vol_annual.index, vol_annual, label='Annualized Volatility')
plt.title('滑動 30 天 AAPL 年化波動率')
plt.ylabel('波動率')
plt.legend()
plt.show()
## 3.3 相關性與協方差
### 3.3.1 相關係數
- **Pearson**:衡量線性關係。
- **Spearman**:衡量秩序關係,對極端值不敏感。
- **Partial correlation**:在控制其他變數時的相關性。
### 3.3.2 相關矩陣
python
# 下載多個標的
assets = ['AAPL', 'MSFT', 'GOOGL', 'AMZN']
prices = pd.DataFrame()
for sym in assets:
tmp = yf.download(sym, start=start, end=end, progress=False)['Adj Close']
prices[sym] = tmp
log_ret = np.log(prices/prices.shift(1)).dropna()
cor_matrix = log_ret.corr()
print(cor_matrix)
# 熱度圖可視化
plt.figure(figsize=(6,5))
plt.imshow(cor_matrix, cmap='coolwarm', vmin=-1, vmax=1)
plt.colorbar(label='Pearson 相關係數')
plt.xticks(range(len(assets)), assets)
plt.yticks(range(len(assets)), assets)
plt.title('AAPL、MSFT、GOOGL、AMZN 2022 年相關矩陣')
plt.show()
> 相關矩陣揭示了市場多樣化的潛在效益;高相關表示組合風險可能集中。
## 3.4 風險度量指標
### 3.4.1 Value at Risk (VaR)
| 方法 | 主要假設 | 適用場景 |
|---|---|---|
| 歷史模擬 | 無需分布假設 | 直接使用過往回報;需大量歷史資料 |
| 方差-協方差法 | 回報為正態分布 | 公式簡單;對肥尾數據不準確 |
| Monte‑Carlo | 模擬回報分布 | 可處理複雜投資組合;計算量大 |
計算公式(方差-協方差法):
\[VaR_{\alpha}=\Phi^{-1}(\alpha)\times\sigma\]
### 3.4.2 Conditional VaR (CVaR) / Expected Shortfall
CVaR 是超出 VaR 位置的平均損失量,定義為:
\[CVaR_{\alpha}=E[-R\mid R\leq VaR_{\alpha}]\]
### 3.4.3 實作範例:歷史模擬 VaR 與 CVaR
python
# 假設持有 1000 萬新台幣
capital = 10_000_000
alpha = 0.01 # 99% 置信區間
# 歷史 VaR
var_hist = -np.percentile(returns, alpha*100)
# CVaR(期望短缺)
cvar_hist = -returns[returns <= -var_hist].mean()
print(f'歷史 VaR (1% CI):{var_hist:.4%}')
print(f'歷史 CVaR (1% CI):{cvar_hist:.4%}')
> 例子中,若 var_hist = 2% ,則 99% 置信區間內的最大虧損為 200 萬;CVaR 通常為 2.5% 以上,顯示極端損失的平均水平。
## 3.5 案例研究:AAPL 近一年波動率與 VaR
1. **下載資料**:2022 年 AAPL 日收盤價。
2. **計算連續回報**。
3. **年化波動率**:30 天滑動窗口。
4. **方差-協方差 VaR**(95% CI)。
5. **歷史模擬 VaR**(1% CI)。
> **結果示例**(實際數值請執行程式):
> - 年化波動率平均 0.28。
> - 方差-協方差 VaR(95%) = 0.0124。
> - 歷史 VaR(99%) = 0.0257。
> - CVaR(99%) = 0.037。
## 3.6 實務建議
| 項目 | 推薦實務 |
|---|---|
| **模型再校準** | 每月或每季檢查波動率、VaR 參數;若新資料偏離舊參數,進行重新估計 |
| **風險限額設置** | 根據 VaR 或 CVaR 設定日/週風險限額,避免單日大幅虧損 |
| **數據完整性檢查** | 監控價格缺失、分紅調整等事件,確保回報計算正確 |
| **情境分析** | 用不同置信區間或假設檢查風險敏感度 |
## 3.7 小結
- 收益率分布揭示了常態假設的局限,肥尾現象必須被納入風險模型。
- 波動率的計算不僅是統計量,亦是資產定價與風險控制的基礎。
- 相關性矩陣對多元投資組合的分散效益評估至關重要。
- VaR 與 CVaR 為實務風險管理提供量化指標,但需注意模型選擇與再校準。
> 本章內容為後續使用 GARCH、期權定價模型及機器學習風險評估的基礎。 透過實際程式碼示範,讀者可立即在自己的專案中落地實作。