核密度估計

Python 量化風險管理

Jamsheed Shorish

Computational Economist

重看長條圖

  • 風險因子分佈
    • 假設(如 Normal、T 等)
    • 配適(母數估計、蒙地卡羅模擬)
    • 忽略(歷史模擬)
  • 實際資料:長條圖
  • 如何用機率分佈表示長條圖?
    • 濾波將資料「平滑化」
    • 非母數估計

損失的長條圖

Python 量化風險管理

資料平滑化

  • 濾波器:抹平長條圖的「凸起」

長條圖座標軸

Python 量化風險管理

資料平滑化

  • 濾波器:抹平長條圖的「凸起」
  • 觀測值會隨時間累積

觀測值逐步累積的示意圖

Python 量化風險管理

資料平滑化

  • 濾波器:抹平長條圖的「凸起」
  • 觀測值會隨時間累積

觀測值逐步累積的示意圖

Python 量化風險管理

資料平滑化

  • 濾波器:抹平長條圖的「凸起」
  • 觀測值會隨時間累積

觀測值逐步累積的示意圖

Python 量化風險管理

資料平滑化

  • 濾波器:抹平長條圖的「凸起」
  • 觀測值會隨時間累積
  • 選取特定的投資組合損失

損失與以箭頭標示的特定損失

Python 量化風險管理

資料平滑化

  • 濾波器:抹平長條圖的「凸起」
  • 觀測值會隨時間累積
  • 選取特定的投資組合損失
    • 檢視鄰近的損失

覆蓋在觀測值上的核視窗

Python 量化風險管理

資料平滑化

  • 濾波器:抹平長條圖的「凸起」
  • 觀測值會隨時間累積
  • 選取特定的投資組合損失
    • 檢視鄰近的損失
    • 形成損失的「加權平均」
  • 核函數:濾波器的選擇;決定「視窗」

由核得到的加權平均示意

Python 量化風險管理

資料平滑化

  • 濾波器:抹平長條圖的「凸起」
  • 觀測值會隨時間累積
  • 選取特定的投資組合損失
    • 檢視鄰近的損失
    • 形成損失的「加權平均」
  • 核函數:濾波器的選擇;決定「視窗」
    • 將視窗移到另一個損失值

第二個核位置的示意圖

Python 量化風險管理

資料平滑化

  • 濾波器:抹平長條圖的「凸起」
  • 觀測值會隨時間累積
  • 選取特定的投資組合損失
    • 檢視鄰近的損失
    • 形成損失的「加權平均」
  • 核函數:濾波器的選擇;決定「視窗」
    • 將視窗移到另一個損失值
  • 核密度估計:機率密度

核密度估計的示意圖

Python 量化風險管理

Gaussian 核

  • 連續核
  • 依與中心的距離為所有觀測值加權
  • 一般而言:可用的核很多
    • 用於時間序列分析
    • 用於訊號處理

Gaussian 核的圖示

Python 量化風險管理

Python 中的 KDE

from scipy.stats import gaussian_kde

kde = guassian_kde(losses)
loss_range = np.linspace(np.min(losses), np.max(losses), 1000)
plt.plot(loss_range, kde.pdf(loss_range))
  • 視覺化:由 KDE 配適得到的機率密度函數

Gaussian KDE 估計圖

Python 量化風險管理

用 KDE 尋找 VaR

  • VaR:使用 gaussian_kde.resample() 方法
  • 對產生的樣本找分位數
  • CVaR:仍為期望值,不過
    • gaussian_kde 沒有 .expect() 方法 ⇒ 需自行積分
    • 本練習提供特製的 .expect() 方法
sample = kde.resample(size = 1000)

VaR_99 = np.quantile(sample, 0.99)
print("VaR_99 from KDE: ", VaR_99)
VaR_99 from KDE: 0.08796423698448601
Python 量化風險管理

一起來練習吧!

Python 量化風險管理

Preparing Video For Download...