聊天視窗

數據驅動的投資決策:金融分析與機器學習實務 - 第 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、期權定價模型及機器學習風險評估的基礎。 透過實際程式碼示範,讀者可立即在自己的專案中落地實作。