類神經網路的風險管理

Python 量化風險管理

Jamsheed Shorish

Computational Economist

投資組合即時更新

  • 風險管理
    • 已定義的風險衡量(VaR、CVaR)
    • 估計的風險衡量(參數式、歷史式、蒙地卡羅)
    • 最佳化投資組合(例如現代投資組合理論)
  • 新的市場資訊 ⇒ _更新_ 組合權重
    • 問題:投資組合最佳化成本高
    • 解法:$\text{weights} = f(\text{prices})$
    • 即時 _評估_ $f$
    • 只在必要時 _更新_ $f$
Python 量化風險管理

類神經網路

  • 類神經網路:$\text{output} = f(\text{input})$
    • 神經元:函式中的互相連結處理節點
  • 最初於 1940–1950 年代發展
  • 2000 年代初:將類神經網路應用於「巨量資料」
    • 影像辨識、處理
    • 金融資料
    • 搜尋引擎資料
  • 深度學習:機器學習的一部分(以類神經網路為核心)
    • 2015:Google 發佈開源的 Python 深度學習函式庫 TensorFlow
Python 量化風險管理

類神經網路結構

  • 層:相連的處理神經元
    • 輸入層

類神經網路的輸入層

Python 量化風險管理

類神經網路結構

  • 類神經網路結構
    • 輸入層
    • 隱藏層

類神經網路的隱藏層

Python 量化風險管理

類神經網路結構

  • 類神經網路結構
    • 輸入層
    • 隱藏層
    • 輸出層
  • 訓練:學習輸入與輸出之間的關係

輸入、隱藏與輸出層示意圖

Python 量化風險管理

類神經網路結構

  • 類神經網路結構
    • 輸入層
    • 隱藏層
    • 輸出層
  • 訓練:學習輸入與輸出之間的關係
    • 資產價格 ⇒ 輸入層

資產價格輸入類神經網路的示意圖

Python 量化風險管理

類神經網路結構

  • 類神經網路結構
    • 輸入層
    • 隱藏層
    • 輸出層
  • 訓練:學習輸入與輸出之間的關係
    • 資產價格 ⇒ 輸入層
    • 輸入層+隱藏層處理

類神經網路中的權重連結示意

Python 量化風險管理

類神經網路結構

  • 類神經網路結構
    • 輸入層
    • 隱藏層
    • 輸出層
  • 訓練:學習輸入與輸出之間的關係
    • 資產價格 ⇒ 輸入層
    • 輸入層+隱藏層處理
    • 隱藏層+輸出層處理

隱藏層到輸出層的權重示意

Python 量化風險管理

類神經網路結構

  • 類神經網路結構
    • 輸入層
    • 隱藏層
    • 輸出層
  • 訓練:學習輸入與輸出之間的關係
    • 資產價格 ⇒ 輸入層
    • 輸入層+隱藏層處理
    • 隱藏層+輸出層處理
    • 輸出 ⇒ 投資組合權重

輸出層對應為投資組合權重的示意圖

Python 量化風險管理

用類神經網路做投資組合最佳化

  • 訓練
    • 將輸出與既有的「最佳」投資組合權重 _比較_
    • 目標:最小化輸出與權重間的「誤差」
    • 誤差小 ⇒ 網路已被 _訓練_
  • 使用
    • 輸入:新的、未見過的資產價格
    • 輸出:對新價格預測的「最佳」投資組合權重
    • 最佳權重 = 風險管理
Python 量化風險管理

在 Python 中建立類神經網路

 

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Dense
model = Sequential() model.add(Dense(10, input_dim=4, activation='sigmoid')) model.add(Dense(4))
Python 量化風險管理

在 Python 中訓練網路

  • 歷史資產價格:training_input 矩陣
  • 歷史投資組合權重:training_output 向量
  • 編譯模型需指定:
    • 要最小化的誤差('loss')
    • 使用的最佳化演算法('optimizer')
  • 將模型擬合到訓練資料
    • epochs:更新內部參數的訓練迴圈次數
model.compile(loss='mean_squared_error', optimizer='rmsprop')

model.fit(training_input, training_output, epochs=100)
Python 量化風險管理

在 Python 中做風險管理

  • 使用:提供新的(例如即時)資產價格資料
    • 新向量 new_asset_prices 輸入到輸入層
  • model.predict() 在新價格上評估網路
    • 結果predicted 投資組合權重
  • 隨時間累積足夠資料 ⇒ 重新訓練 網路
    • 在過往資料上測試網路 ⇒ 回測
# new asset prices are in the vector new_asset_prices
predicted = model.predict(new_asset_prices)
Python 量化風險管理

一起來練習吧!

Python 量化風險管理

Preparing Video For Download...