神经网络的风险管理

Python 中的定量风险管理

Jamsheed Shorish

Computational Economist

投资组合的实时更新

  • 风险管理
    • 已定义的风险度量(VaR、CVaR)
    • 已估计的风险度量(参数法、历史法、蒙特卡罗)
    • 已优化的投资组合(如现代投资组合理论)
  • 新的市场信息 => _更新_ 组合权重
    • 问题:组合优化成本高
    • 方案:$\text{weights} = f(\text{prices})$
    • 实时计算 $f$
    • 仅偶尔更新 $f$
Python 中的定量风险管理

神经网络

  • 神经网络:$\text{output} = f(\text{input})$
    • 神经元:函数中的互联处理节点
  • 最初于 20 世纪 40–50 年代提出
  • 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 中的定量风险管理

Passons à la pratique !

Python 中的定量风险管理

Preparing Video For Download...